summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2024-05-09 07:43:38 +0000
committersongyanchao <[email protected]>2024-05-15 02:06:26 +0000
commit5602c112f97e74233fe488cd64f05a3457daa187 (patch)
tree4fe9002053215161f0ca11ebddae9206278a28ab /test
parent4465a1ce74f4a6109bacff3e475a55f3ea1990d7 (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.txt10
-rw-r--r--test/ptf_test/link_aware_injector_test.py1100
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()