]> xenbits.xensource.com Git - libvirt.git/commitdiff
Xen: Do not generate net ifname if domain is inactive
authorJim Fehlig <jfehlig@novell.com>
Wed, 27 Apr 2011 22:39:37 +0000 (16:39 -0600)
committerJim Fehlig <jfehlig@novell.com>
Thu, 28 Apr 2011 20:54:06 +0000 (14:54 -0600)
V2: Use virAsprintf instead of snprintf/strdup

The xend driver will generate a virDomainNetDef ifname if one is not
specified in xend sexpr, even if domain is inactive.  The result is
network interface XML containing 'vif-1.Y' on dev attribute of target
element, e.g.

  <interface type='bridge'>
    <target dev='vif-1.0'/>
    ...

This patch changes the behavior to only generate the ifname if not
specified in xend sexpr *and* domain is not inactive (id != -1).

src/xenxs/xen_sxpr.c

index d2ec3709f52703ae540e30588c994b62ccc34fe9..a2fdc71a55c004fa32e884d10c3ffd116f51af20 100644 (file)
@@ -510,7 +510,6 @@ xenParseSxprNets(virDomainDefPtr def,
         node = cur->u.s.car;
         if (sexpr_lookup(node, "device/vif")) {
             const char *tmp2, *model, *type;
-            char buf[50];
             tmp2 = sexpr_node(node, "device/vif/script");
             tmp = sexpr_node(node, "device/vif/bridge");
             model = sexpr_node(node, "device/vif/model");
@@ -547,12 +546,16 @@ xenParseSxprNets(virDomainDefPtr def,
             }
 
             tmp = sexpr_node(node, "device/vif/vifname");
-            if (!tmp) {
-                snprintf(buf, sizeof(buf), "vif%d.%d", def->id, vif_index);
-                tmp = buf;
+            /* If vifname is specified in xend config, include it in net
+             * definition regardless of domain state.  If vifname is not
+             * specified, only generate one if domain is active (id != -1). */
+            if (tmp) {
+                if (!(net->ifname = strdup(tmp)))
+                    goto no_memory;
+            } else if (def->id != -1) {
+                if (virAsprintf(&net->ifname, "vif%d.%d", def->id, vif_index) < 0)
+                    goto no_memory;
             }
-            if (!(net->ifname = strdup(tmp)))
-                goto no_memory;
 
             tmp = sexpr_node(node, "device/vif/mac");
             if (tmp) {