Support bringing up machines with an "other" address accessible for
[invirt/packages/invirt-xen-config.git] / vif-invirtroute
index 4872758..ed2d072 100755 (executable)
@@ -39,11 +39,13 @@ case "$command" in
           ethtool -K ${dev} tx off
         fi
         ipcmd='add'
+       ipt_action='-A'
         cmdprefix=''
         ;;
     offline|remove)
         do_without_error ifdown ${vif}
         ipcmd='del'
+       ipt_action='-D'
         cmdprefix='do_without_error'
         ;;
 esac
@@ -88,12 +90,19 @@ if [  ${vif_type} != "ioemu"  -o  x${qemu_online} = xyes ] ; then
            ${cmdprefix} ip route ${ipcmd} ${addr} dev ${dev} src ${main_ip} $metric
            case "$command" in
                online|add)
-                   arpspoof -i $(invirt-getconf xen.iface) -t 18.181.0.1 ${addr}&
-                   sleep 5
-                   kill %arpspoof
+                   timeout 5 arpspoof -i $(invirt-getconf xen.iface) -t ${gateway} ${addr} || :
                    ;;
            esac
        done 
+       if [ -n "$other_ip" ]; then
+           ${cmdprefix} ip route ${ipcmd} ${other_ip} dev ${dev} src ${main_ip} $metric
+           iptables -t nat ${ipt_action} PREROUTING -d ${other_ip} -j DNAT --to-destination ${addr}
+           case "$command" in
+               online|add)
+                   timeout 5 arpspoof -i $(invirt-getconf xen.iface) -t ${other_gateway} ${other_ip} || :
+                   ;;
+           esac
+       fi
     fi
 fi