tools/hotplug: only attempt to call 'ip route' if there is valid command

The vif-route script should only call 'ip route' when 'ipcmd' has been
set, otherwise it will fail due to an incorrect command string.

This patch also adds routes for 'tap' (i.e. emulated) devices as well as
'vif' (i.e. PV) devices. Empirically offline/online commands relate to
'vif' devices, and add/remove commands relate to 'tap' devices. However,
this patch treats them equally and uses ${type_if} to distinguish. By
adding cases for add/remove the command list becomes exhaustive and hence
'ipcmd' is guaranteed to be set.

Routes for 'tap' and 'vif' devices are distinguished by a route metric.
Emulated devices are used by HVM guests until they are unplugged, at which
point the PV device becomes active. Thus 'tap' devices should get a higher
priority (i.e. lower numbered) metric than 'vif' devices.

There is also one small whitespace fix.

Signed-off-by: Paul Durrant <pdurrant@amazon.com>
Acked-by: Wei Liu <wl@xen.org>
Release-acked-by: Juergen Gross <jgross@suse.com>
This commit is contained in:
Paul Durrant authored and Wei Liu committed 2019-11-12 10:40:05 +00:00
1 parent cda8f7e857
commit 3683290fc0
1 file changed
+22 -8
Regular → Executable
+22 -8
View File
@@ -22,12 +22,16 @@ dir=$(dirname "$0")
main_ip=$(dom0_ip)
case "${command}" in
add)
;&
online)
ifconfig ${dev} ${main_ip} netmask 255.255.255.255 up
echo 1 >/proc/sys/net/ipv4/conf/${dev}/proxy_arp
ipcmd='add'
cmdprefix=''
;;
remove)
;&
offline)
do_without_error ifdown ${dev}
ipcmd='del'
@@ -35,13 +39,23 @@ case "${command}" in
;;
esac
if [ "${ip}" ] ; then
# If we've been given a list of IP addresses, then add routes from dom0 to
# the guest using those addresses.
for addr in ${ip} ; do
${cmdprefix} ip route ${ipcmd} ${addr} dev ${dev} src ${main_ip}
done
fi
case "${type_if}" in
tap)
metric=1
;;
vif)
metric=2
;;
*)
fatal "Unrecognised interface type ${type_if}"
;;
esac
# If we've been given a list of IP addresses, then add routes from dom0 to
# the guest using those addresses.
for addr in ${ip} ; do
${cmdprefix} ip route ${ipcmd} ${addr} dev ${dev} src ${main_ip} metric ${metric}
done
handle_iptable
@@ -50,5 +64,5 @@ call_hooks vif post
log debug "Successful vif-route ${command} for ${dev}."
if [ "${command}" = "online" ]
then
success
success
fi
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.