X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fgbp%2Ftest%2Ftest_gbp.py;h=df3c3ad54f0aab54916248a9df58caec8339484a;hb=3d5f08a82;hp=a06492904e1c7c69bea3fdfbc1c1b03ae3f8bea6;hpb=ead1e536d66d83b546528c32e2112085a97c8e13;p=vpp.git diff --git a/src/plugins/gbp/test/test_gbp.py b/src/plugins/gbp/test/test_gbp.py index a06492904e1..df3c3ad54f0 100644 --- a/src/plugins/gbp/test/test_gbp.py +++ b/src/plugins/gbp/test/test_gbp.py @@ -1,7 +1,8 @@ #!/usr/bin/env python3 -from socket import AF_INET, AF_INET6 +from socket import AF_INET, AF_INET6, inet_pton, inet_ntop import unittest +from ipaddress import ip_address, IPv4Network, IPv6Network from scapy.packet import Raw from scapy.layers.l2 import Ether, ARP, Dot1Q @@ -11,7 +12,6 @@ from scapy.layers.inet6 import IPv6, ICMPv6ND_NS, ICMPv6NDOptSrcLLAddr, \ from scapy.utils6 import in6_getnsma, in6_getnsmac from scapy.layers.vxlan import VXLAN from scapy.data import ETH_P_IP, ETH_P_IPV6, ETH_P_ARP -from scapy.utils import inet_pton, inet_ntop from framework import VppTestCase, VppTestRunner from vpp_object import VppObject @@ -22,11 +22,12 @@ from vpp_ip_route import VppIpRoute, VppRoutePath, VppIpTable, \ from vpp_l2 import VppBridgeDomain, VppBridgeDomainPort, \ VppBridgeDomainArpEntry, VppL2FibEntry, find_bridge_domain_port, VppL2Vtr from vpp_sub_interface import L2_VTR_OP, VppDot1QSubint -from vpp_ip import VppIpAddress, VppIpPrefix, DpoProto +from vpp_ip import DpoProto, get_dpo_proto from vpp_papi import VppEnum, MACAddress from vpp_vxlan_gbp_tunnel import find_vxlan_gbp_tunnel, INDEX_INVALID, \ VppVxlanGbpTunnel from vpp_neighbor import VppNeighbor +from vpp_acl import AclRule, VppAcl try: text_type = unicode except NameError: @@ -36,9 +37,9 @@ NUM_PKTS = 67 def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None, - tep=None, sclass=None): + tep=None, sclass=None, flags=None): if ip: - vip = VppIpAddress(ip) + vip = ip if mac: vmac = MACAddress(mac) @@ -46,9 +47,10 @@ def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None, for ep in eps: if tep: - src = VppIpAddress(tep[0]) - dst = VppIpAddress(tep[1]) - if src != ep.endpoint.tun.src or dst != ep.endpoint.tun.dst: + src = tep[0] + dst = tep[1] + if src != str(ep.endpoint.tun.src) or \ + dst != str(ep.endpoint.tun.dst): continue if sw_if_index: if ep.endpoint.sw_if_index != sw_if_index: @@ -56,12 +58,15 @@ def find_gbp_endpoint(test, sw_if_index=None, ip=None, mac=None, if sclass: if ep.endpoint.sclass != sclass: continue + if flags: + if flags != (flags & ep.endpoint.flags): + continue if ip: for eip in ep.endpoint.ips: - if vip == eip: + if vip == str(eip): return True if mac: - if vmac.packed == ep.endpoint.mac: + if vmac == ep.endpoint.mac: return True return False @@ -118,10 +123,10 @@ class VppGbpEndpoint(VppObject): self.epg = epg self.recirc = recirc - self._ip4 = VppIpAddress(ip4) - self._fip4 = VppIpAddress(fip4) - self._ip6 = VppIpAddress(ip6) - self._fip6 = VppIpAddress(fip6) + self._ip4 = ip4 + self._fip4 = fip4 + self._ip6 = ip6 + self._fip6 = fip6 if mac: self.vmac = MACAddress(self.itf.remote_mac) @@ -129,18 +134,18 @@ class VppGbpEndpoint(VppObject): self.vmac = MACAddress("00:00:00:00:00:00") self.flags = flags - self.tun_src = VppIpAddress(tun_src) - self.tun_dst = VppIpAddress(tun_dst) + self.tun_src = tun_src + self.tun_dst = tun_dst def add_vpp_config(self): res = self._test.vapi.gbp_endpoint_add( self.itf.sw_if_index, - [self.ip4.encode(), self.ip6.encode()], + [self.ip4, self.ip6], self.vmac.packed, self.epg.sclass, self.flags, - self.tun_src.encode(), - self.tun_dst.encode()) + self.tun_src, + self.tun_dst) self.handle = res.handle self._test.registry.register(self, self._test.logger) @@ -150,13 +155,13 @@ class VppGbpEndpoint(VppObject): def object_id(self): return "gbp-endpoint:[%d==%d:%s:%d]" % (self.handle, self.itf.sw_if_index, - self.ip4.address, + self.ip4, self.epg.sclass) def query_vpp_config(self): return find_gbp_endpoint(self._test, self.itf.sw_if_index, - self.ip4.address) + self.ip4) class VppGbpRecirc(VppObject): @@ -238,7 +243,13 @@ class VppGbpSubnet(VppObject): type, sw_if_index=None, sclass=None): self._test = test self.rd_id = rd.rd_id - self.prefix = VppIpPrefix(address, address_len) + a = ip_address(address) + if 4 == a.version: + self.prefix = IPv4Network("%s/%d" % (address, address_len), + strict=False) + else: + self.prefix = IPv6Network("%s/%d" % (address, address_len), + strict=False) self.type = type self.sw_if_index = sw_if_index self.sclass = sclass @@ -247,7 +258,7 @@ class VppGbpSubnet(VppObject): self._test.vapi.gbp_subnet_add_del( 1, self.rd_id, - self.prefix.encode(), + self.prefix, self.type, sw_if_index=self.sw_if_index if self.sw_if_index else 0xffffffff, sclass=self.sclass if self.sclass else 0xffff) @@ -257,7 +268,7 @@ class VppGbpSubnet(VppObject): self._test.vapi.gbp_subnet_add_del( 0, self.rd_id, - self.prefix.encode(), + self.prefix, self.type) def object_id(self): @@ -292,8 +303,8 @@ class VppGbpEndpointGroup(VppObject): self._test = test self.uplink = uplink self.bvi = bvi - self.bvi_ip4 = VppIpAddress(bvi_ip4) - self.bvi_ip6 = VppIpAddress(bvi_ip6) + self.bvi_ip4 = bvi_ip4 + self.bvi_ip6 = bvi_ip6 self.vnid = vnid self.bd = bd self.rd = rd @@ -424,7 +435,7 @@ class VppGbpContractNextHop(): self.rd = rd def encode(self): - return {'ip': self.ip.encode(), + return {'ip': self.ip, 'mac': self.mac.packed, 'bd_id': self.bd.bd.bd_id, 'rd_id': self.rd.rd_id} @@ -561,65 +572,17 @@ class VppGbpVxlanTunnel(VppInterface): return find_gbp_vxlan(self._test, self.vni) -class VppGbpAcl(VppObject): - """ - GBP Acl - """ - - def __init__(self, test): - self._test = test - self.acl_index = 4294967295 - - def create_rule(self, is_ipv6=0, permit_deny=0, proto=-1, - s_prefix=0, s_ip=b'\x00\x00\x00\x00', sport_from=0, - sport_to=65535, d_prefix=0, d_ip=b'\x00\x00\x00\x00', - dport_from=0, dport_to=65535): - if proto == -1 or proto == 0: - sport_to = 0 - dport_to = sport_to - elif proto == 1 or proto == 58: - sport_to = 255 - dport_to = sport_to - rule = ({'is_permit': permit_deny, 'is_ipv6': is_ipv6, 'proto': proto, - 'srcport_or_icmptype_first': sport_from, - 'srcport_or_icmptype_last': sport_to, - 'src_ip_prefix_len': s_prefix, - 'src_ip_addr': s_ip, - 'dstport_or_icmpcode_first': dport_from, - 'dstport_or_icmpcode_last': dport_to, - 'dst_ip_prefix_len': d_prefix, - 'dst_ip_addr': d_ip}) - return rule - - def add_vpp_config(self, rules): - - reply = self._test.vapi.acl_add_replace(acl_index=self.acl_index, - r=rules, - tag=b'GBPTest') - self.acl_index = reply.acl_index - return self.acl_index - - def remove_vpp_config(self): - self._test.vapi.acl_del(self.acl_index) - - def object_id(self): - return "gbp-acl:[%d]" % (self.acl_index) - - def query_vpp_config(self): - cs = self._test.vapi.acl_dump() - for c in cs: - if c.acl_index == self.acl_index: - return True - return False - - class TestGBP(VppTestCase): """ GBP Test Case """ @property - def config_flags(self): + def nat_config_flags(self): return VppEnum.vl_api_nat_config_flags_t + @property + def nat44_config_flags(self): + return VppEnum.vl_api_nat44_config_flags_t + @classmethod def setUpClass(cls): super(TestGBP, cls).setUpClass() @@ -867,18 +830,22 @@ class TestGBP(VppTestCase): "10.0.2.1", "11.0.0.4", "2001:10:2::1", "3001::4")] + self.vapi.nat44_plugin_enable_disable(enable=1) + # # Config related to each of the EPGs # for epg in epgs: # IP config on the BVI interfaces if epg != epgs[1] and epg != epgs[4]: - VppIpInterfaceBind(self, epg.bvi, epg.rd.t4).add_vpp_config() - VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config() + b4 = VppIpInterfaceBind(self, epg.bvi, + epg.rd.t4).add_vpp_config() + b6 = VppIpInterfaceBind(self, epg.bvi, + epg.rd.t6).add_vpp_config() epg.bvi.set_mac(self.router_mac) # The BVIs are NAT inside interfaces - flags = self.config_flags.NAT_IS_INSIDE + flags = self.nat_config_flags.NAT_IS_INSIDE self.vapi.nat44_interface_add_del_feature( sw_if_index=epg.bvi.sw_if_index, flags=flags, is_add=1) @@ -886,10 +853,12 @@ class TestGBP(VppTestCase): is_add=1, flags=flags, sw_if_index=epg.bvi.sw_if_index) - if_ip4 = VppIpInterfaceAddress(self, epg.bvi, epg.bvi_ip4, 32) - if_ip6 = VppIpInterfaceAddress(self, epg.bvi, epg.bvi_ip6, 128) - if_ip4.add_vpp_config() - if_ip6.add_vpp_config() + if_ip4 = VppIpInterfaceAddress(self, epg.bvi, + epg.bvi_ip4, 32, + bind=b4).add_vpp_config() + if_ip6 = VppIpInterfaceAddress(self, epg.bvi, + epg.bvi_ip6, 128, + bind=b6).add_vpp_config() # EPG uplink interfaces in the RD VppIpInterfaceBind(self, epg.uplink, epg.rd.t4).add_vpp_config() @@ -898,10 +867,10 @@ class TestGBP(VppTestCase): # add the BD ARP termination entry for BVI IP epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd, str(self.router_mac), - epg.bvi_ip4.address) + epg.bvi_ip4) epg.bd_arp_ip6 = VppBridgeDomainArpEntry(self, epg.bd.bd, str(self.router_mac), - epg.bvi_ip6.address) + epg.bvi_ip6) epg.bd_arp_ip4.add_vpp_config() epg.bd_arp_ip6.add_vpp_config() @@ -938,19 +907,19 @@ class TestGBP(VppTestCase): # for (ip, fip) in zip(ep.ips, ep.fips): # Add static mappings for each EP from the 10/8 to 11/8 network - if ip.af == AF_INET: - flags = self.config_flags.NAT_IS_ADDR_ONLY + if ip_address(ip).version == 4: + flags = self.nat_config_flags.NAT_IS_ADDR_ONLY self.vapi.nat44_add_del_static_mapping( is_add=1, - local_ip_address=ip.bytes, - external_ip_address=fip.bytes, + local_ip_address=ip, + external_ip_address=fip, external_sw_if_index=0xFFFFFFFF, vrf_id=0, flags=flags) else: self.vapi.nat66_add_del_static_mapping( - local_ip_address=ip.bytes, - external_ip_address=fip.bytes, + local_ip_address=ip, + external_ip_address=fip, vrf_id=0, is_add=1) # VPP EP create ... @@ -964,27 +933,27 @@ class TestGBP(VppTestCase): for ii, ip in enumerate(ep.ips): p = rx[ii] - if ip.is_ip6: + if ip_address(ip).version == 6: self.assertTrue(p.haslayer(ICMPv6ND_NA)) - self.assertEqual(p[ICMPv6ND_NA].tgt, ip.address) + self.assertEqual(p[ICMPv6ND_NA].tgt, ip) else: self.assertTrue(p.haslayer(ARP)) - self.assertEqual(p[ARP].psrc, ip.address) - self.assertEqual(p[ARP].pdst, ip.address) + self.assertEqual(p[ARP].psrc, ip) + self.assertEqual(p[ARP].pdst, ip) # add the BD ARP termination entry for floating IP for fip in ep.fips: ba = VppBridgeDomainArpEntry(self, epg_nat.bd.bd, ep.mac, - fip.address) + fip) ba.add_vpp_config() # floating IPs route via EPG recirc r = VppIpRoute( - self, fip.address, fip.length, - [VppRoutePath(fip.address, + self, fip, ip_address(fip).max_prefixlen, + [VppRoutePath(fip, ep.recirc.recirc.sw_if_index, type=FibPathType.FIB_PATH_TYPE_DVR, - proto=fip.dpo_proto)], + proto=get_dpo_proto(fip))], table_id=20) r.add_vpp_config() @@ -1021,17 +990,17 @@ class TestGBP(VppTestCase): ARP(op="who-has", hwdst="ff:ff:ff:ff:ff:ff", hwsrc=self.pg0.remote_mac, - pdst=epgs[0].bvi_ip4.address, - psrc=eps[0].ip4.address)) + pdst=epgs[0].bvi_ip4, + psrc=eps[0].ip4)) self.send_and_expect(self.pg0, [pkt_arp], self.pg0) - nsma = in6_getnsma(inet_pton(AF_INET6, eps[0].ip6.address)) + nsma = in6_getnsma(inet_pton(AF_INET6, eps[0].ip6)) d = inet_ntop(AF_INET6, nsma) pkt_nd = (Ether(dst=in6_getnsmac(nsma), src=self.pg0.remote_mac) / - IPv6(dst=d, src=eps[0].ip6.address) / - ICMPv6ND_NS(tgt=epgs[0].bvi_ip6.address) / + IPv6(dst=d, src=eps[0].ip6) / + ICMPv6ND_NS(tgt=epgs[0].bvi_ip6) / ICMPv6NDOptSrcLLAddr(lladdr=self.pg0.remote_mac)) self.send_and_expect(self.pg0, [pkt_nd], self.pg0) @@ -1040,9 +1009,9 @@ class TestGBP(VppTestCase): # pkt_bcast = (Ether(dst="ff:ff:ff:ff:ff:ff", src=self.pg0.remote_mac) / - IP(src=eps[0].ip4.address, dst="232.1.1.1") / + IP(src=eps[0].ip4, dst="232.1.1.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.vapi.cli("clear trace") self.pg0.add_stream(pkt_bcast) @@ -1060,26 +1029,26 @@ class TestGBP(VppTestCase): # pkt_intra_epg_220_ip4 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="10.0.0.99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) pkt_inter_epg_222_ip4 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="10.0.1.99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg0, pkt_intra_epg_220_ip4 * NUM_PKTS) pkt_inter_epg_222_ip6 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IPv6(src=eps[0].ip6.address, + IPv6(src=eps[0].ip6, dst="2001:10::99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_222_ip6 * NUM_PKTS) @@ -1137,10 +1106,10 @@ class TestGBP(VppTestCase): # pkt_intra_epg_220_to_uplink = (Ether(src=self.pg0.remote_mac, dst="00:00:00:33:44:55") / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="10.0.0.99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(eps[0].itf, pkt_intra_epg_220_to_uplink * NUM_PKTS, @@ -1151,10 +1120,10 @@ class TestGBP(VppTestCase): pkt_intra_epg_221_to_uplink = (Ether(src=self.pg2.remote_mac, dst="00:00:00:33:44:66") / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="10.0.0.99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(eps[2].itf, pkt_intra_epg_221_to_uplink * NUM_PKTS, @@ -1165,10 +1134,10 @@ class TestGBP(VppTestCase): # pkt_intra_epg_220_from_uplink = (Ether(src="00:00:00:33:44:55", dst=self.pg0.remote_mac) / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="10.0.0.99") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(self.pg4, pkt_intra_epg_220_from_uplink * NUM_PKTS, @@ -1180,10 +1149,10 @@ class TestGBP(VppTestCase): # pkt_intra_epg = (Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac) / - IP(src=eps[0].ip4.address, - dst=eps[1].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[1].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(self.pg0, pkt_intra_epg * NUM_PKTS, @@ -1195,22 +1164,22 @@ class TestGBP(VppTestCase): # pkt_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac, dst=self.pg2.remote_mac) / - IP(src=eps[0].ip4.address, - dst=eps[2].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[2].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac, dst=self.pg0.remote_mac) / - IP(src=eps[2].ip4.address, - dst=eps[0].ip4.address) / + IP(src=eps[2].ip4, + dst=eps[0].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, - dst=eps[3].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[3].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_221 * NUM_PKTS) @@ -1220,12 +1189,14 @@ class TestGBP(VppTestCase): # # A uni-directional contract from EPG 220 -> 221 # - acl = VppGbpAcl(self) - rule = acl.create_rule(permit_deny=1, proto=17) - rule2 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule, rule2]) + rule = AclRule(is_permit=1, proto=17) + rule2 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule, rule2]) + acl.add_vpp_config() + c1 = VppGbpContract( - self, 400, epgs[0].sclass, epgs[1].sclass, acl_index, + self, 400, epgs[0].sclass, epgs[1].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1247,7 +1218,7 @@ class TestGBP(VppTestCase): # contract for the return direction # c2 = VppGbpContract( - self, 400, epgs[1].sclass, epgs[0].sclass, acl_index, + self, 400, epgs[1].sclass, epgs[0].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1291,7 +1262,7 @@ class TestGBP(VppTestCase): # A uni-directional contract from EPG 220 -> 222 'L3 routed' # c3 = VppGbpContract( - self, 400, epgs[0].sclass, epgs[2].sclass, acl_index, + self, 400, epgs[0].sclass, epgs[2].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1380,25 +1351,23 @@ class TestGBP(VppTestCase): # pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, + IP(src=eps[0].ip4, dst="1.1.1.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) # no policy yet self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_global * NUM_PKTS) + rule = AclRule(is_permit=1, proto=17, ports=1234) + rule2 = AclRule(is_permit=1, proto=17, ports=1234, + src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0))) + acl2 = VppAcl(self, rules=[rule, rule2]) + acl2.add_vpp_config() - acl2 = VppGbpAcl(self) - rule = acl2.create_rule(permit_deny=1, proto=17, sport_from=1234, - sport_to=1234, dport_from=1234, dport_to=1234) - rule2 = acl2.create_rule(is_ipv6=1, permit_deny=1, proto=17, - sport_from=1234, sport_to=1234, - dport_from=1234, dport_to=1234) - - acl_index2 = acl2.add_vpp_config([rule, rule2]) c4 = VppGbpContract( - self, 400, epgs[0].sclass, epgs[3].sclass, acl_index2, + self, 400, epgs[0].sclass, epgs[3].sclass, acl2.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1413,35 +1382,35 @@ class TestGBP(VppTestCase): self.send_and_expect_natted(eps[0].itf, pkt_inter_epg_220_to_global * NUM_PKTS, self.pg7, - eps[0].fip4.address) + eps[0].fip4) pkt_inter_epg_220_to_global = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IPv6(src=eps[0].ip6.address, + IPv6(src=eps[0].ip6, dst="6001::1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_natted6(self.pg0, pkt_inter_epg_220_to_global * NUM_PKTS, self.pg7, - eps[0].fip6.address) + eps[0].fip6) # # From a global address to an EP: OUT2IN # pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac), dst=self.pg0.remote_mac) / - IP(dst=eps[0].fip4.address, + IP(dst=eps[0].fip4, src="1.1.1.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies( self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS) c5 = VppGbpContract( - self, 400, epgs[3].sclass, epgs[0].sclass, acl_index2, + self, 400, epgs[3].sclass, epgs[0].sclass, acl2.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1456,20 +1425,20 @@ class TestGBP(VppTestCase): self.send_and_expect_unnatted(self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS, eps[0].itf, - eps[0].ip4.address) + eps[0].ip4) pkt_inter_epg_220_from_global = (Ether(src=str(self.router_mac), dst=self.pg0.remote_mac) / - IPv6(dst=eps[0].fip6.address, + IPv6(dst=eps[0].fip6, src="6001::1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_unnatted6( self.pg7, pkt_inter_epg_220_from_global * NUM_PKTS, eps[0].itf, - eps[0].ip6.address) + eps[0].ip6) # # From a local VM to another local VM using resp. public addresses: @@ -1477,77 +1446,69 @@ class TestGBP(VppTestCase): # pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, - dst=eps[1].fip4.address) / + IP(src=eps[0].ip4, + dst=eps[1].fip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_double_natted(eps[0].itf, pkt_intra_epg_220_global * NUM_PKTS, eps[1].itf, - eps[0].fip4.address, - eps[1].ip4.address) + eps[0].fip4, + eps[1].ip4) pkt_intra_epg_220_global = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IPv6(src=eps[0].ip6.address, - dst=eps[1].fip6.address) / + IPv6(src=eps[0].ip6, + dst=eps[1].fip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_double_natted6( eps[0].itf, pkt_intra_epg_220_global * NUM_PKTS, eps[1].itf, - eps[0].fip6.address, - eps[1].ip6.address) + eps[0].fip6, + eps[1].ip6) # # cleanup # + self.vapi.nat44_plugin_enable_disable(enable=0) + for ep in eps: # del static mappings for each EP from the 10/8 to 11/8 network - flags = self.config_flags.NAT_IS_ADDR_ONLY - self.vapi.nat44_add_del_static_mapping( - is_add=0, - local_ip_address=ep.ip4.bytes, - external_ip_address=ep.fip4.bytes, - external_sw_if_index=0xFFFFFFFF, - vrf_id=0, - flags=flags) + flags = self.nat_config_flags.NAT_IS_ADDR_ONLY self.vapi.nat66_add_del_static_mapping( - local_ip_address=ep.ip6.bytes, - external_ip_address=ep.fip6.bytes, + local_ip_address=ep.ip6, + external_ip_address=ep.fip6, vrf_id=0, is_add=0) for epg in epgs: # IP config on the BVI interfaces if epg != epgs[0] and epg != epgs[3]: - flags = self.config_flags.NAT_IS_INSIDE - self.vapi.nat44_interface_add_del_feature( - sw_if_index=epg.bvi.sw_if_index, - flags=flags, - is_add=0) + flags = self.nat_config_flags.NAT_IS_INSIDE self.vapi.nat66_add_del_interface( - is_add=0, flags=flags, - sw_if_index=epg.bvi.sw_if_index) + sw_if_index=epg.bvi.sw_if_index, + flags=flags, is_add=0) for recirc in recircs: - self.vapi.nat44_interface_add_del_feature( - sw_if_index=recirc.recirc.sw_if_index, - is_add=0) self.vapi.nat66_add_del_interface( - is_add=0, - sw_if_index=recirc.recirc.sw_if_index) + sw_if_index=recirc.recirc.sw_if_index, is_add=0) def wait_for_ep_timeout(self, sw_if_index=None, ip=None, mac=None, tep=None, n_tries=100, s_time=1): + # only learnt EP can timeout + ep_flags = VppEnum.vl_api_gbp_endpoint_flags_t + flags = ep_flags.GBP_API_ENDPOINT_FLAG_LEARNT while (n_tries): - if not find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep): + if not find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep, + flags=flags): return True n_tries = n_tries - 1 self.sleep(s_time) - self.assertFalse(find_gbp_endpoint(self, sw_if_index, ip, mac)) + self.assertFalse(find_gbp_endpoint(self, sw_if_index, ip, mac, tep=tep, + flags=flags)) return False def test_gbp_learn_l2(self): @@ -1622,13 +1583,13 @@ class TestGBP(VppTestCase): None, self.loop0, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_220.add_vpp_config() epg_330 = VppGbpEndpointGroup(self, 330, 113, rd1, gbd1, None, self.loop1, "10.0.1.128", "2001:11::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_330.add_vpp_config() # @@ -1651,7 +1612,7 @@ class TestGBP(VppTestCase): "2001:10::1", "3001::1") ep.add_vpp_config() - self.assertTrue(find_route(self, ep.ip4.address, 32, table_id=1)) + self.assertTrue(find_route(self, ep.ip4, 32, table_id=1)) # a packet with an sclass from an unknown EPG p = (Ether(src=self.pg2.remote_mac, @@ -1661,9 +1622,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=88, flags=0x88) / Ether(src=learnt[0]["mac"], dst=ep.mac) / - IP(src=learnt[0]["ip"], dst=ep.ip4.address) / + IP(src=learnt[0]["ip"], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg2, p) @@ -1698,9 +1659,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=112, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -1798,7 +1759,7 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=112, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -1841,9 +1802,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=112, flags=0x88, gpflags="D") / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -1866,9 +1827,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=112, flags=0xc8) / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -1882,9 +1843,9 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh l2fib bd_id 1")) for l in learnt: p = (Ether(src=ep.mac, dst=l['mac']) / - IP(dst=l['ip'], src=ep.ip4.address) / + IP(dst=l['ip'], src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 17, self.pg2) @@ -1918,9 +1879,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=113, flags=0x88, gpflags='A') / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -1933,9 +1894,9 @@ class TestGBP(VppTestCase): # only test 1 EP as the others could timeout # p = (Ether(src=ep.mac, dst=l['mac']) / - IP(dst=learnt[0]['ip'], src=ep.ip4.address) / + IP(dst=learnt[0]['ip'], src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg0, [p]) @@ -1951,9 +1912,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=113, flags=0x88, gpflags='A') / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -1964,12 +1925,14 @@ class TestGBP(VppTestCase): # # Add the contract so they can talk # - acl = VppGbpAcl(self) - rule = acl.create_rule(permit_deny=1, proto=17) - rule2 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule, rule2]) + rule = AclRule(is_permit=1, proto=17) + rule2 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule, rule2]) + acl.add_vpp_config() + c1 = VppGbpContract( - self, 401, epg_220.sclass, epg_330.sclass, acl_index, + self, 401, epg_220.sclass, epg_330.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -1983,9 +1946,9 @@ class TestGBP(VppTestCase): for l in learnt: p = (Ether(src=ep.mac, dst=l['mac']) / - IP(dst=l['ip'], src=ep.ip4.address) / + IP(dst=l['ip'], src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect(self.pg0, [p], self.pg2) @@ -1995,17 +1958,17 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh gbp bridge")) self.logger.info(self.vapi.cli("sh bridge-domain 1 detail")) p_uu = (Ether(src=ep.mac, dst="00:11:11:11:11:11") / - IP(dst="10.0.0.133", src=ep.ip4.address) / + IP(dst="10.0.0.133", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(ep.itf, [p_uu], gbd1.uu_fwd) self.logger.info(self.vapi.cli("sh bridge 1 detail")) p_bm = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") / - IP(dst="10.0.0.133", src=ep.ip4.address) / + IP(dst="10.0.0.133", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect_only(ep.itf, [p_bm], tun_bm.mcast_itf) for rx in rxs: @@ -2020,12 +1983,14 @@ class TestGBP(VppTestCase): self.assertFalse(rx[VXLAN].gpflags.A) self.assertFalse(rx[VXLAN].gpflags.D) - acl = VppGbpAcl(self) - rule = acl.create_rule(permit_deny=1, proto=17) - rule2 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule, rule2]) + rule = AclRule(is_permit=1, proto=17) + rule2 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule, rule2]) + acl.add_vpp_config() + c2 = VppGbpContract( - self, 401, epg_330.sclass, epg_220.sclass, acl_index, + self, 401, epg_330.sclass, epg_220.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -2052,9 +2017,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=113, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - IPv6(src=l['ip6'], dst=ep.ip6.address) / + IPv6(src=l['ip6'], dst=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -2084,9 +2049,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=113, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - IPv6(src=l['ip6'], dst=ep.ip6.address) / + IPv6(src=l['ip6'], dst=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * 1, self.pg0) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -2104,9 +2069,9 @@ class TestGBP(VppTestCase): # for l in learnt: p = (Ether(src=ep.mac, dst=l['mac']) / - IPv6(dst=l['ip6'], src=ep.ip6.address) / + IPv6(dst=l['ip6'], src=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2) @@ -2135,9 +2100,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=112, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - IPv6(src=l['ip6'], dst=ep.ip6.address) / + IPv6(src=l['ip6'], dst=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, p * 1, self.pg0) rx = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) @@ -2158,9 +2123,9 @@ class TestGBP(VppTestCase): for l in learnt: p = (Ether(src=ep.mac, dst=l['mac']) / - IPv6(dst=l['ip6'], src=ep.ip6.address) / + IPv6(dst=l['ip6'], src=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2) @@ -2260,19 +2225,23 @@ class TestGBP(VppTestCase): for epg in epgs: # IP config on the BVI interfaces if epg != epgs[1]: - VppIpInterfaceBind(self, epg.bvi, epg.rd.t4).add_vpp_config() - VppIpInterfaceBind(self, epg.bvi, epg.rd.t6).add_vpp_config() + b4 = VppIpInterfaceBind(self, epg.bvi, + epg.rd.t4).add_vpp_config() + b6 = VppIpInterfaceBind(self, epg.bvi, + epg.rd.t6).add_vpp_config() epg.bvi.set_mac(self.router_mac) - if_ip4 = VppIpInterfaceAddress(self, epg.bvi, epg.bvi_ip4, 32) - if_ip6 = VppIpInterfaceAddress(self, epg.bvi, epg.bvi_ip6, 128) - if_ip4.add_vpp_config() - if_ip6.add_vpp_config() + if_ip4 = VppIpInterfaceAddress(self, epg.bvi, + epg.bvi_ip4, 32, + bind=b4).add_vpp_config() + if_ip6 = VppIpInterfaceAddress(self, epg.bvi, + epg.bvi_ip6, 128, + bind=b6).add_vpp_config() # add the BD ARP termination entry for BVI IP epg.bd_arp_ip4 = VppBridgeDomainArpEntry(self, epg.bd.bd, str(self.router_mac), - epg.bvi_ip4.address) + epg.bvi_ip4) epg.bd_arp_ip4.add_vpp_config() # EPG in VPP @@ -2293,10 +2262,10 @@ class TestGBP(VppTestCase): # pkt_intra_epg_220_to_220 = (Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac) / - IP(src=eps[0].ip4.address, - dst=eps[1].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[1].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(self.pg0, pkt_intra_epg_220_to_220 * 65, @@ -2304,10 +2273,10 @@ class TestGBP(VppTestCase): pkt_intra_epg_220_to_220 = (Ether(src=self.pg0.remote_mac, dst=self.pg1.remote_mac) / - IPv6(src=eps[0].ip6.address, - dst=eps[1].ip6.address) / + IPv6(src=eps[0].ip6, + dst=eps[1].ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged6(self.pg0, pkt_intra_epg_220_to_220 * 65, @@ -2318,23 +2287,25 @@ class TestGBP(VppTestCase): # pkt_inter_epg_220_to_221 = (Ether(src=self.pg0.remote_mac, dst=self.pg2.remote_mac) / - IP(src=eps[0].ip4.address, - dst=eps[2].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[2].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg0, pkt_inter_epg_220_to_221) # # A uni-directional contract from EPG 220 -> 221 # - acl = VppGbpAcl(self) - rule = acl.create_rule(permit_deny=1, proto=17) - rule2 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - rule3 = acl.create_rule(permit_deny=1, proto=1) - acl_index = acl.add_vpp_config([rule, rule2, rule3]) + rule = AclRule(is_permit=1, proto=17) + rule2 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + rule3 = AclRule(is_permit=1, proto=1) + acl = VppAcl(self, rules=[rule, rule2, rule3]) + acl.add_vpp_config() + c1 = VppGbpContract( - self, 400, epgs[0].sclass, epgs[1].sclass, acl_index, + self, 400, epgs[0].sclass, epgs[1].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -2356,10 +2327,10 @@ class TestGBP(VppTestCase): pkt_inter_epg_220_to_222 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, - dst=eps[3].ip4.address) / + IP(src=eps[0].ip4, + dst=eps[3].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(eps[0].itf, pkt_inter_epg_220_to_222 * 65) @@ -2368,16 +2339,16 @@ class TestGBP(VppTestCase): # pkt_router_ping_220_to_221 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[0].ip4.address, - dst=epgs[1].bvi_ip4.address) / + IP(src=eps[0].ip4, + dst=epgs[1].bvi_ip4) / ICMP(type='echo-request')) self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0) pkt_router_ping_220_to_221 = (Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IPv6(src=eps[0].ip6.address, - dst=epgs[1].bvi_ip6.address) / + IPv6(src=eps[0].ip6, + dst=epgs[1].bvi_ip6) / ICMPv6EchoRequest()) self.send_and_expect(self.pg0, [pkt_router_ping_220_to_221], self.pg0) @@ -2386,7 +2357,7 @@ class TestGBP(VppTestCase): # contract for the return direction # c2 = VppGbpContract( - self, 400, epgs[1].sclass, epgs[0].sclass, acl_index, + self, 400, epgs[1].sclass, epgs[0].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -2403,29 +2374,29 @@ class TestGBP(VppTestCase): eps[2].itf) pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac, dst=self.pg0.remote_mac) / - IP(src=eps[2].ip4.address, - dst=eps[0].ip4.address) / + IP(src=eps[2].ip4, + dst=eps[0].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_bridged(eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf) pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac, dst=str(self.router_mac)) / - IP(src=eps[2].ip4.address, - dst=eps[0].ip4.address) / + IP(src=eps[2].ip4, + dst=eps[0].ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_routed(eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf, str(self.router_mac)) pkt_inter_epg_221_to_220 = (Ether(src=self.pg2.remote_mac, dst=str(self.router_mac)) / - IPv6(src=eps[2].ip6.address, - dst=eps[0].ip6.address) / + IPv6(src=eps[2].ip6, + dst=eps[0].ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect_routed6(eps[2].itf, pkt_inter_epg_221_to_220 * 65, eps[0].itf, @@ -2435,7 +2406,7 @@ class TestGBP(VppTestCase): # contract between 220 and 222 uni-direction # c3 = VppGbpContract( - self, 400, epgs[0].sclass, epgs[2].sclass, acl_index, + self, 400, epgs[0].sclass, epgs[2].sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -2485,8 +2456,8 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh gbp bridge")) # ... and has a /32 applied - ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip_addr.add_vpp_config() + ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32).add_vpp_config() # # The Endpoint-group @@ -2495,7 +2466,7 @@ class TestGBP(VppTestCase): None, self.loop0, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(3)) epg_220.add_vpp_config() ep = VppGbpEndpoint(self, self.pg0, @@ -2511,15 +2482,15 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh bridge 1 detail")) self.logger.info(self.vapi.cli("sh gbp bridge")) p_uu = (Ether(src=ep.mac, dst="00:11:11:11:11:11") / - IP(dst="10.0.0.133", src=ep.ip4.address) / + IP(dst="10.0.0.133", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(ep.itf, [p_uu]) p_bm = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") / - IP(dst="10.0.0.133", src=ep.ip4.address) / + IP(dst="10.0.0.133", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(ep.itf, [p_bm]) self.pg3.unconfig_ip4() @@ -2566,8 +2537,8 @@ class TestGBP(VppTestCase): gbd1.add_vpp_config() # ... and has a /32 applied - ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip_addr.add_vpp_config() + ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32).add_vpp_config() # # The Endpoint-group @@ -2592,7 +2563,7 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh gbp bridge")) p_arp = (Ether(src=ep.mac, dst="ff:ff:ff:ff:ff:ff") / ARP(op="who-has", - psrc=ep.ip4.address, pdst="10.0.0.99", + psrc=ep.ip4, pdst="10.0.0.99", hwsrc=ep.mac, hwdst="ff:ff:ff:ff:ff:ff")) self.send_and_expect(ep.itf, [p_arp], self.pg4) @@ -2659,8 +2630,8 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh gbp bridge")) # ... and has a /32 applied - ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip_addr.add_vpp_config() + ip_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32).add_vpp_config() # # The Endpoint-group in which we are learning endpoints @@ -2669,7 +2640,7 @@ class TestGBP(VppTestCase): None, self.loop0, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_220.add_vpp_config() # @@ -2692,7 +2663,7 @@ class TestGBP(VppTestCase): "2001:10::1", "3001::1") ep.add_vpp_config() - self.assertTrue(find_route(self, ep.ip4.address, 32, table_id=1)) + self.assertTrue(find_route(self, ep.ip4, 32, table_id=1)) # # Send to the static EP @@ -2707,9 +2678,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=99, gpid=441, flags=0x88) / Ether(src=l['mac'], dst=ep.mac) / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg2, [p], self.pg0) @@ -2742,9 +2713,9 @@ class TestGBP(VppTestCase): for l in learnt: p = (Ether(src=ep.mac, dst=l['mac']) / Dot1Q(vlan=11) / - IP(dst=l['ip'], src=ep.ip4.address) / + IP(dst=l['ip'], src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 17, self.pg3) @@ -2802,8 +2773,8 @@ class TestGBP(VppTestCase): # # Bind the BVI to the RD # - VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() + b4 = VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() + b6 = VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() # # Pg2 hosts the vxlan tunnel @@ -2833,10 +2804,12 @@ class TestGBP(VppTestCase): self.logger.info(self.vapi.cli("sh gbp route")) # ... and has a /32 and /128 applied - ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip4_addr.add_vpp_config() - ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128", 128) - ip6_addr.add_vpp_config() + ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32, + bind=b4).add_vpp_config() + ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "2001:10::128", 128, + bind=b6).add_vpp_config() # # The Endpoint-group in which we are learning endpoints @@ -2845,7 +2818,7 @@ class TestGBP(VppTestCase): None, self.loop0, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_220.add_vpp_config() # @@ -2880,9 +2853,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=101, gpid=441, flags=0x88) / Ether(src=l['mac'], dst="00:00:00:11:11:11") / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -2904,9 +2877,9 @@ class TestGBP(VppTestCase): # for l in learnt: p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst=l['ip'], src=ep.ip4.address) / + IP(dst=l['ip'], src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg2) @@ -2926,7 +2899,7 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, routed_dst_mac) - self.assertEqual(inner[IP].src, ep.ip4.address) + self.assertEqual(inner[IP].src, ep.ip4) self.assertEqual(inner[IP].dst, l['ip']) for l in learnt: @@ -2947,9 +2920,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=101, gpid=441, flags=0x88) / Ether(src=l['mac'], dst="00:00:00:11:11:11") / - IPv6(src=l['ip6'], dst=ep.ip6.address) / + IPv6(src=l['ip6'], dst=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -2977,9 +2950,9 @@ class TestGBP(VppTestCase): # for l in learnt: p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IPv6(dst=l['ip6'], src=ep.ip6.address) / + IPv6(dst=l['ip6'], src=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2) @@ -2999,7 +2972,7 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, routed_dst_mac) - self.assertEqual(inner[IPv6].src, ep.ip6.address) + self.assertEqual(inner[IPv6].src, ep.ip6) self.assertEqual(inner[IPv6].dst, l['ip6']) self.logger.info(self.vapi.cli("sh gbp endpoint")) @@ -3010,9 +2983,9 @@ class TestGBP(VppTestCase): # Static sends to unknown EP with no route # p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst="10.0.0.99", src=ep.ip4.address) / + IP(dst="10.0.0.99", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_assert_no_replies(self.pg0, [p]) @@ -3028,16 +3001,16 @@ class TestGBP(VppTestCase): # static pings router # p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst=epg_220.bvi_ip4.address, src=ep.ip4.address) / + IP(dst=epg_220.bvi_ip4, src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0) p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IPv6(dst=epg_220.bvi_ip6.address, src=ep.ip6.address) / + IPv6(dst=epg_220.bvi_ip6, src=ep.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg0) @@ -3045,9 +3018,9 @@ class TestGBP(VppTestCase): # packets to address in the subnet are sent on the uu-fwd # p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst="10.0.0.99", src=ep.ip4.address) / + IP(dst="10.0.0.99", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, [p], self.pg4) for rx in rxs: @@ -3076,9 +3049,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=101, gpid=441, flags=0x88) / Ether(src=l['mac'], dst="00:00:00:11:11:11") / - IP(src=l['ip'], dst=ep.ip4.address) / + IP(src=l['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -3137,9 +3110,9 @@ class TestGBP(VppTestCase): ips = ["10.0.0.88", learnt[0]['ip']] for ip in ips: p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst=ip, src=ep.ip4.address) / + IP(dst=ip, src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2) @@ -3159,7 +3132,7 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, routed_dst_mac) - self.assertEqual(inner[IP].src, ep.ip4.address) + self.assertEqual(inner[IP].src, ep.ip4) self.assertEqual(inner[IP].dst, ip) # @@ -3169,20 +3142,20 @@ class TestGBP(VppTestCase): rep_88.remove_vpp_config() rep_2.remove_vpp_config() - self.assertTrue(find_gbp_endpoint(self, ip=rep_2.ip4.address)) + self.assertTrue(find_gbp_endpoint(self, ip=rep_2.ip4)) p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(src=ep.ip4.address, dst=rep_2.ip4.address) / + IP(src=ep.ip4, dst=rep_2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, [p], self.pg2) - self.assertFalse(find_gbp_endpoint(self, ip=rep_88.ip4.address)) + self.assertFalse(find_gbp_endpoint(self, ip=rep_88.ip4)) p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(src=ep.ip4.address, dst=rep_88.ip4.address) / + IP(src=ep.ip4, dst=rep_88.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, [p], self.pg4) # @@ -3190,8 +3163,8 @@ class TestGBP(VppTestCase): # present (because it's DP learnt) when the TC ends so wait until # it is removed # - self.wait_for_ep_timeout(ip=rep_88.ip4.address) - self.wait_for_ep_timeout(ip=rep_2.ip4.address) + self.wait_for_ep_timeout(ip=rep_88.ip4) + self.wait_for_ep_timeout(ip=rep_2.ip4) # # Same as above, learn a remote EP via CP and DP @@ -3214,21 +3187,21 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=101, gpid=441, flags=0x88) / Ether(src=l['mac'], dst="00:00:00:11:11:11") / - IP(src="10.0.1.4", dst=ep.ip4.address) / + IP(src="10.0.1.4", dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg2, p * NUM_PKTS, self.pg0) self.assertTrue(find_gbp_endpoint(self, vx_tun_l3._sw_if_index, - ip=rep_3.ip4.address, + ip=rep_3.ip4, tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4])) p = (Ether(src=ep.mac, dst=self.loop0.local_mac) / - IP(dst="10.0.1.4", src=ep.ip4.address) / + IP(dst="10.0.1.4", src=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * NUM_PKTS, self.pg2) # host 2 is the DP learned TEP @@ -3236,7 +3209,7 @@ class TestGBP(VppTestCase): self.assertEqual(rx[IP].src, self.pg2.local_ip4) self.assertEqual(rx[IP].dst, self.pg2.remote_hosts[2].ip4) - self.wait_for_ep_timeout(ip=rep_3.ip4.address, + self.wait_for_ep_timeout(ip=rep_3.ip4, tep=[self.pg2.local_ip4, self.pg2.remote_hosts[2].ip4]) @@ -3257,9 +3230,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=101, gpid=441, flags=0x88) / Ether(src=l['mac'], dst="00:00:00:11:11:11") / - IP(src=learnt[1]['ip'], dst=ep.ip4.address) / + IP(src=learnt[1]['ip'], dst=ep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rx = self.send_and_expect(self.pg2, [p], self.pg0) @@ -3308,8 +3281,8 @@ class TestGBP(VppTestCase): # # Bind the BVI to the RD # - VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() + b_ip4 = VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() + b_ip6 = VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() # # Pg7 hosts a BD's UU-fwd @@ -3331,14 +3304,16 @@ class TestGBP(VppTestCase): gbd2.add_vpp_config() # ... and has a /32 and /128 applied - ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip4_addr.add_vpp_config() - ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128", 128) - ip6_addr.add_vpp_config() - ip4_addr = VppIpInterfaceAddress(self, gbd2.bvi, "10.0.1.128", 32) - ip4_addr.add_vpp_config() - ip6_addr = VppIpInterfaceAddress(self, gbd2.bvi, "2001:11::128", 128) - ip6_addr.add_vpp_config() + ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32, + bind=b_ip4).add_vpp_config() + ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "2001:10::128", 128, + bind=b_ip6).add_vpp_config() + ip4_addr = VppIpInterfaceAddress(self, gbd2.bvi, + "10.0.1.128", 32).add_vpp_config() + ip6_addr = VppIpInterfaceAddress(self, gbd2.bvi, + "2001:11::128", 128).add_vpp_config() # # The Endpoint-groups in which we are learning endpoints @@ -3347,19 +3322,19 @@ class TestGBP(VppTestCase): None, gbd1.bvi, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_220.add_vpp_config() epg_221 = VppGbpEndpointGroup(self, 221, 441, rd1, gbd2, None, gbd2.bvi, "10.0.1.128", "2001:11::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_221.add_vpp_config() epg_222 = VppGbpEndpointGroup(self, 222, 442, rd1, gbd1, None, gbd1.bvi, "10.0.2.128", "2001:12::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_222.add_vpp_config() # @@ -3390,13 +3365,13 @@ class TestGBP(VppTestCase): None, gbd1.bvi, "12.0.0.128", "4001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_320.add_vpp_config() epg_321 = VppGbpEndpointGroup(self, 321, 551, rd1, gbd4, None, gbd2.bvi, "12.0.1.128", "4001:11::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_321.add_vpp_config() # @@ -3447,21 +3422,21 @@ class TestGBP(VppTestCase): # different dest ports on each so the are LB hashed differently # p4 = [(Ether(src=ep1.mac, dst=ep3.mac) / - IP(src=ep1.ip4.address, dst=ep3.ip4.address) / + IP(src=ep1.ip4, dst=ep3.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep3.mac, dst=ep1.mac) / - IP(src=ep3.ip4.address, dst=ep1.ip4.address) / + IP(src=ep3.ip4, dst=ep1.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] p6 = [(Ether(src=ep1.mac, dst=ep3.mac) / - IPv6(src=ep1.ip6.address, dst=ep3.ip6.address) / + IPv6(src=ep1.ip6, dst=ep3.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep3.mac, dst=ep1.mac) / - IPv6(src=ep3.ip6.address, dst=ep1.ip6.address) / + IPv6(src=ep3.ip6, dst=ep1.ip6) / UDP(sport=1234, dport=1230) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] # should be dropped since no contract yet self.send_and_assert_no_replies(self.pg0, [p4[0]]) @@ -3471,16 +3446,17 @@ class TestGBP(VppTestCase): # Add a contract with a rule to load-balance redirect via SEP1 and SEP2 # one of the next-hops is via an EP that is not known # - acl = VppGbpAcl(self) - rule4 = acl.create_rule(permit_deny=1, proto=17) - rule6 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule4, rule6]) + rule4 = AclRule(is_permit=1, proto=17) + rule6 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule4, rule6]) + acl.add_vpp_config() # # test the src-ip hash mode # c1 = VppGbpContract( - self, 402, epg_220.sclass, epg_222.sclass, acl_index, + self, 402, epg_220.sclass, epg_222.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -3499,7 +3475,7 @@ class TestGBP(VppTestCase): c1.add_vpp_config() c2 = VppGbpContract( - self, 402, epg_222.sclass, epg_220.sclass, acl_index, + self, 402, epg_222.sclass, epg_220.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -3526,16 +3502,16 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep3.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep3.ip4) rxs = self.send_and_expect(self.pg2, p4[1] * 17, sep2.itf) for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep2.mac) - self.assertEqual(rx[IP].src, ep3.ip4.address) - self.assertEqual(rx[IP].dst, ep1.ip4.address) + self.assertEqual(rx[IP].src, ep3.ip4) + self.assertEqual(rx[IP].dst, ep1.ip4) rxs = self.send_and_expect(self.pg0, p6[0] * 17, self.pg7) @@ -3555,16 +3531,16 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep4.mac) - self.assertEqual(inner[IPv6].src, ep1.ip6.address) - self.assertEqual(inner[IPv6].dst, ep3.ip6.address) + self.assertEqual(inner[IPv6].src, ep1.ip6) + self.assertEqual(inner[IPv6].dst, ep3.ip6) rxs = self.send_and_expect(self.pg2, p6[1] * 17, sep3.itf) for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep3.mac) - self.assertEqual(rx[IPv6].src, ep3.ip6.address) - self.assertEqual(rx[IPv6].dst, ep1.ip6.address) + self.assertEqual(rx[IPv6].src, ep3.ip6) + self.assertEqual(rx[IPv6].dst, ep1.ip6) # # programme the unknown EP @@ -3576,8 +3552,8 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep4.mac) - self.assertEqual(rx[IPv6].src, ep1.ip6.address) - self.assertEqual(rx[IPv6].dst, ep3.ip6.address) + self.assertEqual(rx[IPv6].src, ep1.ip6) + self.assertEqual(rx[IPv6].dst, ep3.ip6) # # and revert back to unprogrammed @@ -3602,8 +3578,8 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep4.mac) - self.assertEqual(inner[IPv6].src, ep1.ip6.address) - self.assertEqual(inner[IPv6].dst, ep3.ip6.address) + self.assertEqual(inner[IPv6].src, ep1.ip6) + self.assertEqual(inner[IPv6].dst, ep3.ip6) c1.remove_vpp_config() c2.remove_vpp_config() @@ -3612,7 +3588,7 @@ class TestGBP(VppTestCase): # test the symmetric hash mode # c1 = VppGbpContract( - self, 402, epg_220.sclass, epg_222.sclass, acl_index, + self, 402, epg_220.sclass, epg_222.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC, @@ -3631,7 +3607,7 @@ class TestGBP(VppTestCase): c1.add_vpp_config() c2 = VppGbpContract( - self, 402, epg_222.sclass, epg_220.sclass, acl_index, + self, 402, epg_222.sclass, epg_220.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC, @@ -3658,16 +3634,16 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep3.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep3.ip4) rxs = self.send_and_expect(self.pg2, p4[1] * 17, sep1.itf) for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep3.ip4.address) - self.assertEqual(rx[IP].dst, ep1.ip4.address) + self.assertEqual(rx[IP].src, ep3.ip4) + self.assertEqual(rx[IP].dst, ep1.ip4) # # programme the unknown EP for the L3 tests @@ -3679,24 +3655,24 @@ class TestGBP(VppTestCase): # different dest ports on each so the are LB hashed differently # p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IP(src=ep1.ip4.address, dst=ep2.ip4.address) / + IP(src=ep1.ip4, dst=ep2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep2.mac, dst=str(self.router_mac)) / - IP(src=ep2.ip4.address, dst=ep1.ip4.address) / + IP(src=ep2.ip4, dst=ep1.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IPv6(src=ep1.ip6.address, dst=ep2.ip6.address) / + IPv6(src=ep1.ip6, dst=ep2.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep2.mac, dst=str(self.router_mac)) / - IPv6(src=ep2.ip6.address, dst=ep1.ip6.address) / + IPv6(src=ep2.ip6, dst=ep1.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] c3 = VppGbpContract( - self, 402, epg_220.sclass, epg_221.sclass, acl_index, + self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC, @@ -3719,8 +3695,8 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep2.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep2.ip4) # # learn a remote EP in EPG 221 @@ -3733,7 +3709,7 @@ class TestGBP(VppTestCase): vx_tun_l3.add_vpp_config() c4 = VppGbpContract( - self, 402, epg_221.sclass, epg_220.sclass, acl_index, + self, 402, epg_221.sclass, epg_220.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -3758,9 +3734,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=444, gpid=441, flags=0x88) / Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) / - IP(src="10.0.0.88", dst=ep1.ip4.address) / + IP(src="10.0.0.88", dst=ep1.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) # unknown remote EP to local EP redirected rxs = self.send_and_expect(self.pg7, [p], sep1.itf) @@ -3769,7 +3745,7 @@ class TestGBP(VppTestCase): self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) self.assertEqual(rx[IP].src, "10.0.0.88") - self.assertEqual(rx[IP].dst, ep1.ip4.address) + self.assertEqual(rx[IP].dst, ep1.ip4) # endpoint learnt via the parent GBP-vxlan interface self.assertTrue(find_gbp_endpoint(self, @@ -3783,9 +3759,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=444, gpid=441, flags=0x88) / Ether(src="00:22:22:22:22:33", dst=str(self.router_mac)) / - IPv6(src="2001:10::88", dst=ep1.ip6.address) / + IPv6(src="2001:10::88", dst=ep1.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) # unknown remote EP to local EP redirected (ipv6) rxs = self.send_and_expect(self.pg7, [p], sep3.itf) @@ -3794,7 +3770,7 @@ class TestGBP(VppTestCase): self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep3.mac) self.assertEqual(rx[IPv6].src, "2001:10::88") - self.assertEqual(rx[IPv6].dst, ep1.ip6.address) + self.assertEqual(rx[IPv6].dst, ep1.ip6) # endpoint learnt via the parent GBP-vxlan interface self.assertTrue(find_gbp_endpoint(self, @@ -3805,20 +3781,20 @@ class TestGBP(VppTestCase): # L3 switch from local to remote EP # p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IP(src=ep1.ip4.address, dst="10.0.0.88") / + IP(src=ep1.ip4, dst="10.0.0.88") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IPv6(src=ep1.ip6.address, dst="2001:10::88") / + IPv6(src=ep1.ip6, dst="2001:10::88") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] rxs = self.send_and_expect(self.pg0, p4[0] * 17, sep1.itf) for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) self.assertEqual(rx[IP].dst, "10.0.0.88") rxs = self.send_and_expect(self.pg0, p6[0] * 17, sep4.itf) @@ -3826,14 +3802,14 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep4.mac) - self.assertEqual(rx[IPv6].src, ep1.ip6.address) + self.assertEqual(rx[IPv6].src, ep1.ip6) self.assertEqual(rx[IPv6].dst, "2001:10::88") # # test the dst-ip hash mode # c5 = VppGbpContract( - self, 402, epg_220.sclass, epg_221.sclass, acl_index, + self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP, @@ -3856,7 +3832,7 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) self.assertEqual(rx[IP].dst, "10.0.0.88") rxs = self.send_and_expect(self.pg0, p6[0] * 17, sep3.itf) @@ -3864,7 +3840,7 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep3.mac) - self.assertEqual(rx[IPv6].src, ep1.ip6.address) + self.assertEqual(rx[IPv6].src, ep1.ip6) self.assertEqual(rx[IPv6].dst, "2001:10::88") # @@ -3896,8 +3872,8 @@ class TestGBP(VppTestCase): # add local l3out # the external bd self.loop4.set_mac(self.router_mac) - VppIpInterfaceBind(self, self.loop4, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop4, t6).add_vpp_config() + b_lo4_ip4 = VppIpInterfaceBind(self, self.loop4, t4).add_vpp_config() + b_lo4_ip6 = VppIpInterfaceBind(self, self.loop4, t6).add_vpp_config() ebd = VppBridgeDomain(self, 100) ebd.add_vpp_config() gebd = VppGbpBridgeDomain(self, ebd, rd1, self.loop4, None, None) @@ -3907,19 +3883,19 @@ class TestGBP(VppTestCase): None, gebd.bvi, "10.1.0.128", "2001:10:1::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) eepg.add_vpp_config() # add subnets to BVI VppIpInterfaceAddress( self, gebd.bvi, "10.1.0.128", - 24).add_vpp_config() + 24, bind=b_lo4_ip4).add_vpp_config() VppIpInterfaceAddress( self, gebd.bvi, "2001:10:1::128", - 64).add_vpp_config() + 64, bind=b_lo4_ip6).add_vpp_config() # ... which are L3-out subnets VppGbpSubnet(self, rd1, "10.1.0.0", 24, VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT, @@ -3941,25 +3917,25 @@ class TestGBP(VppTestCase): # external subnets reachable though eep1 and eep2 respectively VppIpRoute(self, "10.220.0.0", 24, - [VppRoutePath(eep1.ip4.address, eep1.epg.bvi.sw_if_index)], + [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index)], table_id=t4.table_id).add_vpp_config() VppGbpSubnet(self, rd1, "10.220.0.0", 24, VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT, sclass=4220).add_vpp_config() VppIpRoute(self, "10:220::", 64, - [VppRoutePath(eep1.ip6.address, eep1.epg.bvi.sw_if_index)], + [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index)], table_id=t6.table_id).add_vpp_config() VppGbpSubnet(self, rd1, "10:220::", 64, VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT, sclass=4220).add_vpp_config() VppIpRoute(self, "10.221.0.0", 24, - [VppRoutePath(eep2.ip4.address, eep2.epg.bvi.sw_if_index)], + [VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)], table_id=t4.table_id).add_vpp_config() VppGbpSubnet(self, rd1, "10.221.0.0", 24, VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT, sclass=4221).add_vpp_config() VppIpRoute(self, "10:221::", 64, - [VppRoutePath(eep2.ip6.address, eep2.epg.bvi.sw_if_index)], + [VppRoutePath(eep2.ip6, eep2.epg.bvi.sw_if_index)], table_id=t6.table_id).add_vpp_config() VppGbpSubnet(self, rd1, "10:221::", 64, VppEnum.vl_api_gbp_subnet_type_t.GBP_API_SUBNET_L3_OUT, @@ -3974,19 +3950,19 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.17", dst="10.221.0.65") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=eep1.mac, dst=self.router_mac) / Dot1Q(vlan=100) / IPv6(src="10:220::17", dst="10:221::65") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] # packets should be dropped in absence of contract self.send_and_assert_no_replies(self.pg0, p) # contract redirecting to sep5 VppGbpContract( - self, 402, 4220, 4221, acl_index, + self, 402, 4220, 4221, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP, @@ -4050,7 +4026,7 @@ class TestGBP(VppTestCase): # change the contract between l3out to redirect to local SEPs # instead of remote SEP VppGbpContract( - self, 402, 4220, 4221, acl_index, + self, 402, 4220, 4221, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP, @@ -4081,7 +4057,7 @@ class TestGBP(VppTestCase): # contract to redirect to learnt SEP VppGbpContract( - self, 402, epg_221.sclass, epg_222.sclass, acl_index, + self, 402, epg_221.sclass, epg_222.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_DST_IP, @@ -4102,13 +4078,13 @@ class TestGBP(VppTestCase): VXLAN(vni=444, gpid=441, flags=0x88) / Ether(src="00:22:22:22:22:44", dst=str(self.router_mac))) p = [(base / - IP(src="10.0.1.100", dst=ep3.ip4.address) / + IP(src="10.0.1.100", dst=ep3.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (base / - IPv6(src="2001:10::100", dst=ep3.ip6.address) / + IPv6(src="2001:10::100", dst=ep3.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] # unknown remote EP to local EP redirected to known remote SEP rxs = self.send_and_expect(self.pg7, p, self.pg7) @@ -4226,12 +4202,12 @@ class TestGBP(VppTestCase): # # Bind the BVI to the RD # - VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() - VppIpInterfaceBind(self, self.loop1, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop1, t6).add_vpp_config() - VppIpInterfaceBind(self, self.loop2, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop2, t6).add_vpp_config() + b_lo0_ip4 = VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() + b_lo0_ip6 = VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() + b_lo1_ip4 = VppIpInterfaceBind(self, self.loop1, t4).add_vpp_config() + b_lo1_ip6 = VppIpInterfaceBind(self, self.loop1, t6).add_vpp_config() + b_lo2_ip4 = VppIpInterfaceBind(self, self.loop2, t4).add_vpp_config() + b_lo2_ip6 = VppIpInterfaceBind(self, self.loop2, t6).add_vpp_config() # # Pg7 hosts a BD's UU-fwd @@ -4253,14 +4229,18 @@ class TestGBP(VppTestCase): gbd2.add_vpp_config() # ... and has a /32 and /128 applied - ip4_addr1 = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 32) - ip4_addr1.add_vpp_config() - ip6_addr1 = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128", 128) - ip6_addr1.add_vpp_config() - ip4_addr2 = VppIpInterfaceAddress(self, gbd2.bvi, "10.0.1.128", 32) - ip4_addr2.add_vpp_config() - ip6_addr2 = VppIpInterfaceAddress(self, gbd2.bvi, "2001:11::128", 128) - ip6_addr2.add_vpp_config() + ip4_addr1 = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 32, + bind=b_lo0_ip4).add_vpp_config() + ip6_addr1 = VppIpInterfaceAddress(self, gbd1.bvi, + "2001:10::128", 128, + bind=b_lo0_ip6).add_vpp_config() + ip4_addr2 = VppIpInterfaceAddress(self, gbd2.bvi, + "10.0.1.128", 32, + bind=b_lo1_ip4).add_vpp_config() + ip6_addr2 = VppIpInterfaceAddress(self, gbd2.bvi, + "2001:11::128", 128, + bind=b_lo1_ip6).add_vpp_config() # # The Endpoint-groups @@ -4269,13 +4249,13 @@ class TestGBP(VppTestCase): None, gbd1.bvi, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_220.add_vpp_config() epg_221 = VppGbpEndpointGroup(self, 221, 441, rd1, gbd2, None, gbd2.bvi, "10.0.1.128", "2001:11::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_221.add_vpp_config() # @@ -4291,10 +4271,12 @@ class TestGBP(VppTestCase): bd_uu3, learn=False) gbd3.add_vpp_config() - ip4_addr3 = VppIpInterfaceAddress(self, gbd3.bvi, "12.0.0.128", 32) - ip4_addr3.add_vpp_config() - ip6_addr3 = VppIpInterfaceAddress(self, gbd3.bvi, "4001:10::128", 128) - ip6_addr3.add_vpp_config() + ip4_addr3 = VppIpInterfaceAddress(self, gbd3.bvi, + "12.0.0.128", 32, + bind=b_lo2_ip4).add_vpp_config() + ip6_addr3 = VppIpInterfaceAddress(self, gbd3.bvi, + "4001:10::128", 128, + bind=b_lo2_ip6).add_vpp_config() # # self.logger.info(self.vapi.cli("show gbp bridge")) @@ -4310,7 +4292,7 @@ class TestGBP(VppTestCase): None, gbd3.bvi, "12.0.0.128", "4001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(60)) epg_320.add_vpp_config() # @@ -4358,21 +4340,21 @@ class TestGBP(VppTestCase): # one node and service endpoint in another node) # p4 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IP(src=ep1.ip4.address, dst=ep2.ip4.address) / + IP(src=ep1.ip4, dst=ep2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep2.mac, dst=str(self.router_mac)) / - IP(src=ep2.ip4.address, dst=ep1.ip4.address) / + IP(src=ep2.ip4, dst=ep1.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] p6 = [(Ether(src=ep1.mac, dst=str(self.router_mac)) / - IPv6(src=ep1.ip6.address, dst=ep2.ip6.address) / + IPv6(src=ep1.ip6, dst=ep2.ip6) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=ep2.mac, dst=str(self.router_mac)) / - IPv6(src=ep2.ip6.address, dst=ep1.ip6.address) / + IPv6(src=ep2.ip6, dst=ep1.ip6) / UDP(sport=1234, dport=1230) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] # should be dropped since no contract yet self.send_and_assert_no_replies(self.pg0, [p4[0]]) @@ -4382,16 +4364,17 @@ class TestGBP(VppTestCase): # Add a contract with a rule to load-balance redirect via SEP1 and SEP2 # one of the next-hops is via an EP that is not known # - acl = VppGbpAcl(self) - rule4 = acl.create_rule(permit_deny=1, proto=17) - rule6 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule4, rule6]) + rule4 = AclRule(is_permit=1, proto=17) + rule6 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule4, rule6]) + acl.add_vpp_config() # # test the src-ip hash mode # c1 = VppGbpContract( - self, 402, epg_220.sclass, epg_221.sclass, acl_index, + self, 402, epg_220.sclass, epg_221.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC, @@ -4406,7 +4389,7 @@ class TestGBP(VppTestCase): c1.add_vpp_config() c2 = VppGbpContract( - self, 402, epg_221.sclass, epg_220.sclass, acl_index, + self, 402, epg_221.sclass, epg_220.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_REDIRECT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC, @@ -4442,8 +4425,8 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep1.mac) - self.assertEqual(inner[IP].src, ep1.ip4.address) - self.assertEqual(inner[IP].dst, ep2.ip4.address) + self.assertEqual(inner[IP].src, ep1.ip4) + self.assertEqual(inner[IP].dst, ep2.ip4) rxs = self.send_and_expect(self.pg1, p4[1] * 17, self.pg7) @@ -4463,8 +4446,8 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep1.mac) - self.assertEqual(inner[IP].src, ep2.ip4.address) - self.assertEqual(inner[IP].dst, ep1.ip4.address) + self.assertEqual(inner[IP].src, ep2.ip4) + self.assertEqual(inner[IP].dst, ep1.ip4) rxs = self.send_and_expect(self.pg0, p6[0] * 17, self.pg7) @@ -4481,8 +4464,8 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep1.mac) - self.assertEqual(inner[IPv6].src, ep1.ip6.address) - self.assertEqual(inner[IPv6].dst, ep2.ip6.address) + self.assertEqual(inner[IPv6].src, ep1.ip6) + self.assertEqual(inner[IPv6].dst, ep2.ip6) rxs = self.send_and_expect(self.pg1, p6[1] * 17, self.pg7) @@ -4502,8 +4485,8 @@ class TestGBP(VppTestCase): self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, sep1.mac) - self.assertEqual(inner[IPv6].src, ep2.ip6.address) - self.assertEqual(inner[IPv6].dst, ep1.ip6.address) + self.assertEqual(inner[IPv6].src, ep2.ip6) + self.assertEqual(inner[IPv6].dst, ep1.ip6) # configure sep1: it is now local # packets between ep1 and ep2 are redirected locally @@ -4514,16 +4497,16 @@ class TestGBP(VppTestCase): for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep2.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep2.ip4) rxs = self.send_and_expect(self.pg1, p6[1] * 17, sep1.itf) for rx in rxs: self.assertEqual(rx[Ether].src, routed_src_mac) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IPv6].src, ep2.ip6.address) - self.assertEqual(rx[IPv6].dst, ep1.ip6.address) + self.assertEqual(rx[IPv6].src, ep2.ip6) + self.assertEqual(rx[IPv6].dst, ep1.ip6) # packet coming from the l2 spine-proxy to sep1 p = (Ether(src=self.pg7.remote_mac, @@ -4533,21 +4516,21 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=116, gpid=440, gpflags=0x08, flags=0x88) / Ether(src=str(self.router_mac), dst=sep1.mac) / - IP(src=ep1.ip4.address, dst=ep2.ip4.address) / + IP(src=ep1.ip4, dst=ep2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, [p] * 17, sep1.itf) for rx in rxs: self.assertEqual(rx[Ether].src, str(self.router_mac)) self.assertEqual(rx[Ether].dst, sep1.mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep2.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep2.ip4) # contract for SEP to communicate with dst EP c3 = VppGbpContract( - self, 402, epg_320.sclass, epg_221.sclass, acl_index, + self, 402, epg_320.sclass, epg_221.sclass, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SYMMETRIC), @@ -4565,9 +4548,9 @@ class TestGBP(VppTestCase): # the rd UU (packet is routed) p1 = (Ether(src=sep1.mac, dst=self.router_mac) / - IP(src=ep1.ip4.address, dst=ep2.ip4.address) / + IP(src=ep1.ip4, dst=ep2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg3, [p1] * 17, self.pg7) @@ -4583,8 +4566,8 @@ class TestGBP(VppTestCase): inner = rx[VXLAN].payload self.assertEqual(inner[Ether].src, routed_src_mac) self.assertEqual(inner[Ether].dst, routed_dst_mac) - self.assertEqual(inner[IP].src, ep1.ip4.address) - self.assertEqual(inner[IP].dst, ep2.ip4.address) + self.assertEqual(inner[IP].src, ep1.ip4) + self.assertEqual(inner[IP].dst, ep2.ip4) self.logger.info(self.vapi.cli("show bridge 3 detail")) sep1.remove_vpp_config() @@ -4603,17 +4586,17 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=114, gpid=441, gpflags=0x09, flags=0x88) / Ether(src=str(self.router_mac), dst=self.router_mac) / - IP(src=ep1.ip4.address, dst=ep2.ip4.address) / + IP(src=ep1.ip4, dst=ep2.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, [p2], self.pg1) for rx in rxs: self.assertEqual(rx[Ether].src, str(self.router_mac)) self.assertEqual(rx[Ether].dst, self.pg1.remote_mac) - self.assertEqual(rx[IP].src, ep1.ip4.address) - self.assertEqual(rx[IP].dst, ep2.ip4.address) + self.assertEqual(rx[IP].src, ep1.ip4) + self.assertEqual(rx[IP].dst, ep2.ip4) # # bd_uu2.add_vpp_config() @@ -4652,8 +4635,8 @@ class TestGBP(VppTestCase): # # Bind the BVI to the RD # - VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() + b_ip4 = VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() + b_ip6 = VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() # # Pg7 hosts a BD's BUM @@ -4685,14 +4668,14 @@ class TestGBP(VppTestCase): None, gbd1.bvi, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_220.add_vpp_config() # the BVIs have the subnets applied ... - ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 24) - ip4_addr.add_vpp_config() - ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128", 64) - ip6_addr.add_vpp_config() + ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", + 24, bind=b_ip4).add_vpp_config() + ip6_addr = VppIpInterfaceAddress(self, gbd1.bvi, "2001:10::128", + 64, bind=b_ip6).add_vpp_config() # ... which are L3-out subnets l3o_1 = VppGbpSubnet( @@ -4771,7 +4754,7 @@ class TestGBP(VppTestCase): p_arp = (Ether(src=eep1.mac, dst="ff:ff:ff:ff:ff:ff") / Dot1Q(vlan=100) / ARP(op="who-has", - psrc=eep1.ip4.address, pdst="10.0.0.128", + psrc=eep1.ip4, pdst="10.0.0.128", hwsrc=eep1.mac, hwdst="ff:ff:ff:ff:ff:ff")) rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0) @@ -4781,7 +4764,7 @@ class TestGBP(VppTestCase): p_arp = (Ether(src=eep3.mac, dst="ff:ff:ff:ff:ff:ff") / Dot1Q(vlan=102) / ARP(op="who-has", - psrc=eep3.ip4.address, pdst="10.0.0.128", + psrc=eep3.ip4, pdst="10.0.0.128", hwsrc=eep3.mac, hwdst="ff:ff:ff:ff:ff:ff")) rxs = self.send_and_expect(self.pg0, p_arp * 1, self.pg0) @@ -4793,12 +4776,12 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.0.0.1", dst="10.0.0.88") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) p6 = (Ether(src=eep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / IPv6(src="2001:10::1", dst="2001:10::88") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p4 * 1, self.pg7) @@ -4831,7 +4814,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.0.0.101", dst="10.0.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 1, self.pg0) @@ -4840,7 +4823,7 @@ class TestGBP(VppTestCase): # p = (Ether(src=eep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / - IP(src=eep1.ip4.address, dst="10.0.0.128") / + IP(src=eep1.ip4, dst="10.0.0.128") / ICMP(type='echo-request')) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -4855,7 +4838,7 @@ class TestGBP(VppTestCase): # p = (Ether(src=eep1.mac, dst=eep2.mac) / Dot1Q(vlan=100) / - IP(src=eep1.ip4.address, dst=eep2.ip4.address) / + IP(src=eep1.ip4, dst=eep2.ip4) / ICMP(type='echo-request')) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -4870,7 +4853,7 @@ class TestGBP(VppTestCase): # p = (Ether(src=eep3.mac, dst=str(self.router_mac)) / Dot1Q(vlan=102) / - IP(src=eep3.ip4.address, dst="10.0.0.128") / + IP(src=eep3.ip4, dst="10.0.0.128") / ICMP(type='echo-request')) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -4883,7 +4866,7 @@ class TestGBP(VppTestCase): # A ip4 subnet reachable through the external EP1 # ip_220 = VppIpRoute(self, "10.220.0.0", 24, - [VppRoutePath(eep1.ip4.address, + [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index)], table_id=t4.table_id) ip_220.add_vpp_config() @@ -4898,7 +4881,7 @@ class TestGBP(VppTestCase): # An ip6 subnet reachable through the external EP1 # ip6_220 = VppIpRoute(self, "10:220::", 64, - [VppRoutePath(eep1.ip6.address, + [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index)], table_id=t6.table_id) ip6_220.add_vpp_config() @@ -4913,7 +4896,7 @@ class TestGBP(VppTestCase): # A subnet reachable through the external EP2 # ip_221 = VppIpRoute(self, "10.221.0.0", 24, - [VppRoutePath(eep2.ip4.address, + [VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)], table_id=t4.table_id) ip_221.add_vpp_config() @@ -4938,16 +4921,17 @@ class TestGBP(VppTestCase): # # contract for the external nets to communicate # - acl = VppGbpAcl(self) - rule4 = acl.create_rule(permit_deny=1, proto=17) - rule6 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule4, rule6]) + rule4 = AclRule(is_permit=1, proto=17) + rule6 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule4, rule6]) + acl.add_vpp_config() # # A contract with the wrong scope is not matched # c_44 = VppGbpContract( - self, 44, 4220, 4221, acl_index, + self, 44, 4220, 4221, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -4961,7 +4945,7 @@ class TestGBP(VppTestCase): self.send_and_assert_no_replies(self.pg0, p * 1) c1 = VppGbpContract( - self, 55, 4220, 4221, acl_index, + self, 55, 4220, 4221, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -4977,7 +4961,7 @@ class TestGBP(VppTestCase): # Contracts allowing ext-net 200 to talk with external EPs # c2 = VppGbpContract( - self, 55, 4220, 113, acl_index, + self, 55, 4220, 113, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -4989,7 +4973,7 @@ class TestGBP(VppTestCase): [ETH_P_IP, ETH_P_IPV6]) c2.add_vpp_config() c3 = VppGbpContract( - self, 55, 113, 4220, acl_index, + self, 55, 113, 4220, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5008,7 +4992,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.221.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -5033,7 +5017,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.0.0.101", dst="10.220.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 1, self.pg0) @@ -5042,9 +5026,9 @@ class TestGBP(VppTestCase): # p = (Ether(src=eep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / - IP(src="10.220.0.1", dst=rep.ip4.address) / + IP(src="10.220.0.1", dst=rep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg7) @@ -5064,7 +5048,7 @@ class TestGBP(VppTestCase): self.assertTrue(rx[VXLAN].gpflags.D) inner = rx[VXLAN].payload self.assertEqual(inner[IP].src, "10.220.0.1") - self.assertEqual(inner[IP].dst, rep.ip4.address) + self.assertEqual(inner[IP].dst, rep.ip4) # # An external subnet reachable via the remote external EP @@ -5115,7 +5099,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_assert_no_replies(self.pg0, p * 1) @@ -5123,7 +5107,7 @@ class TestGBP(VppTestCase): # Add contracts ext-nets for 220 -> 222 # c4 = VppGbpContract( - self, 55, 4220, 4222, acl_index, + self, 55, 4220, 4222, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5142,7 +5126,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 3, self.pg7) @@ -5196,12 +5180,12 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=eep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1222, dport=1235) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] rxs = self.send_and_expect(self.pg0, p, self.pg7) @@ -5240,12 +5224,12 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IPv6(src="10:220::1", dst="10:222::1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=eep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / IPv6(src="10:220::1", dst="10:222::1") / UDP(sport=7777, dport=8881) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] self.logger.info(self.vapi.cli("sh ip6 fib 10:222::1")) rxs = self.send_and_expect(self.pg0, p, self.pg7) @@ -5264,7 +5248,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.222.0.1", dst="10.220.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 3, self.pg0) self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1")) @@ -5280,7 +5264,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.222.0.1", dst="10.222.0.2") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_assert_no_replies(self.pg7, p * 3) @@ -5291,7 +5275,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IPv6(src="10:222::1", dst="10:222::2") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_assert_no_replies(self.pg7, p * 3) @@ -5309,9 +5293,9 @@ class TestGBP(VppTestCase): # p = (Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IP(src=lep1.ip4.address, dst="10.220.0.1") / + IP(src=lep1.ip4, dst="10.220.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -5325,9 +5309,9 @@ class TestGBP(VppTestCase): # p = (Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IPv6(src=lep1.ip6.address, dst="10:220::1") / + IPv6(src=lep1.ip6, dst="10:220::1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -5340,9 +5324,9 @@ class TestGBP(VppTestCase): # ip4 and ip6 subnets that load-balance # ip_20 = VppIpRoute(self, "10.20.0.0", 24, - [VppRoutePath(eep1.ip4.address, + [VppRoutePath(eep1.ip4, eep1.epg.bvi.sw_if_index), - VppRoutePath(eep2.ip4.address, + VppRoutePath(eep2.ip4, eep2.epg.bvi.sw_if_index)], table_id=t4.table_id) ip_20.add_vpp_config() @@ -5354,9 +5338,9 @@ class TestGBP(VppTestCase): l3o_20.add_vpp_config() ip6_20 = VppIpRoute(self, "10:20::", 64, - [VppRoutePath(eep1.ip6.address, + [VppRoutePath(eep1.ip6, eep1.epg.bvi.sw_if_index), - VppRoutePath(eep2.ip6.address, + VppRoutePath(eep2.ip6, eep2.epg.bvi.sw_if_index)], table_id=t6.table_id) ip6_20.add_vpp_config() @@ -5373,14 +5357,14 @@ class TestGBP(VppTestCase): # two ip6 packets whose port are chosen so they load-balance p = [(Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IPv6(src=lep1.ip6.address, dst="10:20::1") / + IPv6(src=lep1.ip6, dst="10:20::1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IPv6(src=lep1.ip6.address, dst="10:20::1") / + IPv6(src=lep1.ip6, dst="10:20::1") / UDP(sport=124, dport=1230) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] rxs = self.send_and_expect(self.pg0, p, self.pg0, 2) @@ -5390,14 +5374,14 @@ class TestGBP(VppTestCase): # two ip4 packets whose port are chosen so they load-balance p = [(Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IP(src=lep1.ip4.address, dst="10.20.0.1") / + IP(src=lep1.ip4, dst="10.20.0.1") / UDP(sport=1235, dport=1235) / - Raw('\xa5' * 100)), + Raw(b'\xa5' * 100)), (Ether(src=lep1.mac, dst=str(self.router_mac)) / Dot1Q(vlan=144) / - IP(src=lep1.ip4.address, dst="10.20.0.1") / + IP(src=lep1.ip4, dst="10.20.0.1") / UDP(sport=124, dport=1230) / - Raw('\xa5' * 100))] + Raw(b'\xa5' * 100))] rxs = self.send_and_expect(self.pg0, p, self.pg0, 2) @@ -5437,8 +5421,8 @@ class TestGBP(VppTestCase): # # Bind the BVI to the RD # - VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() - VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() + bind_l0_ip4 = VppIpInterfaceBind(self, self.loop0, t4).add_vpp_config() + bind_l0_ip6 = VppIpInterfaceBind(self, self.loop0, t6).add_vpp_config() # # Pg7 hosts a BD's BUM @@ -5462,12 +5446,13 @@ class TestGBP(VppTestCase): None, gbd1.bvi, "10.0.0.128", "2001:10::128", - VppGbpEndpointRetention(2)) + VppGbpEndpointRetention(4)) epg_220.add_vpp_config() # the BVIs have the subnet applied ... - ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, "10.0.0.128", 24) - ip4_addr.add_vpp_config() + ip4_addr = VppIpInterfaceAddress(self, gbd1.bvi, + "10.0.0.128", 24, + bind=bind_l0_ip4).add_vpp_config() # ... which is an Anonymous L3-out subnets l3o_1 = VppGbpSubnet( @@ -5551,7 +5536,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src=str(rep.ip4), dst="10.0.0.100") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 1, self.pg0) # @@ -5629,13 +5614,14 @@ class TestGBP(VppTestCase): # # contract for the external nets to communicate # - acl = VppGbpAcl(self) - rule4 = acl.create_rule(permit_deny=1, proto=17) - rule6 = acl.create_rule(is_ipv6=1, permit_deny=1, proto=17) - acl_index = acl.add_vpp_config([rule4, rule6]) + rule4 = AclRule(is_permit=1, proto=17) + rule6 = AclRule(src_prefix=IPv6Network((0, 0)), + dst_prefix=IPv6Network((0, 0)), is_permit=1, proto=17) + acl = VppAcl(self, rules=[rule4, rule6]) + acl.add_vpp_config() c1 = VppGbpContract( - self, 55, 4220, 4221, acl_index, + self, 55, 4220, 4221, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5651,7 +5637,7 @@ class TestGBP(VppTestCase): # Contracts allowing ext-net 200 to talk with external EPs # c2 = VppGbpContract( - self, 55, 4220, 113, acl_index, + self, 55, 4220, 113, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5663,7 +5649,7 @@ class TestGBP(VppTestCase): [ETH_P_IP, ETH_P_IPV6]) c2.add_vpp_config() c3 = VppGbpContract( - self, 55, 113, 4220, acl_index, + self, 55, 113, 4220, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5682,7 +5668,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.221.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg0) @@ -5705,9 +5691,9 @@ class TestGBP(VppTestCase): UDP(sport=1234, dport=48879) / VXLAN(vni=444, gpid=113, flags=0x88) / Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / - IP(src=rep.ip4.address, dst="10.220.0.1") / + IP(src=rep.ip4, dst="10.220.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 1, self.pg0) @@ -5716,9 +5702,9 @@ class TestGBP(VppTestCase): # p = (Ether(src=self.vlan_100.remote_mac, dst=str(self.router_mac)) / Dot1Q(vlan=100) / - IP(src="10.220.0.1", dst=rep.ip4.address) / + IP(src="10.220.0.1", dst=rep.ip4) / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 1, self.pg7) @@ -5738,7 +5724,7 @@ class TestGBP(VppTestCase): self.assertTrue(rx[VXLAN].gpflags.D) inner = rx[VXLAN].payload self.assertEqual(inner[IP].src, "10.220.0.1") - self.assertEqual(inner[IP].dst, rep.ip4.address) + self.assertEqual(inner[IP].dst, rep.ip4) # # An external subnet reachable via the remote external EP @@ -5790,7 +5776,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_assert_no_replies(self.pg0, p * 1) @@ -5798,7 +5784,7 @@ class TestGBP(VppTestCase): # Add contracts ext-nets for 220 -> 222 # c4 = VppGbpContract( - self, 55, 4220, 4222, acl_index, + self, 55, 4220, 4222, acl.acl_index, [VppGbpContractRule( VppEnum.vl_api_gbp_rule_action_t.GBP_API_RULE_PERMIT, VppEnum.vl_api_gbp_hash_mode_t.GBP_API_HASH_MODE_SRC_IP, @@ -5817,7 +5803,7 @@ class TestGBP(VppTestCase): Dot1Q(vlan=100) / IP(src="10.220.0.1", dst="10.222.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg0, p * 3, self.pg7) @@ -5851,7 +5837,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.222.0.1", dst="10.220.0.1") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_expect(self.pg7, p * 3, self.pg0) self.assertFalse(find_gbp_endpoint(self, ip="10.222.0.1")) @@ -5867,7 +5853,7 @@ class TestGBP(VppTestCase): Ether(src=self.pg0.remote_mac, dst=str(self.router_mac)) / IP(src="10.222.0.1", dst="10.222.0.2") / UDP(sport=1234, dport=1234) / - Raw('\xa5' * 100)) + Raw(b'\xa5' * 100)) rxs = self.send_and_assert_no_replies(self.pg7, p * 3) @@ -5877,6 +5863,8 @@ class TestGBP(VppTestCase): self.vlan_101.set_vtr(L2_VTR_OP.L2_DISABLED) self.vlan_100.set_vtr(L2_VTR_OP.L2_DISABLED) self.pg7.unconfig_ip4() + # make sure the programmed EP is no longer learnt from DP + self.wait_for_ep_timeout(sw_if_index=rep.itf.sw_if_index, ip=rep.ip4) if __name__ == '__main__':