# HG changeset patch # User john.levon@xxxxxxx # Date 1232052415 28800 # Node ID 04139c088854c23dc548c0f9f4abf54c4ed07e0d # Parent 253da3acb103a4ce764cb8192a65a4d51833c2f1 patch queue: bridge-script diff --git a/src/domain_conf.c b/src/domain_conf.c --- a/src/domain_conf.c +++ b/src/domain_conf.c @@ -276,6 +276,7 @@ void virDomainNetDefFree(virDomainNetDef case VIR_DOMAIN_NET_TYPE_BRIDGE: VIR_FREE(def->data.bridge.brname); + VIR_FREE(def->data.bridge.script); break; } @@ -877,7 +878,8 @@ virDomainNetDefParseXML(virConnectPtr co VIR_FREE(ifname); } } else if ((script == NULL) && - (def->type == VIR_DOMAIN_NET_TYPE_ETHERNET) && + (def->type == VIR_DOMAIN_NET_TYPE_ETHERNET || + def->type == VIR_DOMAIN_NET_TYPE_BRIDGE) && xmlStrEqual(cur->name, BAD_CAST "script")) { script = virXMLPropString(cur, "path"); } else if (xmlStrEqual (cur->name, BAD_CAST "model")) { @@ -928,6 +930,10 @@ virDomainNetDefParseXML(virConnectPtr co } def->data.bridge.brname = bridge; bridge = NULL; + if (script != NULL) { + def->data.bridge.script = script; + script = NULL; + } break; case VIR_DOMAIN_NET_TYPE_CLIENT: @@ -2864,6 +2870,9 @@ virDomainNetDefFormat(virConnectPtr conn case VIR_DOMAIN_NET_TYPE_BRIDGE: virBufferEscapeString(buf, " <source bridge='%s'/>\n", def->data.bridge.brname); + if (def->data.bridge.script) + virBufferEscapeString(buf, " <script path='%s'/>\n", + def->data.bridge.script); break; case VIR_DOMAIN_NET_TYPE_SERVER: diff --git a/src/domain_conf.h b/src/domain_conf.h --- a/src/domain_conf.h +++ b/src/domain_conf.h @@ -153,6 +153,7 @@ struct _virDomainNetDef { } network; struct { char *brname; + char *script; } bridge; } data; char *ifname; diff --git a/src/xend_internal.c b/src/xend_internal.c --- a/src/xend_internal.c +++ b/src/xend_internal.c @@ -58,6 +58,12 @@ #define XEN_SCHED_CRED_NPARAM 2 #endif /* PROXY */ + +#ifdef __sun +#define DEFAULT_VIF_SCRIPT "vif-vnic" +#else +#define DEFAULT_VIF_SCRIPT "vif-bridge" +#endif /** * xend_connection_type: @@ -1775,15 +1781,22 @@ xenDaemonParseSxprNets(virConnectPtr con if (VIR_ALLOC(net) < 0) goto no_memory; - if ((tmp2 && strstr(tmp2, "bridge")) || tmp) { + if (tmp != NULL || (STREQ(tmp2, DEFAULT_VIF_SCRIPT))) { net->type = VIR_DOMAIN_NET_TYPE_BRIDGE; /* XXX virtual network reverse resolve */ if (tmp && !(net->data.bridge.brname = strdup(tmp))) goto no_memory; + if (tmp2 && + net->type == VIR_DOMAIN_NET_TYPE_BRIDGE && + !(net->data.bridge.script = strdup(tmp2))) + goto no_memory; } else { net->type = VIR_DOMAIN_NET_TYPE_ETHERNET; + if (tmp2 && + !(net->data.ethernet.script = strdup(tmp2))) + goto no_memory; } tmp = sexpr_node(node, "device/vif/vifname"); @@ -1820,11 +1833,6 @@ xenDaemonParseSxprNets(virConnectPtr con tmp = sexpr_node(node, "device/vif/ip"); if (tmp && !(net->data.ethernet.ipaddr = strdup(tmp))) - goto no_memory; - - if (tmp2 && - net->type == VIR_DOMAIN_NET_TYPE_ETHERNET && - !(net->data.ethernet.script = strdup(tmp2))) goto no_memory; if (model && @@ -5093,6 +5101,8 @@ xenDaemonFormatSxprNet(virConnectPtr con int xendConfigVersion, int isAttach) { + const char *script = DEFAULT_VIF_SCRIPT; + if (def->type != VIR_DOMAIN_NET_TYPE_BRIDGE && def->type != VIR_DOMAIN_NET_TYPE_NETWORK && def->type != VIR_DOMAIN_NET_TYPE_ETHERNET) { @@ -5114,7 +5124,10 @@ xenDaemonFormatSxprNet(virConnectPtr con switch (def->type) { case VIR_DOMAIN_NET_TYPE_BRIDGE: virBufferVSprintf(buf, "(bridge '%s')", def->data.bridge.brname); - virBufferAddLit(buf, "(script 'vif-bridge')"); + if (def->data.bridge.script) + script = def->data.bridge.script; + + virBufferVSprintf(buf, "(script '%s')", script); break; case VIR_DOMAIN_NET_TYPE_NETWORK: @@ -5137,7 +5150,7 @@ xenDaemonFormatSxprNet(virConnectPtr con return -1; } virBufferVSprintf(buf, "(bridge '%s')", bridge); - virBufferAddLit(buf, "(script 'vif-bridge')"); + virBufferVSprintf(buf, "(script '%s')", script); VIR_FREE(bridge); } break; diff --git a/src/xm_internal.c b/src/xm_internal.c --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -1072,14 +1072,19 @@ xenXMDomainConfigParse(virConnectPtr con net->mac[5] = rawmac[5]; } - if (bridge[0] || STREQ(script, "vif-bridge")) + if (bridge[0] || STREQ(script, "vif-bridge") || + STREQ(script, "vif-vnic")) { net->type = VIR_DOMAIN_NET_TYPE_BRIDGE; - else + } else { net->type = VIR_DOMAIN_NET_TYPE_ETHERNET; + } if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { if (bridge[0] && !(net->data.bridge.brname = strdup(bridge))) + goto no_memory; + if (script[0] && + !(net->data.bridge.script = strdup(script))) goto no_memory; } else { if (script[0] && -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list