import ptf from ptf.base_tests import BaseTest from ptf.testutils import * from scapy.all import * from mrzcpd import Mrzcpd from common_pkt import * start_conf_base = """ [device] device=veth0,veth1,veth2,veth3,veth4,veth5 sz_tunnel=8192 sz_buffer=0 [device:veth0] promisc=1 mtu=1500 driver=2 role=1 [device:veth1] promisc=1 mtu=1500 driver=2 role=1 [device:veth2] promisc=1 mtu=1500 driver=2 role=1 [device:veth3] promisc=1 mtu=1500 driver=2 role=1 [device:veth4] promisc=1 mtu=1500 driver=2 role=1 [device:veth5] promisc=1 mtu=1500 driver=2 role=1 [service] iocore=1 distmode=2 hashmode=0 [limits] nr_max_ef_adapters=32 nr_max_vwires=32 nr_max_tera_adapters=32 nr_max_link_dbs=32 [eal] virtaddr=0x600000000000 loglevel=7 nohuge=1 mem=65535 [keepalive] check_spinlock=1 [http_server] listen_addr=127.0.0.1 [ctrlzone] ctrlzone0=tunnat, 64 ctrlzone1=vsys, 64 [pool] create_mode=3 sz_direct_pktmbuf=4096 sz_indirect_pktmbuf=4096 sz_cache=256 sz_data=3000 [ctrlmsg] listen_addr=0.0.0.0 listen_port=46789 [rpc] addr=127.0.0.1 port=56789 # sid [ef_adapters] sid_start=100 sid_end=200 max_rules=256 [vwires] sid_start=300 sid_end=400 max_rules=256 # vwire [vwire:0] vwire_id=0 interface_int=veth4 interface_ext=veth5 [service_lb] sid_start=1000 sid_end=2000 # load balance [load_balance:0] sid=1000 mode=0 devices=veth0,0 [load_balance:1] sid=1001 mode=0 devices=veth1,0 [load_balance:2] sid=1002 mode=0 devices=veth2,0 [load_balance:3] sid=1003 mode=0 devices=veth3,0 """ dynamic_conf_base = """ [classifier_rule:0] rule_id=1 ruleset_type=0 dst_ip_addr_v4=172.17.2.100 dst_ip_mask_v4=32 action=2 priority=1 sid=1000 vwire_id=0 [classifier_rule:1] rule_id=2 ruleset_type=0 dst_ip_addr_v4=172.17.2.101 dst_ip_mask_v4=32 action=2 priority=1 sid=1001 vwire_id=0 [classifier_rule:2] rule_id=3 ruleset_type=0 src_ip_addr_v4=172.17.2.102 src_ip_mask_v4=32 action=2 priority=1 sid=1002 vwire_id=0 [classifier_rule:3] rule_id=4 ruleset_type=0 src_ip_addr_v4=172.17.2.103 src_ip_mask_v4=32 action=2 priority=1 sid=1003 vwire_id=0 [classifier_rule:4] rule_id=5 ruleset_type=0 dst_ip_addr_v6=2222::4 dst_ip_mask_v6=128 action=2 priority=1 sid=1000 vwire_id=0 [classifier_rule:5] rule_id=6 ruleset_type=0 dst_ip_addr_v6=2222::5 dst_ip_mask_v6=128 action=2 priority=1 sid=1001 vwire_id=0 [classifier_rule:6] rule_id=7 ruleset_type=0 src_ip_addr_v6=2222::6 src_ip_mask_v6=128 action=2 priority=1 sid=1002 vwire_id=0 [classifier_rule:7] rule_id=8 ruleset_type=0 src_ip_addr_v6=2222::7 src_ip_mask_v6=128 action=2 priority=1 sid=1003 vwire_id=0 """ """ +----------------------+ +----------------------+ | DstIP=172.17.2.100 | | DstIP=172.17.2.101 | +----------------------+ +----------------------+ | | V V +-------------------------------------------------+ | Classifier Table | +-------------------------------------------------+ | | V V +---------------------+ +---------------------+ | ClassifierRuleID1 | | ClassifierRuleID2 | +---------------------+ +---------------------+ | | V V +------------------------------------------------+ | Forwarding | +------------------------------------------------+ | | V V +-------------------+ +-------------------+ | veth0 port | | veth1 port | +-------------------+ +-------------------+ """ @group("classifier_test_base") class BaseForLinearSearch(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd mrzcpd = Mrzcpd(start_conf_base,dynamic_conf_base) mrzcpd.start() """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 DstIP=172.17.2.100 | ---> | RuleID=1, DstIP=172.17.2.100 | ---> | veth0-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 DstIP=172.17.2.101 | ---> | RuleID=2, DstIP=172.17.2.101 | ---> | veth1-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 1 - 2, check ipv4 dst ip rule. for i in range(0, 2): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2." + str(100 + i)) send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 SrcIP=172.17.2.102 | ---> | RuleID=3, SrcIP=172.17.2.102 | ---> | veth2-ptf2 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 SrcIP=172.17.2.103 | ---> | RuleID=4, SrcIP=172.17.2.103 | ---> | veth3-ptf3 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 3 - 4, check ipv4 src ip rule. for i in range(2, 4): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.2." + str(100 + i), ip_dst="172.17.1.100") send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 DstIP= 2222::4 | ---> | RuleID=5, DstIP= 2222::4 | ---> | veth0-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 DstIP= 2222::5 | ---> | RuleID=6, DstIP= 2222::5 | ---> | veth1-ptf1 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 5 - 6, check ipv6 dst ip rule. for i in range(4, 6): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::" + str(i)) send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i % 4]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 SrcIP= 2222::6 | ---> | RuleID=7, SrcIP= 2222::6 | ---> | veth2-ptf2 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 SrcIP= 2222::7 | ---> | RuleID=8, SrcIP= 2222::7 | ---> | veth3-ptf3 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 7 - 8, check ipv6 src ip rule. for i in range(6, 8): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcpv6_packet( ipv6_src="2222::" + str(i), ipv6_dst="1111::8888") send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i % 4]) """ +---------------------------+ +---------+-----------------+---------+ +--------------+ | PTF | | Vwire | Classifier | Vwire | | PTF | +---------------------------+ +---------+-----------------+---------+ +--------------+ | SrcIP=172.17.3.100 | | veth5 | No Match Rule | veth5 | ---> | veth5-ptf5 | | DstIP=172.17.1.100 | ---> | veth4 | To Vwire | veth4 | | | +---------------------------+ +---------+-----------------+---------+ +--------------+ """ # Check miss packet verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.3.100", ip_dst="172.17.1.100") send_packet(self, 4, send_pkt) verify_packets(self, verify_pkt, [5]) finally: mrzcpd.stop() @group("classifier_test_base") class TestForTreeSearch(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd global dynamic_conf_base for i in range(8,128): dynamic_conf_base += "[classifier_rule:" + str(i) + "]\n" dynamic_conf_base += "ruleset_type=0\n" dynamic_conf_base += "rule_id=" + str(i+1) + "\n" dynamic_conf_base += "dst_ip_addr_v4=172.19.2." + str(i) + "\n" dynamic_conf_base += "dst_ip_mask_v4=32\n" dynamic_conf_base += "action=2\n" dynamic_conf_base += "priority=1\n" dynamic_conf_base += "sid=1000\n" dynamic_conf_base += "vwire_id=0\n\n" #print(base_conf) mrzcpd = Mrzcpd(start_conf_base,dynamic_conf_base) mrzcpd.start() """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 DstIP=172.17.2.100 | ---> | RuleID=1, DstIP=172.17.2.100 | ---> | veth0-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 DstIP=172.17.2.101 | ---> | RuleID=2, DstIP=172.17.2.101 | ---> | veth1-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 1 - 2, check ipv4 dst ip rule. for i in range(0, 2): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2." + str(100 + i)) send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 SrcIP=172.17.2.102 | ---> | RuleID=3, SrcIP=172.17.2.102 | ---> | veth2-ptf2 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv4 SrcIP=172.17.2.103 | ---> | RuleID=4, SrcIP=172.17.2.103 | ---> | veth3-ptf3 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 3 - 4, check ipv4 src ip rule. for i in range(2, 4): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.2." + str(100 + i), ip_dst="172.17.1.100") send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 DstIP= 2222::4 | ---> | RuleID=5, DstIP= 2222::4 | ---> | veth0-ptf0 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 DstIP= 2222::5 | ---> | RuleID=6, DstIP= 2222::5 | ---> | veth1-ptf1 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 5 - 6, check ipv6 dst ip rule. for i in range(4, 6): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::" + str(i)) send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i % 4]) """ +---------------------------+ +--------------------------------+ +--------------+ | PTF | | MRZCPD | | PTF | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 SrcIP= 2222::6 | ---> | RuleID=7, SrcIP= 2222::6 | ---> | veth2-ptf2 | +---------------------------+ +--------------------------------+ +--------------+ | Ipv6 SrcIP= 2222::7 | ---> | RuleID=8, SrcIP= 2222::7 | ---> | veth3-ptf3 | +---------------------------+ +--------------------------------+ +--------------+ """ # Check classifier rule id 7 - 8, check ipv6 src ip rule. for i in range(6, 8): # Create packet for classifier rule verify_pkt = send_pkt = simple_tcpv6_packet( ipv6_src="2222::" + str(i), ipv6_dst="1111::8888") send_packet(self, 5, send_pkt) verify_packets(self, verify_pkt, [i % 4]) """ +---------------------------+ +---------+-----------------+---------+ +--------------+ | PTF | | Vwire | Classifier | Vwire | | PTF | +---------------------------+ +---------+-----------------+---------+ +--------------+ | SrcIP=172.17.3.100 | | veth5 | No Match Rule | veth5 | ---> | veth5-ptf5 | | DstIP=172.17.1.100 | ---> | veth4 | To Vwire | veth4 | | | +---------------------------+ +---------+-----------------+---------+ +--------------+ """ # Check miss packet verify_pkt = send_pkt = simple_tcp_packet( ip_src="172.17.3.100", ip_dst="172.17.1.100") send_packet(self, 4, send_pkt) verify_packets(self, verify_pkt, [5]) finally: mrzcpd.stop() start_conf_vwire = """ [device] device=veth0,veth1,veth2,veth3 sz_tunnel=8192 sz_buffer=0 [device:veth0] promisc=1 mtu=1500 driver=2 role=1 [device:veth1] promisc=1 mtu=1500 driver=2 role=1 [device:veth2] promisc=1 mtu=1500 driver=2 role=1 [device:veth3] promisc=1 mtu=1500 driver=2 role=1 [service] iocore=1 distmode=2 hashmode=0 [limits] nr_max_ef_adapters=32 nr_max_vwires=32 nr_max_tera_adapters=32 nr_max_link_dbs=32 [eal] virtaddr=0x600000000000 loglevel=7 nohuge=1 mem=65535 [keepalive] check_spinlock=1 [http_server] listen_addr=127.0.0.1 [ctrlzone] ctrlzone0=tunnat, 64 ctrlzone1=vsys, 64 [pool] create_mode=3 sz_direct_pktmbuf=4096 sz_indirect_pktmbuf=4096 sz_cache=256 sz_data=3000 [ctrlmsg] listen_addr=0.0.0.0 listen_port=46789 [rpc] addr=127.0.0.1 port=56789 # sid [ef_adapters] sid_start=100 sid_end=200 max_rules=256 [vwires] sid_start=300 sid_end=400 max_rules=256 # vwire [vwire:0] vwire_id=0 interface_int=veth2 interface_ext=veth3 [service_lb] sid_start=1000 sid_end=2000 # load balance [load_balance:0] sid=1000 mode=0 devices=veth0,0 [load_balance:1] sid=1001 mode=0 devices=veth1,0 [classifier_rule:0] rule_id=1 ruleset_type=0 src_ip_addr_v4=172.17.1.100 src_ip_mask_v4=32 dst_ip_addr_v4=172.17.2.100 dst_ip_mask_v4=32 src_port_start=1000 src_port_end=1000 dst_port_start=80 dst_port_end=80 proto=6 priority=1 sid=1000 vwire_id=0 action=2 """ dynamic_conf_full_field_match_for_vwire = """ [classifier_rule:0] rule_id=2 ruleset_type=0 src_ip_addr_v6=1111::8888 src_ip_mask_v6=128 dst_ip_addr_v6=2222::9999 dst_ip_mask_v6=128 src_port_start=1000 src_port_end=1000 dst_port_start=80 dst_port_end=80 proto=17 priority=1 sid=1001 vwire_id=0 action=2 """ """ +----------------------+ +----------------------+ | IPv4=172.17.2.100 | | IPv6=2222::9999 | +----------------------+ +----------------------+ | | V V +-------------------------------------------------+ | Classifier Table | +-------------------------------------------------+ | | V V +---------------------+ +---------------------+ | ClassifierRuleID1 | | ClassifierRuleID2 | +---------------------+ +---------------------+ | | V V +------------------------------------------------+ | Forwarding | +------------------------------------------------+ | | V V +-------------------+ +-------------------+ | veth0 port | | veth1 port | +-------------------+ +-------------------+ """ @ group("full_field_match_test") class FullFieldLinearMatchForVwireTest(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd mrzcpd = Mrzcpd(start_conf_vwire,dynamic_conf_full_field_match_for_vwire) mrzcpd.start() # Check IPv4 for miss send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) verify_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) send_packet(self, 3, send_pkt) verify_packets(self, verify_pkt, [2]) # Check IPv4 for match send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) verify_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) send_packet(self, 3, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv6 for miss send_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) verify_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) send_packet(self, 2, send_pkt) verify_packets(self, verify_pkt, [3]) # Check IPv6 for match send_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) verify_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) send_packet(self, 2, send_pkt) verify_packets(self, verify_pkt, [1]) finally: mrzcpd.stop() @ group("full_field_match_test") class FullFieldTreeMatchForVwireTest(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd global dynamic_conf_full_field_match_for_vwire dynamic_conf = dynamic_conf_full_field_match_for_vwire for i in range(8,128): dynamic_conf += "[classifier_rule:" + str(i) + "]\n" dynamic_conf += "ruleset_type=0\n" dynamic_conf += "rule_id=" + str(i+1) + "\n" dynamic_conf += "dst_ip_addr_v4=172.19.2." + str(i) + "\n" dynamic_conf += "dst_ip_mask_v4=32\n" dynamic_conf += "action=2\n" dynamic_conf += "priority=1\n" dynamic_conf += "sid=1000\n" dynamic_conf += "vwire_id=0\n\n" mrzcpd = Mrzcpd(start_conf_vwire,dynamic_conf) mrzcpd.start() # Check IPv4 for miss send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) verify_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) send_packet(self, 3, send_pkt) verify_packets(self, verify_pkt, [2]) # Check IPv4 for match send_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) verify_pkt = simple_tcp_packet( ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) send_packet(self, 3, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv6 for miss send_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) verify_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) send_packet(self, 2, send_pkt) verify_packets(self, verify_pkt, [3]) # Check IPv6 for match send_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) verify_pkt = simple_udpv6_packet( ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) send_packet(self, 2, send_pkt) verify_packets(self, verify_pkt, [1]) finally: mrzcpd.stop() start_conf_tera = """ [device] device=veth0,veth1,veth2 sz_tunnel=8192 sz_buffer=0 [device:veth0] promisc=0 mtu=1500 driver=2 role=3 [device:veth1] promisc=1 mtu=1500 driver=2 role=3 [device:veth2] promisc=1 mtu=1500 driver=2 role=3 [service] iocore=1 distmode=2 hashmode=0 [limits] nr_max_ef_adapters=32 nr_max_vwires=32 nr_max_tera_adapters=32 nr_max_link_dbs=32 [eal] virtaddr=0x600000000000 loglevel=7 nohuge=1 mem=65535 [keepalive] check_spinlock=1 [http_server] listen_addr=127.0.0.1 [ctrlzone] ctrlzone0=tunnat, 64 ctrlzone1=vsys, 64 [pool] create_mode=3 sz_direct_pktmbuf=4096 sz_indirect_pktmbuf=4096 sz_cache=256 sz_data=3000 [ctrlmsg] listen_addr=0.0.0.0 listen_port=46789 [rpc] addr=127.0.0.1 port=56789 # sid [ef_adapters] sid_start=100 sid_end=200 max_rules=32 [vwires] sid_start=300 sid_end=400 max_rules=32 [tera_adapters] sid_start=500 sid_end=600 max_rules=64 [tera_adapter:0] tera_adapter_id=0 listen_device=veth0 vlan_int=110 vlan_ext=111 mac_flipping=0 [service_lb] sid_start=1000 sid_end=2000 # load balance [load_balance:0] sid=1000 mode=0 devices=veth1,0 [load_balance:1] sid=1001 mode=0 devices=veth2,0 """ dynamic_conf_full_field_match_for_tera = """ [classifier_rule:0] rule_id=1 ruleset_type=0 src_ip_addr_v4=172.17.1.100 src_ip_mask_v4=32 dst_ip_addr_v4=172.17.2.100 dst_ip_mask_v4=32 src_port_start=1000 src_port_end=1000 dst_port_start=80 dst_port_end=80 proto=6 priority=1 sid=1000 tera_adapter_id=0 action=2 [classifier_rule:1] rule_id=2 ruleset_type=0 src_ip_addr_v6=1111::8888 src_ip_mask_v6=128 dst_ip_addr_v6=2222::9999 dst_ip_mask_v6=128 src_port_start=1000 src_port_end=1000 dst_port_start=80 dst_port_end=80 proto=17 priority=1 sid=1001 tera_adapter_id=0 action=2 """ """ +----------------------+ +----------------------+ | IPv4=172.17.2.100 | | IPv6=2222::9999 | +----------------------+ +----------------------+ | | V V +-------------------------------------------------+ | Classifier Table | +-------------------------------------------------+ | | V V +---------------------+ +---------------------+ | ClassifierRuleID1 | | ClassifierRuleID2 | +---------------------+ +---------------------+ | | V V +------------------------------------------------+ | Forwarding | +------------------------------------------------+ | | V V +-------------------+ +-------------------+ | veth1 port | | veth2 port | +-------------------+ +-------------------+ """ @ group("full_field_match_test") class FullFieldLinearMatchForTeraTest(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd mrzcpd = Mrzcpd(start_conf_tera,dynamic_conf_full_field_match_for_tera) mrzcpd.start() # Check IPv4 for miss send_pkt = simple_tcp_packet(vlan_vid=110, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) verify_pkt = simple_tcp_packet(vlan_vid=111, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv4 for match send_pkt = simple_tcp_packet(vlan_vid=110, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) verify_pkt = simple_tcp_packet(vlan_vid=111, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [1]) # Check IPv6 for miss send_pkt = simple_udpv6_packet(vlan_vid=110, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) verify_pkt = simple_udpv6_packet(vlan_vid=111, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv6 for match send_pkt = simple_udpv6_packet(vlan_vid=110, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) verify_pkt = simple_udpv6_packet(vlan_vid=111, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [2]) finally: mrzcpd.stop() @ group("full_field_match_test") class FullFieldTreeMatchForTeraTest(BaseTest): def setUp(self): self.dataplane = ptf.dataplane_instance def __init__(self): BaseTest.__init__(self) def runTest(self): try: # Init & Start mrzcpd global dynamic_conf_full_field_match_for_tera dynamic_conf = dynamic_conf_full_field_match_for_tera for i in range(8,128): dynamic_conf += "[classifier_rule:" + str(i) + "]\n" dynamic_conf += "ruleset_type=0\n" dynamic_conf += "rule_id=" + str(i+1) + "\n" dynamic_conf += "dst_ip_addr_v4=172.19.2." + str(i) + "\n" dynamic_conf += "dst_ip_mask_v4=32\n" dynamic_conf += "action=2\n" dynamic_conf += "priority=1\n" dynamic_conf += "sid=1000\n" dynamic_conf += "tera_adapter_id=0\n\n" mrzcpd = Mrzcpd(start_conf_tera,dynamic_conf) mrzcpd.start() # Check IPv4 for miss send_pkt = simple_tcp_packet(vlan_vid=110, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) verify_pkt = simple_tcp_packet(vlan_vid=111, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=1000) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv4 for match send_pkt = simple_tcp_packet(vlan_vid=110, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) verify_pkt = simple_tcp_packet(vlan_vid=111, dl_vlan_enable=True,ip_src="172.17.1.100", ip_dst="172.17.2.100", tcp_sport=1000, tcp_dport=80) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [1]) # Check IPv6 for miss send_pkt = simple_udpv6_packet(vlan_vid=110, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) verify_pkt = simple_udpv6_packet(vlan_vid=111, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=1000) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [0]) # Check IPv6 for match send_pkt = simple_udpv6_packet(vlan_vid=110, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) verify_pkt = simple_udpv6_packet(vlan_vid=111, dl_vlan_enable=True,ipv6_src="1111::8888", ipv6_dst="2222::9999", udp_sport=1000, udp_dport=80) send_packet(self, 0, send_pkt) verify_packets(self, verify_pkt, [2]) finally: mrzcpd.stop()