X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=test%2Ftest_dhcp6.py;h=2037e62e9eaa27d4ff1cef1658eb68c98c8b1ab5;hb=097fa66b986f06281f603767d321ab13ab6c88c3;hp=6c203868673989fd14336e4b96629ec96df89323;hpb=978aa643ca32ab220be940290039eb11e068bb73;p=vpp.git diff --git a/test/test_dhcp6.py b/test/test_dhcp6.py index 6c203868673..2037e62e9ea 100644 --- a/test/test_dhcp6.py +++ b/test/test_dhcp6.py @@ -1,3 +1,5 @@ +from socket import AF_INET6 + from scapy.layers.dhcp6 import DHCP6_Advertise, DHCP6OptClientId, \ DHCP6OptStatusCode, DHCP6OptPref, DHCP6OptIA_PD, DHCP6OptIAPrefix, \ DHCP6OptServerId, DHCP6_Solicit, DHCP6_Reply, DHCP6_Request, DHCP6_Renew, \ @@ -6,20 +8,15 @@ from scapy.layers.dhcp6 import DHCP6_Advertise, DHCP6OptClientId, \ from scapy.layers.inet6 import IPv6, Ether, UDP from scapy.utils6 import in6_mactoifaceid from scapy.utils import inet_ntop, inet_pton -from socket import AF_INET6 + from framework import VppTestCase +import util def ip6_normalize(ip6): return inet_ntop(AF_INET6, inet_pton(AF_INET6, ip6)) -def mk_ll_addr(mac): - euid = in6_mactoifaceid(mac) - addr = "fe80::" + euid - return addr - - class TestDHCPv6DataPlane(VppTestCase): """ DHCPv6 Data Plane Test Case """ @@ -27,6 +24,10 @@ class TestDHCPv6DataPlane(VppTestCase): def setUpClass(cls): super(TestDHCPv6DataPlane, cls).setUpClass() + @classmethod + def tearDownClass(cls): + super(TestDHCPv6DataPlane, cls).tearDownClass() + def setUp(self): super(TestDHCPv6DataPlane, self).setUp() @@ -45,7 +46,7 @@ class TestDHCPv6DataPlane(VppTestCase): super(TestDHCPv6DataPlane, self).tearDown() def test_dhcp_ia_na_send_solicit_receive_advertise(self): - """ Verify DHCPv6 IA NA Solicit packet and Advertise envent """ + """ Verify DHCPv6 IA NA Solicit packet and Advertise event """ self.vapi.dhcp6_clients_enable_disable() @@ -55,8 +56,10 @@ class TestDHCPv6DataPlane(VppTestCase): address = {'address': address_bin, 'preferred_time': 60, 'valid_time': 120} - self.vapi.dhcp6_send_client_message(1, self.pg0.sw_if_index, - T1=20, T2=40, addresses=[address]) + self.vapi.dhcp6_send_client_message(msg_type=1, + sw_if_index=self.pg0.sw_if_index, + T1=20, T2=40, addresses=[address], + n_addresses=len([address])) rx_list = self.pg0.get_capture(1) self.assertEqual(len(rx_list), 1) packet = rx_list[0] @@ -88,7 +91,7 @@ class TestDHCPv6DataPlane(VppTestCase): ia_na_opts = DHCP6OptIAAddress(addr='7:8::2', preflft=60, validlft=120) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / - IPv6(src=mk_ll_addr(self.pg0.remote_mac), + IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll) / UDP(sport=547, dport=546) / DHCP6_Advertise(trid=trid) / @@ -120,7 +123,7 @@ class TestDHCPv6DataPlane(VppTestCase): self.vapi.want_dhcp6_reply_events(enable_disable=0) def test_dhcp_pd_send_solicit_receive_advertise(self): - """ Verify DHCPv6 PD Solicit packet and Advertise envent """ + """ Verify DHCPv6 PD Solicit packet and Advertise event """ self.vapi.dhcp6_clients_enable_disable() @@ -165,7 +168,7 @@ class TestDHCPv6DataPlane(VppTestCase): ia_pd_opts = DHCP6OptIAPrefix(prefix='7:8::', plen=56, preflft=60, validlft=120) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / - IPv6(src=mk_ll_addr(self.pg0.remote_mac), + IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll) / UDP(sport=547, dport=546) / DHCP6_Advertise(trid=trid) / @@ -206,6 +209,10 @@ class TestDHCPv6IANAControlPlane(VppTestCase): def setUpClass(cls): super(TestDHCPv6IANAControlPlane, cls).setUpClass() + @classmethod + def tearDownClass(cls): + super(TestDHCPv6IANAControlPlane, cls).tearDownClass() + def setUp(self): super(TestDHCPv6IANAControlPlane, self).setUp() @@ -219,7 +226,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase): self.T1 = 1 self.T2 = 2 - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) self.initial_addresses = set(self.get_interface_addresses(fib, self.pg0)) @@ -240,14 +247,14 @@ class TestDHCPv6IANAControlPlane(VppTestCase): def get_interface_addresses(fib, pg): lst = [] for entry in fib: - if entry.address_length == 128: - path = entry.path[0] + if entry.route.prefix.prefixlen == 128: + path = entry.route.paths[0] if path.sw_if_index == pg.sw_if_index: - lst.append(entry.address) + lst.append(str(entry.route.prefix.network_address)) return lst def get_addresses(self): - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg0)) return addresses.difference(self.initial_addresses) @@ -317,7 +324,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase): else: opt_ia_na = DHCP6OptIA_NA(iaid=1, T1=t1, T2=t2, ianaopts=ianaopts) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / - IPv6(src=mk_ll_addr(self.pg0.remote_mac), + IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll) / UDP(sport=547, dport=546) / msg_type(trid=self.trid) / @@ -369,12 +376,12 @@ class TestDHCPv6IANAControlPlane(VppTestCase): new_addresses = self.get_addresses() self.assertEqual(len(new_addresses), 1) addr = list(new_addresses)[0] - self.assertEqual(inet_ntop(AF_INET6, addr), '7:8::2') + self.assertEqual(addr, '7:8::2') self.sleep(2) # check that the address is deleted - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg0)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0) @@ -411,7 +418,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase): self.send_advertise(ianaopts=noavail) self.wait_for_solicit(is_resend=True) - def test_preferred_greater_than_valit_lifetime(self): + def test_preferred_greater_than_valid_lifetime(self): """ Preferred lifetime is greater than valid lifetime """ self.wait_for_solicit() @@ -423,7 +430,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase): self.sleep(0.5) # check FIB contains no addresses - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg0)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0) @@ -440,7 +447,7 @@ class TestDHCPv6IANAControlPlane(VppTestCase): self.sleep(0.5) # check FIB contains no addresses - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg0)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0) @@ -453,6 +460,10 @@ class TestDHCPv6PDControlPlane(VppTestCase): def setUpClass(cls): super(TestDHCPv6PDControlPlane, cls).setUpClass() + @classmethod + def tearDownClass(cls): + super(TestDHCPv6PDControlPlane, cls).tearDownClass() + def setUp(self): super(TestDHCPv6PDControlPlane, self).setUp() @@ -466,7 +477,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): self.T1 = 1 self.T2 = 2 - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) self.initial_addresses = set(self.get_interface_addresses(fib, self.pg1)) @@ -492,14 +503,14 @@ class TestDHCPv6PDControlPlane(VppTestCase): def get_interface_addresses(fib, pg): lst = [] for entry in fib: - if entry.address_length == 128: - path = entry.path[0] + if entry.route.prefix.prefixlen == 128: + path = entry.route.paths[0] if path.sw_if_index == pg.sw_if_index: - lst.append(entry.address) + lst.append(str(entry.route.prefix.network_address)) return lst def get_addresses(self): - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg1)) return addresses.difference(self.initial_addresses) @@ -569,7 +580,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): else: opt_ia_pd = DHCP6OptIA_PD(iaid=1, T1=t1, T2=t2, iapdopt=iapdopt) p = (Ether(src=self.pg0.remote_mac, dst=self.pg0.local_mac) / - IPv6(src=mk_ll_addr(self.pg0.remote_mac), + IPv6(src=util.mk_ll_addr(self.pg0.remote_mac), dst=self.pg0.local_ip6_ll) / UDP(sport=547, dport=546) / msg_type(trid=self.trid) / @@ -631,7 +642,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): new_addresses = self.get_addresses() self.assertEqual(len(new_addresses), 1) addr = list(new_addresses)[0] - self.assertEqual(inet_ntop(AF_INET6, addr), '7:8:0:2::405') + self.assertEqual(addr, '7:8:0:2::405') self.sleep(1) @@ -645,21 +656,21 @@ class TestDHCPv6PDControlPlane(VppTestCase): self.sleep(1) # check FIB contains 2 addresses - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg1)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 2) addr1 = list(new_addresses)[0] addr2 = list(new_addresses)[1] - if inet_ntop(AF_INET6, addr1) == '7:8:0:76::406': + if addr1 == '7:8:0:76::406': addr1, addr2 = addr2, addr1 - self.assertEqual(inet_ntop(AF_INET6, addr1), '7:8:0:2::405') - self.assertEqual(inet_ntop(AF_INET6, addr2), '7:8:0:76::406') + self.assertEqual(addr1, '7:8:0:2::405') + self.assertEqual(addr2, '7:8:0:76::406') self.sleep(1) # check that the addresses are deleted - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg1)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0) @@ -706,7 +717,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): self.send_advertise(iapdopt=noavail) self.wait_for_solicit(is_resend=True) - def test_preferred_greater_than_valit_lifetime(self): + def test_preferred_greater_than_valid_lifetime(self): """ Preferred lifetime is greater than valid lifetime """ try: @@ -727,7 +738,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): self.sleep(0.5) # check FIB contains no addresses - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg1)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0) @@ -760,7 +771,7 @@ class TestDHCPv6PDControlPlane(VppTestCase): self.sleep(0.5) # check FIB contains no addresses - fib = self.vapi.ip6_fib_dump() + fib = self.vapi.ip_route_dump(0, True) addresses = set(self.get_interface_addresses(fib, self.pg1)) new_addresses = addresses.difference(self.initial_addresses) self.assertEqual(len(new_addresses), 0)