aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/misc/xl-network-configuration.markdown11
-rw-r--r--tools/hotplug/Linux/vif-common.sh15
-rw-r--r--tools/hotplug/Linux/xen-backend.rules2
-rw-r--r--tools/libxl/libxl.c15
-rw-r--r--tools/libxl/libxl_dm.c19
-rw-r--r--tools/libxl/libxl_internal.h27
-rw-r--r--tools/python/xen/xend/image.py6
7 files changed, 59 insertions, 36 deletions
diff --git a/docs/misc/xl-network-configuration.markdown b/docs/misc/xl-network-configuration.markdown
index e2a5bc60c5..b36d6c89c9 100644
--- a/docs/misc/xl-network-configuration.markdown
+++ b/docs/misc/xl-network-configuration.markdown
@@ -93,11 +93,14 @@ are:
### vifname
-This keyword is valid for HVM guest devices with `type=ioemu` only.
+Specifies the backend device name for the virtual device.
+
+If the domain is an HVM domain then the associated emulated (tap)
+device will have a "-emu" suffice added.
-Specifies the backend device name for an emulated device. The default
-is `tapDOMID.DEVID` where `DOMID` is the guest domain ID and `DEVID`
-is the device number.
+The default name for the virtual device is `vifDOMID.DEVID` where
+`DOMID` is the guest domain ID and `DEVID` is the device
+number. Likewise the default tap name is `vifDOMID.DEVID-emu`.
### script
diff --git a/tools/hotplug/Linux/vif-common.sh b/tools/hotplug/Linux/vif-common.sh
index c9c5d41da0..fff22bbf9d 100644
--- a/tools/hotplug/Linux/vif-common.sh
+++ b/tools/hotplug/Linux/vif-common.sh
@@ -85,12 +85,23 @@ elif [ "$type_if" = tap ]; then
: ${INTERFACE:?}
# Get xenbus_path from device name.
- # The name is built like that: "tap${domid}.${devid}".
- dev_=${dev#tap}
+ # The name is built like that: "vif${domid}.${devid}-emu".
+ dev_=${dev#vif}
+ dev_=${dev_%-emu}
domid=${dev_%.*}
devid=${dev_#*.}
XENBUS_PATH="/local/domain/0/backend/vif/$domid/$devid"
+ vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "")
+ if [ "$vifname" ]
+ then
+ vifname="${vifname}-emu"
+ if [ "$command" == "add" ] && ! ip link show "$vifname" >&/dev/null
+ then
+ do_or_die ip link set "$dev" name "$vifname"
+ fi
+ dev="$vifname"
+ fi
fi
ip=${ip:-}
diff --git a/tools/hotplug/Linux/xen-backend.rules b/tools/hotplug/Linux/xen-backend.rules
index 40f2658eb2..405387f1a9 100644
--- a/tools/hotplug/Linux/xen-backend.rules
+++ b/tools/hotplug/Linux/xen-backend.rules
@@ -13,4 +13,4 @@ KERNEL=="blktap-control", NAME="xen/blktap-2/control", MODE="0600"
KERNEL=="gntdev", NAME="xen/%k", MODE="0600"
KERNEL=="pci_iomul", NAME="xen/%k", MODE="0600"
KERNEL=="tapdev[a-z]*", NAME="xen/blktap-2/tapdev%m", MODE="0600"
-SUBSYSTEM=="net", KERNEL=="tap*", ACTION=="add", RUN+="/etc/xen/scripts/vif-setup $env{ACTION} type_if=tap"
+SUBSYSTEM=="net", KERNEL=="vif*-emu", ACTION=="add", RUN+="/etc/xen/scripts/vif-setup $env{ACTION} type_if=tap"
diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 14791d6e81..c420e19b69 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -2087,6 +2087,21 @@ int libxl_device_nic_getinfo(libxl_ctx *ctx, uint32_t domid,
return 0;
}
+const char *libxl__device_nic_devname(libxl__gc *gc,
+ uint32_t domid,
+ uint32_t devid,
+ libxl_nic_type type)
+{
+ switch (type) {
+ case LIBXL_NIC_TYPE_VIF:
+ return GCSPRINTF("vif%u.%d", domid, devid);
+ case LIBXL_NIC_TYPE_IOEMU:
+ return GCSPRINTF("vif%u.%d" TAP_DEVICE_SUFFIX, domid, devid);
+ default:
+ abort();
+ }
+}
+
/******************************************************************************/
int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
libxl__device_console *console,
diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c
index 48c7ed52dc..ec967f784a 100644
--- a/tools/libxl/libxl_dm.c
+++ b/tools/libxl/libxl_dm.c
@@ -209,12 +209,9 @@ static char ** libxl__build_device_model_args_old(libxl__gc *gc,
if (vifs[i].nictype == LIBXL_NIC_TYPE_IOEMU) {
char *smac = libxl__sprintf(gc,
LIBXL_MAC_FMT, LIBXL_MAC_BYTES(vifs[i].mac));
- char *ifname;
- if (!vifs[i].ifname)
- ifname = libxl__sprintf(gc,
- "tap%d.%d", domid, vifs[i].devid);
- else
- ifname = vifs[i].ifname;
+ const char *ifname = libxl__device_nic_devname(gc,
+ domid, vifs[i].devid,
+ LIBXL_NIC_TYPE_IOEMU);
flexarray_vappend(dm_args,
"-net",
GCSPRINTF(
@@ -456,13 +453,9 @@ static char ** libxl__build_device_model_args_new(libxl__gc *gc,
if (vifs[i].nictype == LIBXL_NIC_TYPE_IOEMU) {
char *smac = libxl__sprintf(gc,
LIBXL_MAC_FMT, LIBXL_MAC_BYTES(vifs[i].mac));
- char *ifname;
- if (!vifs[i].ifname) {
- ifname = libxl__sprintf(gc, "tap%d.%d",
- guest_domid, vifs[i].devid);
- } else {
- ifname = vifs[i].ifname;
- }
+ const char *ifname = libxl__device_nic_devname(gc,
+ guest_domid, vifs[i].devid,
+ LIBXL_NIC_TYPE_IOEMU);
flexarray_append(dm_args, "-device");
flexarray_append(dm_args,
libxl__sprintf(gc, "%s,id=nic%d,netdev=net%d,mac=%s",
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 34ea15ca86..c047253f21 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -83,6 +83,7 @@
#define STUBDOM_CONSOLE_RESTORE 2
#define STUBDOM_CONSOLE_SERIAL 3
#define STUBDOM_SPECIAL_CONSOLES 3
+#define TAP_DEVICE_SUFFIX "-emu"
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
@@ -196,17 +197,6 @@ _hidden libxl__ev_xswatch *libxl__watch_slot_contents(libxl__gc *gc,
* version of the _evdisable_FOO function; the internal one is
* used during cleanup.
*/
-_hidden int libxl__domain_create_info_setdefault(libxl__gc *gc,
- libxl_domain_create_info *c_info);
-_hidden int libxl__domain_build_info_setdefault(libxl__gc *gc,
- libxl_domain_build_info *b_info);
-_hidden int libxl__device_disk_setdefault(libxl__gc *gc,
- libxl_device_disk *disk);
-_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic);
-_hidden int libxl__device_vfb_setdefault(libxl__gc *gc, libxl_device_vfb *vfb);
-_hidden int libxl__device_vkb_setdefault(libxl__gc *gc, libxl_device_vkb *vkb);
-_hidden int libxl__device_pci_setdefault(libxl__gc *gc, libxl_device_pci *pci);
-
struct libxl__evgen_domain_death {
uint32_t domid;
unsigned shutdown_reported:1, death_reported:1;
@@ -705,6 +695,21 @@ _hidden int libxl__wait_for_backend(libxl__gc *gc, char *be_path, char *state);
* All libxl API functions are expected to have arranged for this
* to be called before using any values within these structures.
*/
+_hidden int libxl__domain_create_info_setdefault(libxl__gc *gc,
+ libxl_domain_create_info *c_info);
+_hidden int libxl__domain_build_info_setdefault(libxl__gc *gc,
+ libxl_domain_build_info *b_info);
+_hidden int libxl__device_disk_setdefault(libxl__gc *gc,
+ libxl_device_disk *disk);
+_hidden int libxl__device_nic_setdefault(libxl__gc *gc, libxl_device_nic *nic);
+_hidden int libxl__device_vfb_setdefault(libxl__gc *gc, libxl_device_vfb *vfb);
+_hidden int libxl__device_vkb_setdefault(libxl__gc *gc, libxl_device_vkb *vkb);
+_hidden int libxl__device_pci_setdefault(libxl__gc *gc, libxl_device_pci *pci);
+
+_hidden const char *libxl__device_nic_devname(libxl__gc *gc,
+ uint32_t domid,
+ uint32_t devid,
+ libxl_nic_type type);
/* Arranges that dev will be removed from its guest. When
* this is done, the ao will be completed. An error
diff --git a/tools/python/xen/xend/image.py b/tools/python/xen/xend/image.py
index f3768b4612..e08417282d 100644
--- a/tools/python/xen/xend/image.py
+++ b/tools/python/xen/xend/image.py
@@ -917,11 +917,7 @@ class HVMImageHandler(ImageHandler):
ret.append("-net")
ret.append("nic,vlan=%d,macaddr=%s,model=%s" %
(nics, mac, model))
- vifname = devinfo.get('vifname')
- if vifname:
- vifname = "tap-" + vifname
- else:
- vifname = "tap%d.%d" % (self.vm.getDomid(), nics-1)
+ vifname = "vif%d.%d-emu" % (self.vm.getDomid(), nics-1)
ret.append("-net")
ret.append("tap,vlan=%d,ifname=%s,bridge=%s" %
(nics, vifname, bridge))