Commit c87858f0 authored by Thomas Gambier's avatar Thomas Gambier 🚴🏼

[slapformat] Make sure routing is OK withVM inside VM

parent d259174f
...@@ -632,8 +632,11 @@ class Computer(object): ...@@ -632,8 +632,11 @@ class Computer(object):
netmask_len = lenNetmaskIpv6(self.interface.getGlobalScopeAddressList()[0]['netmask']) + 16 netmask_len = lenNetmaskIpv6(self.interface.getGlobalScopeAddressList()[0]['netmask']) + 16
prefix = binFromIpv6(partition.tap.ipv6_addr)[:netmask_len] prefix = binFromIpv6(partition.tap.ipv6_addr)[:netmask_len]
network_addr = ipv6FromBin(prefix) network_addr = ipv6FromBin(prefix)
partition.tap.ipv6_gateway = partition.tap.ipv6_addr partition.tap.ipv6_gateway = "{}1".format(network_addr) # address network::1 will be inside the VM
partition.tap.ipv6_gateway = ipv6FromBin(binFromIpv6(partition.tap.ipv6_gateway)) # correctly format the IPv6
partition.tap.ipv6_network = "{}/{}".format(network_addr, netmask_len) partition.tap.ipv6_network = "{}/{}".format(network_addr, netmask_len)
print(partition.tap.ipv6_gateway)
print(partition.tap.ipv6_network)
else: else:
partition.tap.ipv6_addr = '' partition.tap.ipv6_addr = ''
partition.tap.ipv6_netmask = '' partition.tap.ipv6_netmask = ''
...@@ -910,10 +913,18 @@ class Tap(object): ...@@ -910,10 +913,18 @@ class Tap(object):
if self.ipv6_network: if self.ipv6_network:
# Check if this route exits # Check if this route exits
code, result = callAndRead(['ip', '-6', 'route', 'show', self.ipv6_gateway],
raise_on_error=False)
if code != 0 or self.name not in result:
callAndRead(['ip', '-6', 'route', 'add', self.ipv6_gateway, 'dev', self.name])
code, result = callAndRead(['ip', '-6', 'route', 'show', self.ipv6_network], code, result = callAndRead(['ip', '-6', 'route', 'show', self.ipv6_network],
raise_on_error=False) raise_on_error=False)
if code != 0 or self.ipv6_network not in result or self.name not in result: if code != 0 or 'via {}'.format(self.ipv6_gateway) not in result or 'dev {}'.format(self.name) not in result:
callAndRead(['ip', '-6', 'route', 'add', self.ipv6_network, 'dev', self.name]) if 'dev {}'.format(self.name) in result:
callAndRead(['ip', '-6', 'route', 'del', self.ipv6_network, 'dev', self.name]) # remove old route without the "via" option
callAndRead(['ip', '-6', 'route', 'add', self.ipv6_network, 'dev', self.name, 'via', self.ipv6_gateway])
class Tun(Tap): class Tun(Tap):
......
...@@ -124,8 +124,13 @@ class FakeCallAndRead: ...@@ -124,8 +124,13 @@ class FakeCallAndRead:
elif argument_list[:3] == ['ip', '-6', 'route']: elif argument_list[:3] == ['ip', '-6', 'route']:
retval = 0, 'OK' retval = 0, 'OK'
ip = argument_list[4] ip = argument_list[4]
netmask = int(ip.split('/')[1]) if '/' in ip:
argument_list[4] = 'ip/%s' % netmask netmask = int(ip.split('/')[1])
argument_list[4] = 'ip/%s' % netmask
else:
argument_list[4] = 'ip'
if len(argument_list) > 7:
argument_list[8] = 'gateway'
elif argument_list[:3] == ['route', 'add', '-host']: elif argument_list[:3] == ['route', 'add', '-host']:
retval = 0, 'OK' retval = 0, 'OK'
self.external_command_list.append(' '.join(argument_list)) self.external_command_list.append(' '.join(argument_list))
...@@ -489,8 +494,10 @@ class TestComputer(SlapformatMixin): ...@@ -489,8 +494,10 @@ class TestComputer(SlapformatMixin):
'ip -6 addr list tap', 'ip -6 addr list tap',
'ip route show 10.0.0.2', 'ip route show 10.0.0.2',
'ip route add 10.0.0.2 dev tap', 'ip route add 10.0.0.2 dev tap',
'ip -6 route show ip',
'ip -6 route add ip dev tap',
'ip -6 route show ip/80', 'ip -6 route show ip/80',
'ip -6 route add ip/80 dev tap', 'ip -6 route add ip/80 dev tap via gateway',
'ip addr add ip/255.255.255.255 dev myinterface', 'ip addr add ip/255.255.255.255 dev myinterface',
# 'ip addr list myinterface', # 'ip addr list myinterface',
'ip addr add ip/ffff:ffff:ffff:ffff:: dev myinterface', 'ip addr add ip/ffff:ffff:ffff:ffff:: dev myinterface',
...@@ -544,8 +551,10 @@ class TestComputer(SlapformatMixin): ...@@ -544,8 +551,10 @@ class TestComputer(SlapformatMixin):
'ip -6 addr list tap', 'ip -6 addr list tap',
'ip route show 10.8.0.2', 'ip route show 10.8.0.2',
'ip route add 10.8.0.2 dev tap', 'ip route add 10.8.0.2 dev tap',
'ip -6 route show ip',
'ip -6 route add ip dev tap',
'ip -6 route show ip/96', 'ip -6 route show ip/96',
'ip -6 route add ip/96 dev tap', 'ip -6 route add ip/96 dev tap via gateway',
'ip addr add ip/255.255.255.255 dev iface', 'ip addr add ip/255.255.255.255 dev iface',
'ip addr add ip/ffff:ffff:ffff:ffff:ffff:: dev iface', 'ip addr add ip/ffff:ffff:ffff:ffff:ffff:: dev iface',
'ip -6 addr list iface' 'ip -6 addr list iface'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment