[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] tools/hotplug: only attempt to call 'ip route' if there is valid command



commit 3683290fc0b0d6500392db733811cc78bcb35eab
Author:     Paul Durrant <pdurrant@xxxxxxxxxx>
AuthorDate: Fri Nov 8 09:42:33 2019 +0000
Commit:     Wei Liu <wl@xxxxxxx>
CommitDate: Tue Nov 12 10:40:05 2019 +0000

    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@xxxxxxxxxx>
    Acked-by: Wei Liu <wl@xxxxxxx>
    Release-acked-by: Juergen Gross <jgross@xxxxxxxx>
---
 tools/hotplug/Linux/vif-route | 30 ++++++++++++++++++++++--------
 1 file changed, 22 insertions(+), 8 deletions(-)

diff --git a/tools/hotplug/Linux/vif-route b/tools/hotplug/Linux/vif-route
old mode 100644
new mode 100755
index c149ffca73..05199bf741
--- a/tools/hotplug/Linux/vif-route
+++ b/tools/hotplug/Linux/vif-route
@@ -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
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.