diff options
| author | songyanchao <[email protected]> | 2023-10-26 09:18:55 +0000 |
|---|---|---|
| committer | songyanchao <[email protected]> | 2023-10-27 10:33:09 +0000 |
| commit | bfe8fbef28a1c1bea75767b891e2b6a56ac1d7aa (patch) | |
| tree | 7facda3af3704043cb84f56e56dc220173517929 /app/src | |
| parent | f87405271dbacdef55699282b24caead42af3368 (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.c | 76 |
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) |
