summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2024-01-12 02:52:39 +0000
committersongyanchao <[email protected]>2024-01-12 02:52:39 +0000
commit5843c1833801d118b334382956ac393045fe7064 (patch)
tree6a5be95e488b4a87d6f4a7a86fdd942bdcfb5fdc /app/src
parent9b88e88f303b746256315c335c5191be9880c6a4 (diff)
🧪 test(TSG-17959): Add route ctx test for Etherfabric and Tera adapters.
Add route ctx test for Etherfabric and Tera adapters.
Diffstat (limited to 'app/src')
-rw-r--r--app/src/mrb.c248
1 files changed, 4 insertions, 244 deletions
diff --git a/app/src/mrb.c b/app/src/mrb.c
index b858cd0..90f8f04 100644
--- a/app/src/mrb.c
+++ b/app/src/mrb.c
@@ -1,14 +1,14 @@
#include <assert.h>
#include <marsio.h>
+#include <metadata_define.h>
#include <mrapp.h>
#include <mrb_define.h>
#include <protect.h>
+
#include <rte_common.h>
#include <rte_malloc.h>
#include <rte_mbuf.h>
-#include <sc_node_common.h>
-
void * marsio_buff_ctrlzone(marsio_buff_t * mr_buff, uint8_t id)
{
return NULL;
@@ -694,254 +694,14 @@ uint32_t marsio_buff_get_rehash_index(marsio_buff_t * m)
return __m->hash.usr;
}
-struct mrb_metadata_route_ctx
-{
- uint8_t dir;
- uint8_t adapter_type;
- uint16_t traffic_link_id;
- uint16_t port_ingress;
- uint16_t port_egress;
- uint32_t hash_usr;
-
- union {
- struct
- {
- uint16_t ef_peer_index;
- uint16_t ef_link_id;
- };
- struct
- {
- uint16_t vlan_tci;
- struct rte_ether_hdr eth_hdr;
- };
- };
-};
-
int marsio_buff_get_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, void * data, unsigned int sz_data)
{
- struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
- struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
-
- switch (type)
- {
- case MR_BUFF_REHASH_INDEX:
- if (unlikely(sz_data < sizeof(uint32_t)))
- {
- return -ENOMEM;
- }
-
- *(uint32_t *)(data) = (uint32_t)mbuf->hash.usr;
- return sizeof(uint32_t);
-
- case MR_BUFF_ROUTE_CTX: {
- if (unlikely(sz_data < sizeof(struct mrb_metadata_route_ctx)))
- {
- return -ENOMEM;
- }
-
- struct mrb_metadata_route_ctx * route_ctx = (struct mrb_metadata_route_ctx *)data;
- if (route_ctx == NULL)
- {
- return -EINVAL;
- }
-
- route_ctx->dir = mrb_metadata->dir;
- route_ctx->adapter_type = mrb_metadata->adapter_type;
- route_ctx->port_ingress = mrb_metadata->port_ingress;
- route_ctx->port_egress = mrb_metadata->port_egress;
- route_ctx->traffic_link_id = mrb_metadata->traffic_link_id;
- route_ctx->hash_usr = mbuf->hash.usr;
-
- if (mrb_metadata->adapter_type == ADAPTER_TYPE_EF)
- {
- route_ctx->ef_peer_index = mrb_metadata->ef_peer_index;
- route_ctx->ef_link_id = mrb_metadata->ef_link_id;
- }
- else if (mrb_metadata->adapter_type == ADAPTER_TYPE_TERA)
- {
- const struct rte_ether_hdr * eth_hdr = rte_pktmbuf_mtod(mbuf, const struct rte_ether_hdr *);
- const struct rte_vlan_hdr * vlan_hdr =
- rte_pktmbuf_mtod_offset(mbuf, const struct rte_vlan_hdr *, sizeof(struct rte_ether_hdr));
-
- route_ctx->vlan_tci = vlan_hdr->vlan_tci;
- rte_memcpy(&route_ctx->eth_hdr, eth_hdr, sizeof(struct rte_ether_hdr));
- }
-
- return sizeof(struct mrb_metadata_route_ctx);
- }
-
- case MR_BUFF_DIR: {
- if (unlikely(sz_data < sizeof(unsigned int)))
- {
- return -ENOMEM;
- }
-
- *(unsigned int *)(data) = (unsigned int)mrb_metadata->dir;
- return sizeof(unsigned int);
- }
-
- case MR_BUFF_SESSION_ID: {
- if (unlikely(sz_data < sizeof(uint64_t)))
- {
- return -ENOMEM;
- }
-
- *(uint64_t *)(data) = (uint64_t)mrb_metadata->session_id;
- return sizeof(uint64_t);
- }
-
- case MR_BUFF_PAYLOAD_OFFSET: {
- if (unlikely(sz_data < sizeof(uint16_t)))
- {
- return -ENOMEM;
- }
-
- *(uint16_t *)(data) = (uint16_t)mrb_metadata->payload_offset;
- return sizeof(uint16_t);
- }
-
- case MR_BUFF_LINK_ID: {
- if (unlikely(sz_data < sizeof(uint16_t)))
- {
- return -ENOMEM;
- }
-
- *(uint16_t *)(data) = (uint16_t)mrb_metadata->traffic_link_id;
- return sizeof(uint16_t);
- }
-
- case MR_BUFF_USER_0: {
- if (unlikely(sz_data < sizeof(uint16_t)))
- {
- return -ENOMEM;
- }
-
- *(uint16_t *)(data) = (uint16_t)mrb_metadata->user_0;
- return sizeof(uint16_t);
- }
-
- default:
- return -ENOTSUP;
- }
-
- return 0;
+ return buffer_metadata_get(m, type, data, sz_data);
}
int marsio_buff_set_metadata(marsio_buff_t * m, enum mr_buff_metadata_type type, void * data, unsigned int sz_data)
{
- struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
- struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
-
- switch (type)
- {
- case MR_BUFF_REHASH_INDEX:
- if (unlikely(sz_data < sizeof(uint32_t)))
- {
- return -ENOMEM;
- }
-
- mbuf->hash.usr = *(uint32_t *)data;
- return 0;
-
- 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);
-
- mrb_metadata->packet_create_from_nf = 1;
- mrb_metadata->dir = route_ctx->dir;
- mrb_metadata->adapter_type = route_ctx->adapter_type;
- mrb_metadata->traffic_link_id = route_ctx->traffic_link_id;
- mrb_metadata->port_ingress = route_ctx->port_ingress;
- mrb_metadata->port_egress = route_ctx->port_egress;
- mbuf->hash.usr = route_ctx->hash_usr;
-
- if (route_ctx->adapter_type == ADAPTER_TYPE_EF)
- {
- mrb_metadata->ef_peer_index = route_ctx->ef_peer_index;
- mrb_metadata->ef_link_id = route_ctx->ef_link_id;
- }
- else if (route_ctx->adapter_type == ADAPTER_TYPE_TERA)
- {
- /* Get original eth hdr */
- struct rte_ether_hdr * eth_hdr = rte_pktmbuf_mtod(mbuf, struct rte_ether_hdr *);
- rte_be16_t ether_type = eth_hdr->ether_type;
-
- /* Remove original eth hdr */
- rte_pktmbuf_adj(mbuf, sizeof(struct rte_ether_hdr));
-
- /* Encap the vlan hdr */
- struct rte_vlan_hdr * vlan_hdr =
- (struct rte_vlan_hdr *)rte_pktmbuf_prepend(mbuf, sizeof(struct rte_vlan_hdr));
- if (vlan_hdr == NULL)
- {
- return -ENOMEM;
- }
-
- vlan_hdr->vlan_tci = route_ctx->vlan_tci;
- vlan_hdr->eth_proto = ether_type;
-
- /* Encap the eth hdr */
- struct rte_ether_hdr * new_eth_hdr =
- (struct rte_ether_hdr *)rte_pktmbuf_prepend(mbuf, sizeof(struct rte_ether_hdr));
- if (new_eth_hdr == NULL)
- {
- return -ENOMEM;
- }
-
- rte_memcpy(new_eth_hdr, &route_ctx->eth_hdr, sizeof(struct rte_ether_hdr));
- }
-
- return 0;
- }
-
- case MR_BUFF_SESSION_ID: {
- mrb_metadata->session_id = *(uint64_t *)data;
- return 0;
- }
-
- case MR_BUFF_DIR: {
- mrb_metadata->dir = *(unsigned int *)data;
- return 0;
- }
-
- case MR_BUFF_PAYLOAD_OFFSET: {
- mrb_metadata->payload_offset = *(uint16_t *)data;
- return 0;
- }
-
- case MR_BUFF_USER_0: {
- mrb_metadata->user_0 = *(uint16_t *)data;
- return 0;
- }
-
- default:
- return -ENOTSUP;
- }
-
- return 0;
+ return buffer_metadata_set(m, type, data, sz_data);
}
int marsio_buff_get_sid_list(marsio_buff_t * m, sid_t * out_slist, uint8_t sz_out_slist)