diff options
| author | songyanchao <[email protected]> | 2024-05-09 07:43:38 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2024-05-15 02:06:26 +0000 |
| commit | 5602c112f97e74233fe488cd64f05a3457daa187 (patch) | |
| tree | 4fe9002053215161f0ca11ebddae9206278a28ab /test | |
| parent | 4465a1ce74f4a6109bacff3e475a55f3ea1990d7 (diff) | |
🧪 test(DPISDN-42): Add test case for link aware injector node.
Add test case for link aware injector node.
Diffstat (limited to 'test')
| -rw-r--r-- | test/ptf_test/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | test/ptf_test/link_aware_injector_test.py | 1100 |
2 files changed, 1109 insertions, 1 deletions
diff --git a/test/ptf_test/CMakeLists.txt b/test/ptf_test/CMakeLists.txt index ca9e4c1..a328237 100644 --- a/test/ptf_test/CMakeLists.txt +++ b/test/ptf_test/CMakeLists.txt @@ -129,4 +129,12 @@ add_test( COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_CURRENT_SOURCE_DIR} --interface 0@veth0-ptf0 --interface 1@veth1-ptf1 --interface 2@veth2-ptf2 --interface 3@veth3-ptf3 --interface 4@veth4-ptf4 bond_balance_test --test-params "source_dir='${CMAKE_BINARY_DIR}'" -)
\ No newline at end of file +) + +# add link aware injector test +add_test( + NAME link_aware_injector_test + COMMAND /usr/local/bin/ptf --test-dir ${CMAKE_CURRENT_SOURCE_DIR} + --interface 0@veth0-ptf0 --interface 1@veth1-ptf1 --interface 2@veth2-ptf2 --interface 3@veth3-ptf3 --interface 4@veth4-ptf4 + link_aware_injector_test_for_ef link_aware_injector_test_for_vwire --test-params "source_dir='${CMAKE_BINARY_DIR}'" +) diff --git a/test/ptf_test/link_aware_injector_test.py b/test/ptf_test/link_aware_injector_test.py new file mode 100644 index 0000000..d6451bb --- /dev/null +++ b/test/ptf_test/link_aware_injector_test.py @@ -0,0 +1,1100 @@ +import ptf +from ptf.base_tests import BaseTest +from ptf.testutils import * +from scapy.all import * +from mrzcpd import Mrzcpd +from common_pkt import * + +import ptf.mask as mask +import msgpack + +conf_for_ef_adapter_with_adapter_id = """ +[device] +device=veth0,veth1 +sz_tunnel=8192 +sz_buffer=0 + +[device:veth0] +in_addr=10.254.60.1 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=10:70:fd:03:c0:bd + +[device:veth1] +promisc=1 +mtu=1500 +driver=2 +role=4 +encode=1 +metadata_enable=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 + +[service_lb] +sid_start=1000 +sid_end=2000 + +[service_lb] +sid_start=1000 +sid_end=2000 + +# load balance +[load_balance:0] +sid=1000 +mode=0 +devices=veth1,0 + +[ef_adapter:0] +ef_adapter_id=0 +mode=1 +listen_device=veth0 + +[link_db:0] +type=0 +ef_adapter_ids=0 +ef_link_id=2 +ef_ip_addr=10.254.50.1 +traffic_link_id=1111 + +[mpack] +metadata_enable=1 +route_ctx_enable=0 +""" + +dynamic_conf = """ +[classifier_rule:0] +rule_id=1 +ruleset_type=0 +action=2 +priority=1 +sid=1000 +""" + +""" + +------------+ +------------------------------------------+ +------------+ + | PTF | | MRZCPD | | PTF | + +------------+ +------------+--------+--------------------+ +------------+ + | veth0-ptf0 | ---> | veth0(ef) | ---> | veth1 (serialize) | ---> | veth1-ptf1 | + +------------+ +------------+ +--------------------+ +------------+ +""" + +@group("link_aware_injector_test_for_ef") +class LinkAwareInjectorForEfWithEfAdapterId(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_ef_adapter_with_adapter_id,dynamic_conf) + mrzcpd.start() + + # Let the marsio save the ef ip and mac + send_data = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='10:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.1', vxlan_vni=4) + + send_packet(self, 0, send_data) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 1, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + + # Verify + verify_packets(self, verify_pkt, [0]) + + # Inject packet for dir 1 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 1, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 1, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=5,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [0]) + finally: + mrzcpd.stop() + +@group("link_aware_injector_test_for_ef") +class LinkAwareInjectorForEfWithEfAdapterIdNoEfPeer(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_ef_adapter_with_adapter_id,dynamic_conf) + mrzcpd.start() + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 1, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + + # Verify + verify_no_packet(self, verify_pkt, 0) + + finally: + mrzcpd.stop() + +@group("link_aware_injector_test_for_ef") +class LinkAwareInjectorForEfWithEfAdapterIdInvalidTrafficLinkId(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_ef_adapter_with_adapter_id,dynamic_conf) + mrzcpd.start() + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 65535, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 1, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + + # Verify + verify_no_packet(self, verify_pkt, 0) + + finally: + mrzcpd.stop() + +conf_for_ef_adapter_with_multi_adapter_id = """ +[device] +device=veth0,veth1,veth2,veth3,veth4 +sz_tunnel=8192 +sz_buffer=0 + +[device:veth0] +in_addr=10.254.60.1 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=10:70:fd:03:c0:bd + +[device:veth1] +in_addr=10.254.60.2 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=20:70:fd:03:c0:bd + +[device:veth2] +in_addr=10.254.60.3 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=30:70:fd:03:c0:bd + +[device:veth3] +in_addr=10.254.60.4 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=40:70:fd:03:c0:bd + +[device:veth4] +promisc=1 +mtu=1500 +driver=2 +role=4 +encode=1 +metadata_enable=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 + +[service_lb] +sid_start=1000 +sid_end=2000 + +[service_lb] +sid_start=1000 +sid_end=2000 + +# load balance +[load_balance:0] +sid=1000 +mode=0 +devices=veth4,0 + +[ef_adapter:0] +ef_adapter_id=0 +mode=1 +listen_device=veth0 + +[ef_adapter:1] +ef_adapter_id=1 +mode=1 +listen_device=veth1 + +[ef_adapter:2] +ef_adapter_id=2 +mode=1 +listen_device=veth2 + +[ef_adapter:3] +ef_adapter_id=3 +mode=1 +listen_device=veth3 + +[link_db:0] +type=0 +ef_adapter_ids=0,1,2,3 +ef_link_id=2 +ef_ip_addr=10.254.50.1 +traffic_link_id=1111 + +[mpack] +metadata_enable=1 +route_ctx_enable=0 +""" + +""" + +------------+ +------------------------------------------+ +------------+ + | PTF | | MRZCPD | | PTF | + +------------+ +------------+--------+--------------------+ +------------+ + | veth0-ptf0 | ---> | veth0(ef) | ---> | veth4 (serialize) | ---> | veth4-ptf4 | + +------------+ +------------+ +--------------------+ +------------+ + | veth1-ptf1 | ---> | veth1(ef) | + +------------+ +------------+ + | veth2-ptf2 | ---> | veth2(ef) | + +------------+ +------------+ + | veth3-ptf3 | ---> | veth3(ef) | + +------------+ +------------+ +""" + +@group("link_aware_injector_test_for_ef") +class LinkAwareInjectorForEfWithMultiEfAdapterId(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_ef_adapter_with_multi_adapter_id,dynamic_conf) + mrzcpd.start() + + # Let the marsio save the ef ip and mac + send_data_0 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='10:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.1', vxlan_vni=4) + + send_data_1 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='20:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.2', vxlan_vni=4) + + send_data_2 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='30:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.3', vxlan_vni=4) + + send_data_3 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='40:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.4', vxlan_vni=4) + + send_packet(self, 0, send_data_0) + send_packet(self, 1, send_data_1) + send_packet(self, 2, send_data_2) + send_packet(self, 3, send_data_3) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [0]) + + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.4.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='20:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.2', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [1]) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.3.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='30:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.3', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [2]) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='40:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.4', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [3]) + + finally: + mrzcpd.stop() + + +conf_for_ef_adapter_without_adapter_id = """ +[device] +device=veth0,veth1,veth2,veth3,veth4 +sz_tunnel=8192 +sz_buffer=0 + +[device:veth0] +in_addr=10.254.60.1 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=10:70:fd:03:c0:bd + +[device:veth1] +in_addr=10.254.60.2 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=20:70:fd:03:c0:bd + +[device:veth2] +in_addr=10.254.60.3 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=30:70:fd:03:c0:bd + +[device:veth3] +in_addr=10.254.60.4 +in_mask=255.255.255.0 +gateway=10.10.1.40 +promisc=1 +mtu=1500 +driver=2 +role=3 +ether=40:70:fd:03:c0:bd + +[device:veth4] +promisc=1 +mtu=1500 +driver=2 +role=4 +encode=1 +metadata_enable=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 + +[service_lb] +sid_start=1000 +sid_end=2000 + +[service_lb] +sid_start=1000 +sid_end=2000 + +# load balance +[load_balance:0] +sid=1000 +mode=0 +devices=veth4,0 + +[ef_adapter:0] +ef_adapter_id=0 +mode=1 +listen_device=veth0 + +[ef_adapter:1] +ef_adapter_id=1 +mode=1 +listen_device=veth1 + +[ef_adapter:2] +ef_adapter_id=2 +mode=1 +listen_device=veth2 + +[ef_adapter:3] +ef_adapter_id=3 +mode=1 +listen_device=veth3 + +[link_db:0] +type=0 +ef_link_id=2 +ef_ip_addr=10.254.50.1 +traffic_link_id=1111 + +[mpack] +metadata_enable=1 +route_ctx_enable=0 +""" + +""" + +------------+ +------------------------------------------+ +------------+ + | PTF | | MRZCPD | | PTF | + +------------+ +------------+--------+--------------------+ +------------+ + | veth0-ptf0 | ---> | veth0(ef) | ---> | veth4 (serialize) | ---> | veth4-ptf4 | + +------------+ +------------+ +--------------------+ +------------+ + | veth1-ptf1 | ---> | veth1(ef) | + +------------+ +------------+ + | veth2-ptf2 | ---> | veth2(ef) | + +------------+ +------------+ + | veth3-ptf3 | ---> | veth3(ef) | + +------------+ +------------+ +""" + +@group("link_aware_injector_test_for_ef") +class LinkAwareInjectorForEfWithoutEfAdapterId(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_ef_adapter_without_adapter_id,dynamic_conf) + mrzcpd.start() + + # Let the marsio save the ef ip and mac + send_data_0 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='10:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.1', vxlan_vni=4) + + send_data_1 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='20:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.2', vxlan_vni=4) + + send_data_2 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='30:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.3', vxlan_vni=4) + + send_data_3 = simple_vxlan_packet( + eth_src='0a:0a:0a:0a:01:28', eth_dst='40:70:fd:03:c0:bd', + ip_src='10.254.50.1', ip_dst='10.254.60.4', vxlan_vni=4) + + send_packet(self, 0, send_data_0) + send_packet(self, 1, send_data_1) + send_packet(self, 2, send_data_2) + send_packet(self, 3, send_data_3) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='10:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.1', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [0]) + + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.4.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='20:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.2', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [1]) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.3.100", ip_dst="172.17.2.120",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='30:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.3', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [2]) + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 4, send_pkt) + + vxlan_pkt=simple_vxlan_packet( + eth_src='40:70:fd:03:c0:bd', eth_dst='0a:0a:0a:0a:01:28', + ip_src='10.254.60.4', ip_dst='10.254.50.1',with_udp_chksum=False,vxlan_flags=0, vxlan_vni=4,inner_frame=original_pkt) + + verify_pkt = mask.Mask(vxlan_pkt) + verify_pkt.set_do_not_care_scapy(UDP, "sport") + + # Verify + verify_packets(self, verify_pkt, [3]) + + finally: + mrzcpd.stop() + + + +conf_for_vwire_adapter = """ +[device] +device=veth0,veth1,veth2 +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=4 +encode=1 +metadata_enable=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 + +[service_lb] +sid_start=1000 +sid_end=2000 + +[service_lb] +sid_start=1000 +sid_end=2000 + +# load balance +[load_balance:0] +sid=1000 +mode=0 +devices=veth2,0 + +# vwire +[vwire:0] +vwire_id = 0 +interface_int = veth0 +interface_ext = veth1 + +[link_db:0] +type=1 +vwire_id=0 +traffic_link_id=2222 + +[mpack] +metadata_enable=1 +route_ctx_enable=0 +""" + +dynamic_conf = """ +[classifier_rule:0] +rule_id=1 +ruleset_type=0 +action=2 +priority=1 +sid=1000 +""" + +""" + +------------+ +------------------------------------------+ +------------+ + | PTF | | MRZCPD | | PTF | + +------------+ +------------+--------+--------------------+ +------------+ + | veth0-ptf0 | ---> | veth0(ef) | ---> | veth2 (serialize) | ---> | veth2-ptf2 | + +------------+ +------------+ +--------------------+ +------------+ + | veth1-ptf1 | ---> | veth1(ef) | + +------------+ +------------+ +""" + +@group("link_aware_injector_test_for_vwire") +class LinkAwareInjectorForVwire(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_vwire_adapter,dynamic_conf) + mrzcpd.start() + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 2222, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 2, send_pkt) + + verify_pkt=original_pkt + + # Verify + verify_packets(self, verify_pkt, [1]) + + # Inject packet for dir 1 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 1, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 2222, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 2, send_pkt) + + verify_pkt = original_pkt + + # Verify + verify_packets(self, verify_pkt, [0]) + finally: + mrzcpd.stop() + + +@group("link_aware_injector_test_for_vwire") +class LinkAwareInjectorForVwireInvalidTrafficLinkId(BaseTest): + def setUp(self): + self.dataplane = ptf.dataplane_instance + + def __init__(self): + BaseTest.__init__(self) + + def runTest(self): + try: + # Init & Start mrzcpd + mrzcpd = Mrzcpd(conf_for_vwire_adapter,dynamic_conf) + mrzcpd.start() + + # Inject packet for dir 0 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 1111, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 2, send_pkt) + + verify_pkt=original_pkt + + # Verify + verify_no_packet(self, verify_pkt, 1) + + # Inject packet for dir 1 + original_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") + send_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 1, 'packet_create_from_nf': 1, + 'is_ctrlbuf': 0, 'adapter_type': 0, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 65534, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 0, 'sids': [0, 0, 0, 0, 0, 0, 0, 900], + 'head': 6, 'tail': 7, 'capacity': 7, + 'packet':original_pkt.__bytes__()} + + binary_data = msgpack.dumps(send_data) + send_pkt = simple_eth_packet(pktlen=14,eth_src="aa:bb:cc:dd:ee:ff",eth_dst="ff:ee:dd:cc:bb:aa",eth_type=0x4d5a) / Raw(load=binary_data) + send_packet(self, 2, send_pkt) + + verify_pkt = original_pkt + + # Verify + verify_no_packet(self, verify_pkt, 0) + finally: + mrzcpd.stop() |
