# HG changeset patch
# User Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
# Node ID 6a593de2f8ba95f3d3eb1c8eaa3970300dc4896f
# Parent 10e6946477b8db2622d196064994092759d25d8f
This patch use same expression as vif for vmx guest but has a distinguish
"type=ioemu"
just like block device.
e.g. vif=['type=ioemu, mac=01:00:00:00:00:33, bridge=xenbr0']
type=ioemu to specify for vmx NIC device.
nics=4 can specify 4 vmx NIC now.
bridge is passed to device model now.
With this patch, the error
"Error: Device 0 (vif) could not be connected."
will not happen for creating vmx guest
currently, it happens on some linux distribution.
Signed-off-by: Xiaofeng Ling <xiaofeng.ling@xxxxxxxxx>
diff -r 10e6946477b8 -r 6a593de2f8ba tools/examples/xmexample.vmx
--- a/tools/examples/xmexample.vmx Thu Nov 10 15:59:51 2005
+++ b/tools/examples/xmexample.vmx Thu Nov 10 16:07:13 2005
@@ -35,7 +35,11 @@
# Optionally define mac and/or bridge for the network interfaces.
# Random MACs are assigned if not given.
-#vif = [ 'mac=aa:00:00:00:00:11, bridge=xenbr0' ]
+# nics default is 1
+#vif = [ 'type=ioemu, mac=aa:00:00:00:00:11, bridge=xenbr0' ]
+nics=1
+# type=ioemu specify the NIC is an ioemu device not netfront
+vif = [ 'type=ioemu, bridge=xenbr0' ]
#----------------------------------------------------------------------------
# Define the disk devices you want the domain to have access to, and
diff -r 10e6946477b8 -r 6a593de2f8ba tools/ioemu/target-i386-dm/qemu-ifup
--- a/tools/ioemu/target-i386-dm/qemu-ifup Thu Nov 10 15:59:51 2005
+++ b/tools/ioemu/target-i386-dm/qemu-ifup Thu Nov 10 16:07:13 2005
@@ -7,4 +7,4 @@
echo $*
ifconfig $1 0.0.0.0 up
-brctl addif xenbr0 $1
+brctl addif $2 $1
diff -r 10e6946477b8 -r 6a593de2f8ba tools/ioemu/vl.c
--- a/tools/ioemu/vl.c Thu Nov 10 15:59:51 2005
+++ b/tools/ioemu/vl.c Thu Nov 10 16:07:13 2005
@@ -124,6 +124,7 @@
static char network_script[1024];
int pit_min_timer_count = 0;
int nb_nics;
+char bridge[16];
NetDriverState nd_table[MAX_NICS];
QEMUTimer *gui_timer;
QEMUTimer *polling_timer;
@@ -1586,7 +1587,7 @@
static int net_tun_init(NetDriverState *nd)
{
int pid, status;
- char *args[3];
+ char *args[4];
char **parg;
extern int highest_fds;
@@ -1602,6 +1603,7 @@
parg = args;
*parg++ = network_script;
*parg++ = nd->ifname;
+ *parg++ = bridge;
*parg++ = NULL;
execv(network_script, args);
exit(1);
@@ -2207,6 +2209,7 @@
"Network options:\n"
"-nics n simulate 'n' network cards [default=1]\n"
"-macaddr addr set the mac address of the first interface\n"
+ "-bridge br set the bridge interface for nic\n"
"-n script set tap/tun network init script [default=%s]\n"
"-tun-fd fd use this fd as already opened tap/tun interface\n"
#ifdef CONFIG_SLIRP
@@ -2297,6 +2300,7 @@
QEMU_OPTION_nics,
QEMU_OPTION_macaddr,
+ QEMU_OPTION_bridge,
QEMU_OPTION_n,
QEMU_OPTION_tun_fd,
QEMU_OPTION_user_net,
@@ -2367,6 +2371,7 @@
{ "nics", HAS_ARG, QEMU_OPTION_nics},
{ "macaddr", HAS_ARG, QEMU_OPTION_macaddr},
+ { "bridge", HAS_ARG, QEMU_OPTION_bridge},
{ "n", HAS_ARG, QEMU_OPTION_n },
{ "tun-fd", HAS_ARG, QEMU_OPTION_tun_fd },
#ifdef CONFIG_SLIRP
@@ -2824,6 +2829,9 @@
fprintf(stderr, "qemu: invalid number of network
interfaces\n");
exit(1);
}
+ break;
+ case QEMU_OPTION_bridge:
+ pstrcpy(bridge, sizeof(bridge), optarg);
break;
case QEMU_OPTION_macaddr:
{
diff -r 10e6946477b8 -r 6a593de2f8ba tools/python/xen/xend/image.py
--- a/tools/python/xen/xend/image.py Thu Nov 10 15:59:51 2005
+++ b/tools/python/xen/xend/image.py Thu Nov 10 16:07:13 2005
@@ -258,6 +258,7 @@
log.debug("args: %s, val: %s" % (a,v))
# Handle disk/network related options
+ mac = None
for (name, info) in deviceConfig:
if name == 'vbd':
uname = sxp.child_value(info, 'uname')
@@ -276,11 +277,21 @@
ret.append("-%s" % vbddev)
ret.append("%s" % vbdparam)
if name == 'vif':
+ type = sxp.child_value(info, 'type')
+ if type != 'ioemu':
+ continue
+ if mac != None:
+ continue
mac = sxp.child_value(info, 'mac')
+ bridge = sxp.child_value(info, 'bridge')
if mac == None:
mac = randomMAC()
+ if bridge == None:
+ bridge = 'xenbr0'
ret.append("-macaddr")
ret.append("%s" % mac)
+ ret.append("-bridge")
+ ret.append("%s" % bridge)
if name == 'vtpm':
instance = sxp.child_value(info, 'instance')
ret.append("-instance")
diff -r 10e6946477b8 -r 6a593de2f8ba tools/python/xen/xend/server/netif.py
--- a/tools/python/xen/xend/server/netif.py Thu Nov 10 15:59:51 2005
+++ b/tools/python/xen/xend/server/netif.py Thu Nov 10 16:07:13 2005
@@ -71,6 +71,9 @@
script = os.path.join(xroot.network_script_dir,
sxp.child_value(config, 'script',
xroot.get_vif_script()))
+ type = sxp.child_value(config, 'type')
+ if type == 'ioemu':
+ return (None,{},{})
bridge = sxp.child_value(config, 'bridge')
mac = sxp.child_value(config, 'mac')
ipaddr = _get_config_ipaddr(config)
diff -r 10e6946477b8 -r 6a593de2f8ba tools/python/xen/xm/create.py
--- a/tools/python/xen/xm/create.py Thu Nov 10 15:59:51 2005
+++ b/tools/python/xen/xm/create.py Thu Nov 10 16:07:13 2005
@@ -255,10 +255,11 @@
fn=append_value, default=[],
use="Add an IP address to the domain.")
-gopts.var('vif',
val="mac=MAC,be_mac=MAC,bridge=BRIDGE,script=SCRIPT,backend=DOM,vifname=NAME",
+gopts.var('vif',
val="type=TYPE,mac=MAC,be_mac=MAC,bridge=BRIDGE,script=SCRIPT,backend=DOM,vifname=NAME",
fn=append_value, default=[],
use="""Add a network interface with the given MAC address and bridge.
The vif is configured by calling the given configuration script.
+ If type is not specified, default is netfront not ioemu device.
If mac is not specified a random MAC address is used.
The MAC address of the backend interface can be selected with be_mac.
If not specified then the network backend chooses it's own MAC
address.
@@ -355,10 +356,6 @@
gopts.var('cdrom', val='FILE',
fn=set_value, default='',
use="Path to cdrom")
-
-gopts.var('macaddr', val='MACADDR',
- fn=set_value, default='',
- use="Macaddress of the first network interface")
gopts.var('boot', val="a|b|c|d",
fn=set_value, default='c',
@@ -512,6 +509,7 @@
backend = d.get('backend')
ip = d.get('ip')
vifname = d.get('vifname')
+ type = d.get('type')
else:
mac = None
be_mac = None
@@ -520,6 +518,7 @@
backend = None
ip = None
vifname = None
+ type = None
config_vif = ['vif']
if mac:
config_vif.append(['mac', mac])
@@ -535,6 +534,8 @@
config_vif.append(['backend', backend])
if ip:
config_vif.append(['ip', ip])
+ if type:
+ config_vif.append(['type', type])
config_devs.append(['device', config_vif])
def configure_vfr(config, vals):
@@ -549,7 +550,7 @@
"""Create the config for VMX devices.
"""
args = [ 'device_model', 'vcpus', 'cdrom', 'boot', 'fda', 'fdb',
- 'localtime', 'serial', 'macaddr', 'stdvga', 'isa', 'nographic',
+ 'localtime', 'serial', 'stdvga', 'isa', 'nographic',
'vnc', 'vncviewer', 'sdl', 'display', 'ne2000', 'lapic']
for a in args:
if (vals.__dict__[a]):
@@ -662,7 +663,7 @@
(k, v) = b.strip().split('=', 1)
k = k.strip()
v = v.strip()
- if k not in ['mac', 'be_mac', 'bridge', 'script', 'backend', 'ip',
'vifname']:
+ if k not in ['type', 'mac', 'be_mac', 'bridge', 'script',
'backend', 'ip', 'vifname']:
err('Invalid vif specifier: ' + vif)
d[k] = v
vifs.append(d)
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|