diff options
| author | songyanchao <[email protected]> | 2024-01-05 06:34:01 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2024-01-05 06:34:01 +0000 |
| commit | 0e9d87a3083386ea2da7ce82d0088e4ac7dc266a (patch) | |
| tree | 744a5728f2a677876e88e405caf9f2e589bcdb27 | |
| parent | a157ece86c08b1a157f19213bac719f03c4337ac (diff) | |
🎈 perf(TSG-17959): Refine msgpack serialization and deserialization functions, along with corresponding test cases.
Refine msgpack serialization and deserialization functions, along with corresponding test cases.
| -rw-r--r-- | .gitignore | 2 | ||||
| -rw-r--r-- | service/src/node_phydev.c | 62 | ||||
| -rw-r--r-- | test/msgpack_test.py | 22 |
3 files changed, 70 insertions, 16 deletions
@@ -17,7 +17,7 @@ tags __pycache__ mpack*/ mrglobal.conf -build/ +build*/ test/test /*.opendb /.vs/marsio1/v14/.suo diff --git a/service/src/node_phydev.c b/service/src/node_phydev.c index 278af63..7bd7149 100644 --- a/service/src/node_phydev.c +++ b/service/src/node_phydev.c @@ -37,9 +37,28 @@ int mbuf_object_deserialize_from_msgpack(struct rte_mbuf * mbuf, const char * bu /* unpack the mrb_metadata */ struct mrb_metadata * mrb_meta = mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID); + mrb_meta->dir = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "dir")); + mrb_meta->packet_create_from_nf = + mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "packet_create_from_nf")); + mrb_meta->is_ctrlbuf = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "is_ctrlbuf")); + mrb_meta->adapter_type = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "adapter_type")); + mrb_meta->adapter_id = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "adapter_id")); + mrb_meta->payload_offset = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "payload_offset")); + mrb_meta->user_0 = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "user_0")); + mrb_meta->ef_link_id = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "ef_link_id")); + mrb_meta->traffic_link_id = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "traffic_link_id")); + mrb_meta->ef_peer_index = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "ef_peer_index")); + mrb_meta->port_ingress = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "port_ingress")); + mrb_meta->port_egress = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "port_egress")); + mrb_meta->session_id = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "session_id")); + + /* the ingress port should not use the mpack info */ mrb_meta->port_ingress = mbuf->port; - /* unpack the sids */ + /* unpack the current sid */ + mrb_meta->cur_sid = mpack_node_u16(mpack_node_map_cstr(mpack_tree_root(&tree), "cur_sid")); + + /* unpack the sid list */ struct sid_list * sid_list = &mrb_meta->sid_list; mpack_node_map_cstr(mpack_tree_root(&tree), "sids"); for (unsigned int i = 0; i < RTE_DIM(sid_list->sids); i++) @@ -47,9 +66,6 @@ int mbuf_object_deserialize_from_msgpack(struct rte_mbuf * mbuf, const char * bu sid_list->sids[i] = mpack_node_u32(mpack_node_array_at(mpack_node_map_cstr(mpack_tree_root(&tree), "sids"), i)); } - /* unpack the current sid */ - mrb_meta->cur_sid = mpack_node_u16(mpack_node_map_cstr(mpack_tree_root(&tree), "cur_sid")); - /* unpack the head sid */ sid_list->head = mpack_node_u8(mpack_node_map_cstr(mpack_tree_root(&tree), "head")); @@ -101,9 +117,39 @@ int mbuf_object_serialize_as_msgpack(struct rte_mbuf * mbuf, char ** data, size_ /* pack the mrb_metadata */ struct mrb_metadata * mrb_meta = mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID); - struct sid_list * sid_list = &mrb_meta->sid_list; + mpack_write_cstr(&writer, "dir"); + mpack_write_u8(&writer, mrb_meta->dir); + mpack_write_cstr(&writer, "packet_create_from_nf"); + mpack_write_u8(&writer, mrb_meta->packet_create_from_nf); + mpack_write_cstr(&writer, "is_ctrlbuf"); + mpack_write_u8(&writer, mrb_meta->is_ctrlbuf); + mpack_write_cstr(&writer, "adapter_type"); + mpack_write_u8(&writer, mrb_meta->adapter_type); + mpack_write_cstr(&writer, "adapter_id"); + mpack_write_u8(&writer, mrb_meta->adapter_id); + mpack_write_cstr(&writer, "payload_offset"); + mpack_write_u8(&writer, mrb_meta->payload_offset); + mpack_write_cstr(&writer, "user_0"); + mpack_write_u8(&writer, mrb_meta->user_0); + mpack_write_cstr(&writer, "ef_link_id"); + mpack_write_u8(&writer, mrb_meta->ef_link_id); + mpack_write_cstr(&writer, "traffic_link_id"); + mpack_write_u8(&writer, mrb_meta->traffic_link_id); + mpack_write_cstr(&writer, "ef_peer_index"); + mpack_write_u8(&writer, mrb_meta->ef_peer_index); + mpack_write_cstr(&writer, "port_ingress"); + mpack_write_u8(&writer, mrb_meta->port_ingress); + mpack_write_cstr(&writer, "port_egress"); + mpack_write_u8(&writer, mrb_meta->port_egress); + mpack_write_cstr(&writer, "session_id"); + mpack_write_u8(&writer, mrb_meta->session_id); + + /* pack the current sid */ + mpack_write_cstr(&writer, "cur_sid"); + mpack_write_u16(&writer, mrb_meta->cur_sid); - /* pack the sids */ + /* pack the sids list */ + struct sid_list * sid_list = &mrb_meta->sid_list; mpack_write_cstr(&writer, "sids"); mpack_start_array(&writer, RTE_DIM(sid_list->sids)); for (unsigned int i = 0; i < RTE_DIM(sid_list->sids); i++) @@ -112,10 +158,6 @@ int mbuf_object_serialize_as_msgpack(struct rte_mbuf * mbuf, char ** data, size_ } mpack_finish_array(&writer); - /* pack the current sid */ - mpack_write_cstr(&writer, "cur_sid"); - mpack_write_u16(&writer, mrb_meta->cur_sid); - /* pack the head sid */ mpack_write_cstr(&writer, "head"); mpack_write_u8(&writer, sid_list->head); diff --git a/test/msgpack_test.py b/test/msgpack_test.py index 039c49d..adea563 100644 --- a/test/msgpack_test.py +++ b/test/msgpack_test.py @@ -5,6 +5,7 @@ from scapy.all import * from mrzcpd import Mrzcpd from common_pkt import * import ptf.mask as mask +import msgpack serialize_conf = """ [device] @@ -126,11 +127,16 @@ class MpackSerializeTest(BaseTest): send_packet(self, 0,send_pkt) # Verify - hex_data = "8ba4706f727400ab7061636b65745f7479706500a86f6c5f666c61677300a8646174615f6c656e64a7706b745f6c656e64a473696473980000000000cd03e8cd012c00a76375725f736964cd03e8a46865616407a47461696c06a8636170616369747907a67061636b6574c46400010203040500060708090a0800450000560001000040111e48ac110164ac1102c804d200500042f90068656c6c6f20776f726c64000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e" - binary_data = bytes.fromhex(hex_data) + verify_data = {'port': 0, 'packet_type': 0, 'ol_flags': 0, 'data_len': 100, 'pkt_len': 100, 'dir': 0, 'packet_create_from_nf': 0, + 'is_ctrlbuf': 0, 'adapter_type': 1, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 255, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 1000, 'sids': [0, 0, 0, 0, 0, 1000, 300, 0], + 'head': 7, 'tail': 6, 'capacity': 7, + 'packet':send_pkt.__bytes__()} + binary_data = msgpack.dumps(verify_data) verify_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) verify_packets(self, verify_pkt, [2]) + finally: mrzcpd.stop() @@ -249,14 +255,20 @@ class MpackDeserializeTest(BaseTest): mrzcpd = Mrzcpd(deserialize_conf) mrzcpd.start() - hex_data = "8ba4706f727400ab7061636b65745f7479706500a86f6c5f666c61677300a8646174615f6c656e64a7706b745f6c656e64a473696473980000000000cd03e8cd012c00a76375725f736964cd03e8a46865616407a47461696c06a8636170616369747907a67061636b6574c46400010203040500060708090a0800450000560001000040111e48ac110164ac1102c804d200500042f90068656c6c6f20776f726c64000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e" - binary_data = bytes.fromhex(hex_data) + verify_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': 0, + 'is_ctrlbuf': 0, 'adapter_type': 1, 'adapter_id': 0, 'payload_offset': 0, 'user_0': 0, 'ef_link_id': 0, 'traffic_link_id': 255, + 'ef_peer_index': 0, 'port_ingress': 0, 'port_egress': 2, 'session_id': 0, 'cur_sid': 1000, 'sids': [0, 0, 0, 0, 0, 1000, 300, 0], + 'head': 7, 'tail': 6, 'capacity': 7, + 'packet':verify_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 - verify_pkt = simple_udp_packet(ip_src="172.17.1.100", ip_dst="172.17.2.200",udp_payload="hello world") verify_packets(self, verify_pkt, [1]) + finally: mrzcpd.stop() |
