Support script for bridge interface type

This commit is contained in:
John Levon 2009-01-22 18:29:13 +00:00
parent 39e6ded8ae
commit fb4ec82358
27 changed files with 89 additions and 11 deletions

View File

@ -1,3 +1,31 @@
Thu Jan 22 09:51:29 PST 2009 John Levon <john.levon@sun.com>
* src/domain_conf.h, src/domain_conf.c, src/xend_internal.c,
src/xm_internal.c: Support script for bridge interface type
* tests/sexpr2xmldata/sexpr2xml-curmem.xml,
tests/sexpr2xmldata/sexpr2xml-disk-block-shareable.xml,
tests/sexpr2xmldata/sexpr2xml-fv-localtime.xml,
tests/sexpr2xmldata/sexpr2xml-fv-parallel-tcp.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-file.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-null.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-pipe.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-pty.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-stdio.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp-telnet.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-tcp.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-udp.xml,
tests/sexpr2xmldata/sexpr2xml-fv-serial-unix.xml,
tests/sexpr2xmldata/sexpr2xml-fv-sound-all.xml,
tests/sexpr2xmldata/sexpr2xml-fv-sound.xml,
tests/sexpr2xmldata/sexpr2xml-fv-usbmouse.xml,
tests/sexpr2xmldata/sexpr2xml-fv-usbtablet.xml,
tests/sexpr2xmldata/sexpr2xml-fv-utc.xml,
tests/sexpr2xmldata/sexpr2xml-fv-v2.xml,
tests/sexpr2xmldata/sexpr2xml-fv.xml,
tests/sexpr2xmldata/sexpr2xml-net-bridged.xml,
tests/sexpr2xmldata/sexpr2xml-net-e1000.xml: update tests
Wed Jan 21 18:18:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com> Wed Jan 21 18:18:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
Missing test case fix up from Xen threadsafety changes Missing test case fix up from Xen threadsafety changes

View File

@ -288,6 +288,7 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:
VIR_FREE(def->data.bridge.brname); VIR_FREE(def->data.bridge.brname);
VIR_FREE(def->data.bridge.script);
break; break;
} }
@ -897,7 +898,8 @@ virDomainNetDefParseXML(virConnectPtr conn,
VIR_FREE(ifname); VIR_FREE(ifname);
} }
} else if ((script == NULL) && } 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")) { xmlStrEqual(cur->name, BAD_CAST "script")) {
script = virXMLPropString(cur, "path"); script = virXMLPropString(cur, "path");
} else if (xmlStrEqual (cur->name, BAD_CAST "model")) { } else if (xmlStrEqual (cur->name, BAD_CAST "model")) {
@ -948,6 +950,10 @@ virDomainNetDefParseXML(virConnectPtr conn,
} }
def->data.bridge.brname = bridge; def->data.bridge.brname = bridge;
bridge = NULL; bridge = NULL;
if (script != NULL) {
def->data.bridge.script = script;
script = NULL;
}
break; break;
case VIR_DOMAIN_NET_TYPE_CLIENT: case VIR_DOMAIN_NET_TYPE_CLIENT:
@ -2883,6 +2889,9 @@ virDomainNetDefFormat(virConnectPtr conn,
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:
virBufferEscapeString(buf, " <source bridge='%s'/>\n", virBufferEscapeString(buf, " <source bridge='%s'/>\n",
def->data.bridge.brname); def->data.bridge.brname);
if (def->data.bridge.script)
virBufferEscapeString(buf, " <script path='%s'/>\n",
def->data.bridge.script);
break; break;
case VIR_DOMAIN_NET_TYPE_SERVER: case VIR_DOMAIN_NET_TYPE_SERVER:

View File

@ -154,6 +154,7 @@ struct _virDomainNetDef {
} network; } network;
struct { struct {
char *brname; char *brname;
char *script;
} bridge; } bridge;
} data; } data;
char *ifname; char *ifname;

View File

