mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/hotplug, Use udev rules instead of qemu script to setup the bridge.
From: Anthony PERARD <anthony.perard@citrix.com> This patch adds a second argument to vif-bridge script. It can be "vif" or "tap". "vif" give the default behavior and "tap" just add the interface to the found bridge when the action is "add". Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> --- tools/hotplug/Linux/vif-bridge | 20 ++++++--- tools/hotplug/Linux/vif-common.sh | 70 ++++++++++++++++++++++++--------- tools/hotplug/Linux/xen-backend.rules | 5 +- tools/libxl/libxl.c | 6 +- 4 files changed, 70 insertions(+), 31 deletions(-)
This commit is contained in:
1 parent
2d50ecfbf6
commit
025e84f126
4 files changed
+70
-31
No files matched your search
@@ -81,20 +81,26 @@ fi
|
||||
|
||||
case "$command" in
|
||||
online)
|
||||
setup_bridge_port "$vif"
|
||||
add_to_bridge "$bridge" "$vif"
|
||||
setup_bridge_port "$dev"
|
||||
add_to_bridge "$bridge" "$dev"
|
||||
;;
|
||||
|
||||
offline)
|
||||
do_without_error brctl delif "$bridge" "$vif"
|
||||
do_without_error ifconfig "$vif" down
|
||||
do_without_error brctl delif "$bridge" "$dev"
|
||||
do_without_error ifconfig "$dev" down
|
||||
;;
|
||||
|
||||
add)
|
||||
add_to_bridge "$bridge" "$dev"
|
||||
;;
|
||||
esac
|
||||
|
||||
handle_iptable
|
||||
if [ "$type_if" = vif ]; then
|
||||
handle_iptable
|
||||
fi
|
||||
|
||||
log debug "Successful vif-bridge $command for $vif, bridge $bridge."
|
||||
if [ "$command" == "online" ]
|
||||
log debug "Successful vif-bridge $command for $dev, bridge $bridge."
|
||||
if [ "$type_if" = vif -a "$command" = "online" ]
|
||||
then
|
||||
success
|
||||
fi
|
||||
@@ -31,12 +31,6 @@ then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "$command" in
|
||||
add | remove)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# Parameters may be read from the environment, the command line arguments, and
|
||||
# the store, with overriding in that order. The environment is given by the
|
||||
@@ -45,24 +39,62 @@ esac
|
||||
|
||||
evalVariables "$@"
|
||||
|
||||
ip=${ip:-}
|
||||
ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip")
|
||||
# Older versions of Xen do not pass in the type as an argument,
|
||||
# so the default value is vif.
|
||||
: ${type_if:=vif}
|
||||
|
||||
# Check presence of compulsory args.
|
||||
XENBUS_PATH="${XENBUS_PATH:?}"
|
||||
vif="${vif:?}"
|
||||
case "$type_if" in
|
||||
vif)
|
||||
dev=$vif
|
||||
;;
|
||||
tap)
|
||||
dev=$INTERFACE
|
||||
;;
|
||||
*)
|
||||
log err "unknown interface type $type_if"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$command" in
|
||||
online | offline)
|
||||
test "$type_if" != vif && exit 0
|
||||
;;
|
||||
add | remove)
|
||||
test "$type_if" != tap && exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "")
|
||||
if [ "$vifname" ]
|
||||
then
|
||||
if [ "$command" == "online" ] && ! ip link show "$vifname" >&/dev/null
|
||||
then
|
||||
do_or_die ip link set "$vif" name "$vifname"
|
||||
fi
|
||||
vif="$vifname"
|
||||
if [ "$type_if" = vif ]; then
|
||||
# Check presence of compulsory args.
|
||||
XENBUS_PATH="${XENBUS_PATH:?}"
|
||||
vif="${vif:?}"
|
||||
|
||||
vifname=$(xenstore_read_default "$XENBUS_PATH/vifname" "")
|
||||
if [ "$vifname" ]
|
||||
then
|
||||
if [ "$command" == "online" ] && ! ip link show "$vifname" >&/dev/null
|
||||
then
|
||||
do_or_die ip link set "$vif" name "$vifname"
|
||||
fi
|
||||
vif="$vifname"
|
||||
fi
|
||||
elif [ "$type_if" = tap ]; then
|
||||
# Check presence of compulsory args.
|
||||
: ${INTERFACE:?}
|
||||
|
||||
# Get xenbus_path from device name.
|
||||
# The name is built like that: "tap${domid}.${devid}".
|
||||
dev_=${dev#tap}
|
||||
domid=${dev_%.*}
|
||||
devid=${dev_#*.}
|
||||
|
||||
XENBUS_PATH="/local/domain/0/backend/vif/$domid/$devid"
|
||||
fi
|
||||
|
||||
ip=${ip:-}
|
||||
ip=$(xenstore_read_default "$XENBUS_PATH/ip" "$ip")
|
||||
|
||||
frob_iptable()
|
||||
{
|
||||
|
||||
@@ -2,10 +2,11 @@ SUBSYSTEM=="xen-backend", KERNEL=="tap*", RUN+="/etc/xen/scripts/blktap $env{ACT
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vbd*", RUN+="/etc/xen/scripts/block $env{ACTION}"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vtpm*", RUN+="/etc/xen/scripts/vtpm $env{ACTION}"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vif2-*", RUN+="/etc/xen/scripts/vif2 $env{ACTION}"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="online", RUN+="/etc/xen/scripts/vif-setup online"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="offline", RUN+="/etc/xen/scripts/vif-setup offline"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="online", RUN+="/etc/xen/scripts/vif-setup online type_if=vif"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vif-*", ACTION=="offline", RUN+="/etc/xen/scripts/vif-setup offline type_if=vif"
|
||||
SUBSYSTEM=="xen-backend", KERNEL=="vscsi*", RUN+="/etc/xen/scripts/vscsi $env{ACTION}"
|
||||
SUBSYSTEM=="xen-backend", ACTION=="remove", RUN+="/etc/xen/scripts/xen-hotplug-cleanup"
|
||||
KERNEL=="evtchn", NAME="xen/%k"
|
||||
KERNEL=="blktap[0-9]*", NAME="xen/%k"
|
||||
KERNEL=="pci_iomul", NAME="xen/%k"
|
||||
SUBSYSTEM=="net", KERNEL=="tap*", ACTION=="add", RUN+="/etc/xen/scripts/vif-setup $env{ACTION} type_if=tap"
|
||||
+3
-3
@@ -1075,7 +1075,7 @@ static char ** libxl_build_device_model_args_old(libxl_ctx *ctx,
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "nic,vlan=%d,macaddr=%s,model=%s",
|
||||
vifs[i].devid, smac, vifs[i].model));
|
||||
flexarray_set(dm_args, num++, "-net");
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "tap,vlan=%d,ifname=%s,bridge=%s",
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "tap,vlan=%d,ifname=%s,bridge=%s,script=no",
|
||||
vifs[i].devid, vifs[i].ifname, vifs[i].bridge));
|
||||
ioemu_vifs++;
|
||||
}
|
||||
@@ -1206,8 +1206,8 @@ static char ** libxl_build_device_model_args_new(libxl_ctx *ctx,
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "nic,vlan=%d,macaddr=%s,model=%s",
|
||||
vifs[i].devid, smac, vifs[i].model));
|
||||
flexarray_set(dm_args, num++, "-net");
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "tap,vlan=%d,ifname=%s,script=%s",
|
||||
vifs[i].devid, vifs[i].ifname, "/etc/xen/scripts/qemu-ifup"));
|
||||
flexarray_set(dm_args, num++, libxl_sprintf(ctx, "tap,vlan=%d,ifname=%s,script=no",
|
||||
vifs[i].devid, vifs[i].ifname));
|
||||
ioemu_vifs++;
|
||||
}
|
||||
}
|
||||
|
||||