Cole Robinson wrote:
...
Okay, I rolled these changes and the BridgeInUse changes into one
patch
(along with Jim's suggestions).
I added a helper function SetBridgeName which basically does:
if user passed bridge name:
verify it doesn't collide
else:
generate bridge name
We call this in Define and CreateXML. When loading configs from a driver
restart, we only attempt to generate a bridge: if checking for
collisions failed, the network wouldn't even be defined, which would
only cause more pain for users.
...
Hi Cole,
Here's a quick review:
One nit below, but what I'd really like is a stand-alone virsh-oriented
way to exercise a few of these new code paths (tests), just to make sure
we get coverage when running "make check". If you can outline something
like that, I'll massage it into a new test.
Generate network bridge names if none passed at define/create
time.
...
diff --git a/src/network_conf.c b/src/network_conf.c
index 6ad0d01..5de164e 100644
--- a/src/network_conf.c
+++ b/src/network_conf.c
@@ -43,6 +43,7 @@
#include "buf.h"
#include "c-ctype.h"
+#define MAX_BRIDGE_ID 256
...
+char *virNetworkAllocateBridge(virConnectPtr conn,
+ const virNetworkObjListPtr nets)
+{
+
+ int id = 0;
+ char *newname;
+
+ do {
+ char try[50];
+
+ snprintf(try, sizeof(try), "virbr%d", id);
+
+ if (!virNetworkBridgeInUse(nets, try, NULL)) {
+ if (!(newname = strdup(try))) {
+ virReportOOMError(conn);
+ return NULL;
+ }
+ return newname;
+ }
+
+ id++;
+ } while (id < MAX_BRIDGE_ID);
This should probably be <= MAX_BRIDGE_ID,
or change MAX_BRIDGE_ID to 255, ..
so that the diagnostic below makes sense.
+ virNetworkReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ _("Bridge generation exceeded max id %d"),
+ MAX_BRIDGE_ID);
+ return NULL;
+}