summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorLu Qiuwen <[email protected]>2023-07-07 14:26:45 +0800
committerLu Qiuwen <[email protected]>2023-07-07 16:12:24 +0800
commit5c1f281fcf81e579aeb7c35a2506c93f193134e1 (patch)
tree2dfe3f602e11bea79eb0ceced3c08f478a01d5c9 /app
parent4ffeb73a9eba7b3de6e1b5abfd641959415663c3 (diff)
TSG-15972 修正mbuf元信息中VLAN_TCI字段没有被填充的问题。v4.6.37-20230707
Diffstat (limited to 'app')
-rw-r--r--app/src/mrb.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/app/src/mrb.c b/app/src/mrb.c
index 3377a8e..757fd5a 100644
--- a/app/src/mrb.c
+++ b/app/src/mrb.c
@@ -778,6 +778,29 @@ int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type,
switch (type)
{
+ case MR_BUFF_METADATA_VLAN_TCI:
+ if (unlikely(sz_data < sizeof(uint16_t)))
+ {
+ return -ENOMEM;
+ }
+
+ /* we do not want to relay on the hardware offload capability */
+ struct rte_ether_hdr * ether_hdr = (struct rte_ether_hdr *)rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *);
+
+ /* already has a vlan header */
+ if (ether_hdr->ether_type == rte_cpu_to_be_16(RTE_ETHER_TYPE_VLAN))
+ {
+ struct rte_vlan_hdr * vlan_hdr = (struct rte_vlan_hdr *)(ether_hdr + 1);
+ vlan_hdr->vlan_tci = rte_cpu_to_be_16(*(uint16_t *)data);
+ }
+ else
+ {
+ mbuf->vlan_tci = *(uint16_t *)data;
+ rte_vlan_insert(&mbuf);
+ }
+
+ return 0;
+
case MR_BUFF_ROUTE_CTX: {
struct mrb_metadata_route_ctx * route_ctx = (struct mrb_metadata_route_ctx *)data;
assert(route_ctx != NULL);