From: Mitchell E Berger Date: Tue, 15 May 2018 23:49:39 +0000 (-0400) Subject: Support bringing up machines with an "other" address accessible for X-Git-Tag: 0.0.54~8 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-xen-config.git/commitdiff_plain/eec0fc5b94f1bed727d1255dba2dc6cfd046a871?ds=sidebyside Support bringing up machines with an "other" address accessible for smooth renumbering events. --- diff --git a/debian/changelog b/debian/changelog index a4ab8b3..9c1ef64 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,14 @@ +invirt-xen-config (0.0.54) unstable; urgency=low + + * invirt-database: pass through parameters for the "other" IP address, + if any, to vif-invirtroute. + * vif-invirtroute: if there is an "other" IP address, DNAT it to the + primary IP, set up routing to get it to the VM, and arp for it. + Also, cut out the nonsense with backgrounding arpspoof, sleeping, and + killing it; we have the technology for 'timeout'. + + -- Mitchell Berger Tue, 15 Nay 2018 19:50:00 -0400 + invirt-xen-config (0.0.53) unstable; urgency=low * Fix machine UUID assignment after SQLAlchemy started returning Unicode diff --git a/invirt-database b/invirt-database index b99b548..ade475d 100644 --- a/invirt-database +++ b/invirt-database @@ -123,8 +123,10 @@ for n in machine.nics: check(re.match('^[0-9a-fA-F:]+$', n.mac_addr) and re.match('^[0-9.]*$', n.ip)) if n.nic_type: viftype = viftype.replace("pcnet", n.nic_type) - d = ('%smac=%s, ip=%s, script=vif-invirtroute netdev=%s' - % (viftype, n.mac_addr, n.ip, config.xen.iface)) + other_netparams = ('other_ip=%s other_gateway=%s' + % (n.other_ip, n.other_gateway) if n.other_ip else '') + d = ('%smac=%s, ip=%s, script=vif-invirtroute netdev=%s gateway=%s %s' + % (viftype, n.mac_addr, n.ip, config.xen.iface, n.gateway, other_netparams)) vif.append(d) for d in machine.disks: diff --git a/vif-invirtroute b/vif-invirtroute index 4872758..ed2d072 100755 --- a/vif-invirtroute +++ b/vif-invirtroute @@ -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