Eric Blake wrote:
> On 04/28/2011 11:53 AM, Jim Fehlig wrote:
>
>> 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).
>>
>
> Makes sense for the rationale. However...
>
>
>> + } else if (def->id != -1) {
>> snprintf(buf, sizeof(buf), "vif%d.%d", def->id, vif_index);
>> - tmp = buf;
>> + if (!(net->ifname = strdup(buf)))
>>
>
> Rather than using snprintf and strdup, can't we just use:
>
> if (virAsprintf(&net->ifname, "vif%d.%d", def->id, vif_index) < 0)
> goto no_memory;
>
Yes, good point. Here is a V2.
Regards,
Jim
>From e529593ea5ded70cbe248a3585b6db3ba2c51910 Mon Sep 17 00:00:00 2001
From: Jim Fehlig <[email protected]>
Date: Wed, 27 Apr 2011 16:39:37 -0600
Subject: [PATCH V2] Xen: Do not generate net ifname if domain is inactive
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 | 15 +++++++++------
1 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
index d2ec370..a2fdc71 100644
--- a/src/xenxs/xen_sxpr.c
+++ b/src/xenxs/xen_sxpr.c
@@ -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) {
--
1.7.3.1
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list