diff options
| author | Lu Qiuwen <[email protected]> | 2023-07-07 14:26:45 +0800 |
|---|---|---|
| committer | Lu Qiuwen <[email protected]> | 2023-07-07 16:12:24 +0800 |
| commit | 5c1f281fcf81e579aeb7c35a2506c93f193134e1 (patch) | |
| tree | 2dfe3f602e11bea79eb0ceced3c08f478a01d5c9 | |
| parent | 4ffeb73a9eba7b3de6e1b5abfd641959415663c3 (diff) | |
TSG-15972 修正mbuf元信息中VLAN_TCI字段没有被填充的问题。v4.6.37-20230707
| -rw-r--r-- | app/src/mrb.c | 23 |
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); |
