summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorsongyanchao <[email protected]>2023-10-26 09:18:55 +0000
committersongyanchao <[email protected]>2023-10-27 10:33:09 +0000
commitbfe8fbef28a1c1bea75767b891e2b6a56ac1d7aa (patch)
tree7facda3af3704043cb84f56e56dc220173517929 /app/src
parentf87405271dbacdef55699282b24caead42af3368 (diff)
✨ feat(DPISDN-23): Add 'sid_ring_queue' data structure and associated functions to infra
Add 'sid_ring_queue' data structure and associated functions to infra
Diffstat (limited to 'app/src')
-rw-r--r--app/src/mrb.c76
1 files changed, 4 insertions, 72 deletions
diff --git a/app/src/mrb.c b/app/src/mrb.c
index 330e516..e1c5248 100644
--- a/app/src/mrb.c
+++ b/app/src/mrb.c
@@ -856,20 +856,7 @@ int marsio_buff_get_sid_list(marsio_buff_t * m, sid_t * out_slist, uint8_t sz_ou
{
struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
-
- uint8_t out_i = 0;
- uint8_t sid_tail = mrb_metadata->sid_tail;
- for (uint8_t i = 0; i < (RTE_DIM(mrb_metadata->sids) - mrb_metadata->sid_capacity) && out_i < sz_out_slist;
- i++, out_i++)
- {
- out_slist[out_i] = mrb_metadata->sids[sid_tail];
- if (++sid_tail >= RTE_DIM(mrb_metadata->sids))
- {
- sid_tail = 0;
- }
- }
-
- return out_i;
+ return get_sid_list_from_ring_queue(&mrb_metadata->sid_ring_queue, out_slist, sz_out_slist);
}
int marsio_buff_set_sid_list(marsio_buff_t * m, sid_t * slist, uint8_t sz_slist)
@@ -877,76 +864,21 @@ int marsio_buff_set_sid_list(marsio_buff_t * m, sid_t * slist, uint8_t sz_slist)
struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
- assert(sz_slist <= RTE_DIM(mrb_metadata->sids));
- if (sz_slist > RTE_DIM(mrb_metadata->sids))
- {
- return -ENOMEM;
- }
-
- for (uint8_t i = 0; i < sz_slist; i++)
- {
- mrb_metadata->sids[i] = slist[i];
- }
-
- mrb_metadata->sid_tail = 0;
- mrb_metadata->sid_head = sz_slist;
- mrb_metadata->sid_capacity = RTE_DIM(mrb_metadata->sids) - sz_slist;
- return 0;
+ return sid_ring_queue_init_form_sid_list(&mrb_metadata->sid_ring_queue, slist, sz_slist);
}
int marsio_buff_append_sid_list(marsio_buff_t * m, sid_t * slist, uint8_t sz_slist)
{
struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
-
- assert(sz_slist <= RTE_DIM(mrb_metadata->sids));
- if (unlikely(sz_slist > mrb_metadata->sid_capacity))
- {
- return -ENOMEM;
- }
-
- for (uint32_t index = 0; index < sz_slist; index++)
- {
- mrb_metadata->sids[mrb_metadata->sid_head] = slist[index];
- mrb_metadata->sid_head++;
-
- if (unlikely(mrb_metadata->sid_head == RTE_DIM(mrb_metadata->sids)))
- {
- mrb_metadata->sid_head = 0;
- }
- }
-
- mrb_metadata->sid_capacity -= sz_slist;
- return 0;
+ return append_sid_list_to_ring_queue(&mrb_metadata->sid_ring_queue, slist, sz_slist);
}
int marsio_buff_prepend_sid_list(marsio_buff_t * m, sid_t * slist, uint8_t sz_slist)
{
struct rte_mbuf * mbuf = (struct rte_mbuf *)m;
struct mrb_metadata * mrb_metadata = (struct mrb_metadata *)mrbuf_cz_data(mbuf, MR_NODE_CTRLZONE_ID);
-
- assert(sz_slist <= RTE_DIM(mrb_metadata->sids));
- if (unlikely(sz_slist > mrb_metadata->sid_capacity))
- {
- return -ENOMEM;
- }
-
- for (uint32_t index = 0; index < sz_slist; index++)
- {
- if (likely(mrb_metadata->sid_tail != 0))
- {
- mrb_metadata->sid_tail--;
- }
- else
- {
- mrb_metadata->sid_tail = RTE_DIM(mrb_metadata->sids) - 1;
- }
- mrb_metadata->sids[mrb_metadata->sid_tail] = slist[sz_slist - index - 1];
- }
-
- mrb_metadata->sid_capacity -= sz_slist;
-
- return 0;
+ return prepend_sid_list_to_ring_queue(&mrb_metadata->sid_ring_queue, slist, sz_slist);
}
int marsio_buff_get_current_sid(marsio_buff_t * m, sid_t * sid)