vm/network: use metric to allow multiple routes to same VM
This is required when VM has multiple interfaces (eg HVM: PV and stubdom). Prefer the later one.
This commit is contained in:
		
							parent
							
								
									4d0839d05b
								
							
						
					
					
						commit
						eed0b16174
					
				@ -29,7 +29,7 @@ case "$command" in
 | 
				
			|||||||
	online)
 | 
						online)
 | 
				
			||||||
		ifconfig ${vif} up
 | 
							ifconfig ${vif} up
 | 
				
			||||||
		echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
 | 
							echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp
 | 
				
			||||||
		ipcmd='replace'
 | 
							ipcmd='add'
 | 
				
			||||||
		iptables_cmd='-I PREROUTING 1'
 | 
							iptables_cmd='-I PREROUTING 1'
 | 
				
			||||||
		cmdprefix=''
 | 
							cmdprefix=''
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
@ -41,11 +41,17 @@ case "$command" in
 | 
				
			|||||||
		;;
 | 
							;;
 | 
				
			||||||
esac
 | 
					esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					domid=${vif/vif/}
 | 
				
			||||||
 | 
					domid=${domid/.*/}
 | 
				
			||||||
 | 
					# metric must be possitive, but prefer later interface
 | 
				
			||||||
 | 
					#  32752 is max XID aka domid
 | 
				
			||||||
 | 
					metric=$[ 32752 - $domid ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "${ip}" ] ; then
 | 
					if [ "${ip}" ] ; then
 | 
				
			||||||
	# If we've been given a list of IP addresses, then add routes from dom0 to
 | 
						# If we've been given a list of IP addresses, then add routes from dom0 to
 | 
				
			||||||
	# the guest using those addresses.
 | 
						# the guest using those addresses.
 | 
				
			||||||
	for addr in ${ip} ; do
 | 
						for addr in ${ip} ; do
 | 
				
			||||||
		${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} || true
 | 
							${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} metric $metric
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
		echo ${cmdprefix} iptables -t raw $iptables_cmd -i ${vif} \! -s ${ip} -j DROP
 | 
							echo ${cmdprefix} iptables -t raw $iptables_cmd -i ${vif} \! -s ${ip} -j DROP
 | 
				
			||||||
		${cmdprefix} iptables -t raw $iptables_cmd -i ${vif} \! -s ${ip} -j DROP
 | 
							${cmdprefix} iptables -t raw $iptables_cmd -i ${vif} \! -s ${ip} -j DROP
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user