|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [patch] xen udev rule interfering with openvpn
On Sun, May 13, 2012 at 6:30 AM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Sat, 2012-05-12 at 23:00 +0100, Teck Choon Giam wrote:
>> On Sat, May 12, 2012 at 3:29 PM, Teck Choon Giam
>> <giamteckchoon@xxxxxxxxx> wrote:
>> > On Sat, May 12, 2012 at 7:53 AM, Teck Choon Giam
>> > <giamteckchoon@xxxxxxxxx> wrote:
>> >> On Fri, May 11, 2012 at 10:53 PM, Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
>> >> wrote:
>> >>> Ian Campbell writes ("Re: [Xen-devel] [patch] xen udev rule interfering
>> >>> with openvpn"):
>> >>>> libxl/xend: name tap devices vifX.Y-emu
>> >>>
>> >>> Committed-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
>> >>
>> >> This is my backport version which excludes the following:
>> >>
>> >> Lastly also move libxl__device_* to a better place in the header,
>> >> otherwise the
>> >> comment about evgen stuff isn't next to the associated functions (noticed
>> >> jsut
>> >> because I was going to add nic_devname near to the setdefault functions)
>> >>
>> >> I have tested with xm and xl with and without vifname set in domU
>> >> config for hvmdomain and pvdomain.
>> >
>> > Sorry, when re-test one of the test case failed... xm create hvmdomain
>> > with vifname set. I must have missed certain test case :(
>>
>> The same test case failed for xen unstable latest changeset
>> 25326:cd4dd23a831d.
>
> Oh dear.
>
>> My tests as below:
>
> Which ones fail?
>
>> 1. xm create pvdomain without vifname set
>> 2. xl create pvdomain without vifname set
>> 3. xm create hvmdomain without vifname set
>> 4. xl create hvmdomain without vifname set
>> 5. xm create pvdomain with vifname set
>> 6. xl create pvdomain with vifname set
>> 7. xm create hvmdomain with vifname set
xm create hvmdomain with vifname set
I track down the problem already. It happens that xm and xl behave
differently when creating $dev device?
In short, just set $dev down before:
do_or_die ip link set "$dev" name "$vifname"
Then set $vifname up after the above fix my problem.
Is the above suitable in upstream/unstable? If yes, can you fix that
in xen-unstable or you need me to submit a patch for review for
xen-unstable?
With the below partial of my latest backport patch fix the problem but
I have to re-run all tests to double confirm all are fix and good to
go :p
diff --git a/tools/hotplug/Linux/vif-common.sh
b/tools/hotplug/Linux/vif-common.sh
index c9c5d41..86c0aaa 100644
--- a/tools/hotplug/Linux/vif-common.sh
+++ b/tools/hotplug/Linux/vif-common.sh
@@ -85,12 +85,25 @@ 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
+ ip link set "$dev" down
+ do_or_die ip link set "$dev" name "$vifname"
+ ip link set "$vifname" up
+ fi
+ dev="$vifname"
+ fi
fi
Thanks.
Kindest regards,
Giam Teck Choon
>> 8. xl create hvmdomain with vifname set
>>
>> Thanks.
>>
>> Kindest regards,
>>
>>
>> >
>> > Kindest regards,
>> > Giam Teck Choon
>> >
>> >
>> >
>> >>
>> >> For your review and comments please.
>> >>
>> >> Thanks.
>> >>
>> >> Kindest regards,
>> >> Giam Teck Choon
>> >>
>> >>
>> >>
>> >>
>> >> libxl/xend: name tap devices vifX.Y-emu
>> >>
>> >> This prevents the udev scripts from operating on other tap devices (e.g.
>> >> openvpn etc)
>> >>
>> >> Correct the documentation for the "vifname" option which suggested it
>> >> applied
>> >> to HVM tap devices only, which is not the case.
>> >>
>> >> Reported by Michael Young.
>> >>
>> >> Also fix the use of vifname with emulated devices. This is slightly
>> >> complex.
>> >> The current hotplug scripts rely on being able to parse the "tapX.Y" (now
>> >> "vifX.Y-emu") name in order to locate the xenstore backend dir relating
>> >> to the
>> >> corresponding vif. This is because we cannot inject our own environment
>> >> vars
>> >> into the tap hotplug events. However this means that if the tap is
>> >> initially
>> >> named with a user specified name (which will not match the expected
>> >> scheme) we
>> >> fail to do anything useful with the device. So now we create the initial
>> >> tap
>> >> device with the standard "vifX.Y-emu" name and the hotplug script will
>> >> handle
>> >> the rename to the desired name. This is also how PV vif devices work --
>> >> they
>> >> are always created by netback with the name vifX.Y and renamed in the
>> >> script.
>> >>
>> >> xen-unstable changeset: 25290:7a6dcecb1781
>> >> Signed-off-by: Giam Teck Choon <giamteckchoon@xxxxxxxxx>
>> >> ---
>> >> tools/hotplug/Linux/vif-common.sh | 15 +++++++++++++--
>> >> tools/hotplug/Linux/xen-backend.rules | 2 +-
>> >> tools/libxl/libxl_dm.c | 17 ++++++-----------
>> >> tools/python/xen/xend/image.py | 6 +-----
>> >> 4 files changed, 21 insertions(+), 19 deletions(-)
>> >>
>> >> diff --git a/tools/hotplug/Linux/vif-common.sh
>> >> b/tools/hotplug/Linux/vif-common.sh
>> >> index c9c5d41..fff22bb 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 40f2658..405387f 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_dm.c b/tools/libxl/libxl_dm.c
>> >> index 1ffcc90..2c030ca 100644
>> >> --- a/tools/libxl/libxl_dm.c
>> >> +++ b/tools/libxl/libxl_dm.c
>> >> @@ -134,11 +134,9 @@ static char **
>> >> libxl_build_device_model_args_old(libxl__gc *gc,
>> >> char *smac = libxl__sprintf(gc,
>> >> "%02x:%02x:%02x:%02x:%02x:%02x",
>> >> vifs[i].mac[0],
>> >> vifs[i].mac[1], vifs[i].mac[2],
>> >> vifs[i].mac[3],
>> >> vifs[i].mac[4], vifs[i].mac[5]);
>> >> - char *ifname;
>> >> - if (!vifs[i].ifname)
>> >> - ifname = libxl__sprintf(gc, "tap%d.%d",
>> >> info->domid, vifs[i].devid);
>> >> - else
>> >> - ifname = vifs[i].ifname;
>> >> + const char *ifname = libxl__sprintf(gc, "vif%d.%d-emu",
>> >> + info->domid,
>> >> + vifs[i].devid);
>> >> flexarray_vappend(dm_args,
>> >> "-net", libxl__sprintf(gc,
>> >> "nic,vlan=%d,macaddr=%s,model=%s",
>> >> vifs[i].devid,
>> >> smac, vifs[i].model),
>> >> @@ -271,12 +269,9 @@ static char **
>> >> libxl_build_device_model_args_new(libxl__gc *gc,
>> >> char *smac = libxl__sprintf(gc,
>> >> "%02x:%02x:%02x:%02x:%02x:%02x",
>> >> vifs[i].mac[0],
>> >> vifs[i].mac[1], vifs[i].mac[2],
>> >> vifs[i].mac[3],
>> >> vifs[i].mac[4], vifs[i].mac[5]);
>> >> - char *ifname;
>> >> - if (!vifs[i].ifname) {
>> >> - ifname = libxl__sprintf(gc, "tap%d.%d",
>> >> info->domid, vifs[i].devid);
>> >> - } else {
>> >> - ifname = vifs[i].ifname;
>> >> - }
>> >> + const char *ifname = libxl__sprintf(gc, "vif%d.%d-emu",
>> >> + info->domid,
>> >> + vifs[i].devid);
>> >> flexarray_append(dm_args, "-net");
>> >> flexarray_append(dm_args, libxl__sprintf(gc,
>> >> "nic,vlan=%d,macaddr=%s,model=%s",
>> >> vifs[i].devid, smac, vifs[i].model));
>> >> diff --git a/tools/python/xen/xend/image.py
>> >> b/tools/python/xen/xend/image.py
>> >> index f1464ac..3c8d80c 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))
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |