summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2024-01-05 06:34:01 +0000
committersongyanchao <[email protected]>2024-01-05 06:34:01 +0000
commit0e9d87a3083386ea2da7ce82d0088e4ac7dc266a (patch)
tree744a5728f2a677876e88e405caf9f2e589bcdb27
parenta157ece86c08b1a157f19213bac719f03c4337ac (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--.gitignore2
-rw-r--r--service/src/node_phydev.c62
-rw-r--r--test/msgpack_test.py22
3 files changed, 70 insertions, 16 deletions
diff --git a/.gitignore b/.gitignore
index 29fd9a0..cd76df8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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()