@ -61,6 +61,12 @@
#endif /* PROXY */ #endif /* PROXY */
#ifdef __sun
#define DEFAULT_VIF_SCRIPT "vif-vnic"
#else
#define DEFAULT_VIF_SCRIPT "vif-bridge"
#endif
#ifdef WITH_RHEL5_API #ifdef WITH_RHEL5_API
#define XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU 0 #define XEND_CONFIG_MAX_VERS_NET_TYPE_IOEMU 0
#define XEND_CONFIG_MIN_VERS_PVFB_NEWCONF 2 #define XEND_CONFIG_MIN_VERS_PVFB_NEWCONF 2
@ -1739,15 +1745,22 @@ xenDaemonParseSxprNets(virConnectPtr conn,
if (VIR_ALLOC(net) < 0) if (VIR_ALLOC(net) < 0)
goto no_memory; goto no_memory;
if ((tmp2 && strstr(tmp2, "bridge")) || tmp) { if (tmp != NULL || (STREQ(tmp2, DEFAULT_VIF_SCRIPT))) {
net->type = VIR_DOMAIN_NET_TYPE_BRIDGE; net->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
/* XXX virtual network reverse resolve */ /* XXX virtual network reverse resolve */
if (tmp && if (tmp &&
!(net->data.bridge.brname = strdup(tmp))) !(net->data.bridge.brname = strdup(tmp)))
goto no_memory; goto no_memory;
if (tmp2 &&
net->type == VIR_DOMAIN_NET_TYPE_BRIDGE &&
!(net->data.bridge.script = strdup(tmp2)))
goto no_memory;
} else { } else {
net->type = VIR_DOMAIN_NET_TYPE_ETHERNET; 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"); tmp = sexpr_node(node, "device/vif/vifname");
@ -1786,11 +1799,6 @@ xenDaemonParseSxprNets(virConnectPtr conn,
!(net->data.ethernet.ipaddr = strdup(tmp))) !(net->data.ethernet.ipaddr = strdup(tmp)))
goto no_memory; goto no_memory;
if (tmp2 &&
net->type == VIR_DOMAIN_NET_TYPE_ETHERNET &&
!(net->data.ethernet.script = strdup(tmp2)))
goto no_memory;
if (model && if (model &&
!(net->model = strdup(model))) !(net->model = strdup(model)))
goto no_memory; goto no_memory;
@ -5089,6 +5097,8 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
int xendConfigVersion, int xendConfigVersion,
int isAttach) int isAttach)
{ {
const char *script = DEFAULT_VIF_SCRIPT;
if (def->type != VIR_DOMAIN_NET_TYPE_BRIDGE && if (def->type != VIR_DOMAIN_NET_TYPE_BRIDGE &&
def->type != VIR_DOMAIN_NET_TYPE_NETWORK && def->type != VIR_DOMAIN_NET_TYPE_NETWORK &&
def->type != VIR_DOMAIN_NET_TYPE_ETHERNET) { def->type != VIR_DOMAIN_NET_TYPE_ETHERNET) {
@ -5110,7 +5120,10 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
switch (def->type) { switch (def->type) {
case VIR_DOMAIN_NET_TYPE_BRIDGE: case VIR_DOMAIN_NET_TYPE_BRIDGE:
virBufferVSprintf(buf, "(bridge '%s')", def->data.bridge.brname); 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; break;
case VIR_DOMAIN_NET_TYPE_NETWORK: case VIR_DOMAIN_NET_TYPE_NETWORK:
@ -5133,7 +5146,7 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
return -1; return -1;
} }
virBufferVSprintf(buf, "(bridge '%s')", bridge); virBufferVSprintf(buf, "(bridge '%s')", bridge);
virBufferAddLit(buf, "(script 'vif-bridge')"); virBufferVSprintf(buf, "(script '%s')", script);
VIR_FREE(bridge); VIR_FREE(bridge);
} }
break; break;

View File

@ -1075,15 +1075,20 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
net->mac[5] = rawmac[5]; 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; net->type = VIR_DOMAIN_NET_TYPE_BRIDGE;
else } else {
net->type = VIR_DOMAIN_NET_TYPE_ETHERNET; net->type = VIR_DOMAIN_NET_TYPE_ETHERNET;
}
if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) { if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
if (bridge[0] && if (bridge[0] &&
!(net->data.bridge.brname = strdup(bridge))) !(net->data.bridge.brname = strdup(bridge)))
goto no_memory; goto no_memory;
if (script[0] &&
!(net->data.bridge.script = strdup(script)))
goto no_memory;
} else { } else {
if (script[0] && if (script[0] &&
!(net->data.ethernet.script = strdup(script))) !(net->data.ethernet.script = strdup(script)))

View File

@ -24,6 +24,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1d:06:15'/> <mac address='00:16:3e:1d:06:15'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif5.0'/> <target dev='vif5.0'/>
</interface> </interface>
<console type='pty'> <console type='pty'>

View File

@ -22,6 +22,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:23:9e:eb'/> <mac address='00:16:3e:23:9e:eb'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif6.0'/> <target dev='vif6.0'/>
</interface> </interface>
<console type='pty'> <console type='pty'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<parallel type='tcp'> <parallel type='tcp'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='file'> <serial type='file'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='null'> <serial type='null'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='pipe'> <serial type='pipe'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='pty'> <serial type='pty'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='stdio'> <serial type='stdio'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='tcp'> <serial type='tcp'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='tcp'> <serial type='tcp'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='udp'> <serial type='udp'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif1.0'/> <target dev='vif1.0'/>
</interface> </interface>
<serial type='unix'> <serial type='unix'>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='usb'/> <input type='mouse' bus='usb'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='tablet' bus='usb'/> <input type='tablet' bus='usb'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -32,6 +32,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:16:3e:1b:b1:47'/> <mac address='00:16:3e:1b:b1:47'/>
<source bridge='xenbr0'/> <source bridge='xenbr0'/>
<script path='vif-bridge'/>
<target dev='vif3.0'/> <target dev='vif3.0'/>
</interface> </interface>
<input type='mouse' bus='ps2'/> <input type='mouse' bus='ps2'/>

View File

@ -23,6 +23,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:11:22:33:44:55'/> <mac address='00:11:22:33:44:55'/>
<source bridge='xenbr2'/> <source bridge='xenbr2'/>
<script path='vif-bridge'/>
<target dev='vif6.0'/> <target dev='vif6.0'/>
</interface> </interface>
<console type='pty'> <console type='pty'>

View File

@ -23,6 +23,7 @@
<interface type='bridge'> <interface type='bridge'>
<mac address='00:11:22:33:44:55'/> <mac address='00:11:22:33:44:55'/>
<source bridge='xenbr2'/> <source bridge='xenbr2'/>
<script path='vif-bridge'/>
<target dev='vif6.0'/> <target dev='vif6.0'/>
<model type='e1000'/> <model type='e1000'/>
</interface> </interface>