From: Anoob Joseph <anoobj@marvell.com>
To: Thomas Monjalon <thomas@monjalon.net>,
Akhil Goyal <gakhil@marvell.com>,
Jerin Jacob <jerinj@marvell.com>,
Konstantin Ananyev <konstantin.v.ananyev@yandex.ru>,
Bernard Iremonger <bernard.iremonger@intel.com>
Cc: "Volodymyr Fialko" <vfialko@marvell.com>,
"Hemant Agrawal" <hemant.agrawal@nxp.com>,
"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
"Kiran Kumar K" <kirankumark@marvell.com>,
dev@dpdk.org, "Olivier Matz" <olivier.matz@6wind.com>
Subject: [PATCH v2 19/22] pdcp: add support for status report
Date: Fri, 14 Apr 2023 23:15:09 +0530 [thread overview]
Message-ID: <20230414174512.642-20-anoobj@marvell.com> (raw)
In-Reply-To: <20230414174512.642-1-anoobj@marvell.com>
From: Volodymyr Fialko <vfialko@marvell.com>
Implement status report generation for PDCP entity.
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Volodymyr Fialko <vfialko@marvell.com>
---
lib/pdcp/pdcp_cnt.c | 158 ++++++++++++++++++++++++++++++++++++---
lib/pdcp/pdcp_cnt.h | 11 ++-
lib/pdcp/pdcp_ctrl_pdu.c | 34 ++++++++-
lib/pdcp/pdcp_ctrl_pdu.h | 3 +-
lib/pdcp/pdcp_entity.h | 2 +
lib/pdcp/pdcp_process.c | 21 +++++-
lib/pdcp/rte_pdcp.c | 32 ++++++--
7 files changed, 233 insertions(+), 28 deletions(-)
diff --git a/lib/pdcp/pdcp_cnt.c b/lib/pdcp/pdcp_cnt.c
index c9b952184b..af027b00d3 100644
--- a/lib/pdcp/pdcp_cnt.c
+++ b/lib/pdcp/pdcp_cnt.c
@@ -2,28 +2,164 @@
* Copyright(C) 2023 Marvell.
*/
+#include <rte_bitmap.h>
#include <rte_pdcp.h>
#include "pdcp_cnt.h"
+#include "pdcp_ctrl_pdu.h"
#include "pdcp_entity.h"
+#define SLAB_BYTE_SIZE (RTE_BITMAP_SLAB_BIT_SIZE / 8)
+
+uint32_t
+pdcp_cnt_bitmap_get_memory_footprint(const struct rte_pdcp_entity_conf *conf)
+{
+ uint32_t n_bits = pdcp_window_size_get(conf->pdcp_xfrm.sn_size);
+
+ return rte_bitmap_get_memory_footprint(n_bits);
+}
+
int
-pdcp_cnt_ring_create(struct rte_pdcp_entity *en, const struct rte_pdcp_entity_conf *conf)
+pdcp_cnt_bitmap_create(struct entity_priv_dl_part *dl, void *bitmap_mem, uint32_t window_size)
{
- struct entity_priv_dl_part *en_priv_dl;
- uint32_t window_sz;
+ uint32_t mem_size = rte_bitmap_get_memory_footprint(window_size);
- if (en == NULL || conf == NULL)
+ dl->bitmap.bmp = rte_bitmap_init(window_size, bitmap_mem, mem_size);
+ if (dl->bitmap.bmp == NULL)
return -EINVAL;
- if (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_UPLINK)
- return 0;
+ dl->bitmap.size = window_size;
- en_priv_dl = entity_dl_part_get(en);
- window_sz = pdcp_window_size_get(conf->pdcp_xfrm.sn_size);
+ return 0;
+}
- RTE_SET_USED(window_sz);
- RTE_SET_USED(en_priv_dl);
+void
+pdcp_cnt_bitmap_set(struct pdcp_cnt_bitmap bitmap, uint32_t count)
+{
+ rte_bitmap_set(bitmap.bmp, count % bitmap.size);
+}
- return 0;
+bool
+pdcp_cnt_bitmap_is_set(struct pdcp_cnt_bitmap bitmap, uint32_t count)
+{
+ return rte_bitmap_get(bitmap.bmp, count % bitmap.size);
+}
+
+void
+pdcp_cnt_bitmap_range_clear(struct pdcp_cnt_bitmap bitmap, uint32_t start, uint32_t stop)
+{
+ uint32_t i;
+
+ for (i = start; i < stop; i++)
+ rte_bitmap_clear(bitmap.bmp, i % bitmap.size);
+}
+
+uint16_t
+pdcp_cnt_get_bitmap_size(uint32_t pending_bytes)
+{
+ /*
+ * Round up bitmap size to slab size to operate only on slabs sizes, instead of individual
+ * bytes
+ */
+ return RTE_ALIGN_MUL_CEIL(pending_bytes, SLAB_BYTE_SIZE);
+}
+
+static __rte_always_inline uint64_t
+leftover_get(uint64_t slab, uint32_t shift, uint64_t mask)
+{
+ return (slab & mask) << shift;
+}
+
+void
+pdcp_cnt_report_fill(struct pdcp_cnt_bitmap bitmap, struct entity_state state,
+ uint8_t *data, uint16_t data_len)
+{
+ uint64_t slab = 0, next_slab = 0, leftover;
+ uint32_t zeros, report_len, diff;
+ uint32_t slab_id, next_slab_id;
+ uint32_t pos = 0, next_pos = 0;
+
+ const uint32_t start_count = state.rx_deliv + 1;
+ const uint32_t nb_slabs = bitmap.size / RTE_BITMAP_SLAB_BIT_SIZE;
+ const uint32_t nb_data_slabs = data_len / SLAB_BYTE_SIZE;
+ const uint32_t start_slab_id = start_count / RTE_BITMAP_SLAB_BIT_SIZE;
+ const uint32_t stop_slab_id = (start_slab_id + nb_data_slabs) % nb_slabs;
+ const uint32_t shift = start_count % RTE_BITMAP_SLAB_BIT_SIZE;
+ const uint32_t leftover_shift = shift ? RTE_BITMAP_SLAB_BIT_SIZE - shift : 0;
+ const uint8_t *data_end = RTE_PTR_ADD(data, data_len + SLAB_BYTE_SIZE);
+
+ /* NOTE: Mask required to workaround case - when shift is not needed */
+ const uint64_t leftover_mask = shift ? ~0 : 0;
+
+ /* NOTE: implement scan init at to set custom position */
+ __rte_bitmap_scan_init(bitmap.bmp);
+ while (true) {
+ assert(rte_bitmap_scan(bitmap.bmp, &pos, &slab) == 1);
+ slab_id = pos / RTE_BITMAP_SLAB_BIT_SIZE;
+ if (slab_id >= start_slab_id)
+ break;
+ }
+
+ report_len = nb_data_slabs;
+
+ if (slab_id > start_slab_id) {
+ /* Zero slabs at beginning */
+ zeros = (slab_id - start_slab_id - 1) * SLAB_BYTE_SIZE;
+ memset(data, 0, zeros);
+ data = RTE_PTR_ADD(data, zeros);
+ leftover = leftover_get(slab, leftover_shift, leftover_mask);
+ memcpy(data, &leftover, SLAB_BYTE_SIZE);
+ data = RTE_PTR_ADD(data, SLAB_BYTE_SIZE);
+ report_len -= (slab_id - start_slab_id);
+ }
+
+ while (report_len) {
+ rte_bitmap_scan(bitmap.bmp, &next_pos, &next_slab);
+ next_slab_id = next_pos / RTE_BITMAP_SLAB_BIT_SIZE;
+ diff = (next_slab_id + nb_slabs - slab_id) % nb_slabs;
+
+ /* If next_slab_id == slab_id - overlap */
+ diff += !(next_slab_id ^ slab_id) * nb_slabs;
+
+ /* Size check - next slab is outsize of size range */
+ if (diff > report_len) {
+ next_slab = 0;
+ next_slab_id = stop_slab_id;
+ diff = report_len;
+ }
+
+ report_len -= diff;
+
+ /* Calculate gap between slabs, taking wrap around into account */
+ zeros = (next_slab_id + nb_slabs - slab_id - 1) % nb_slabs;
+ if (zeros) {
+ /* Non continues slabs, align them individually */
+ slab >>= shift;
+ memcpy(data, &slab, SLAB_BYTE_SIZE);
+ data = RTE_PTR_ADD(data, SLAB_BYTE_SIZE);
+
+ /* Fill zeros between slabs */
+ zeros = (zeros - 1) * SLAB_BYTE_SIZE;
+ memset(data, 0, zeros);
+ data = RTE_PTR_ADD(data, zeros);
+
+ /* Align beginning of next slab */
+ leftover = leftover_get(next_slab, leftover_shift, leftover_mask);
+ memcpy(data, &leftover, SLAB_BYTE_SIZE);
+ data = RTE_PTR_ADD(data, SLAB_BYTE_SIZE);
+ } else {
+ /* Continues slabs, combine them */
+ uint64_t new_slab = (slab >> shift) |
+ leftover_get(next_slab, leftover_shift, leftover_mask);
+ memcpy(data, &new_slab, SLAB_BYTE_SIZE);
+ data = RTE_PTR_ADD(data, SLAB_BYTE_SIZE);
+ }
+
+ slab = next_slab;
+ pos = next_pos;
+ slab_id = next_slab_id;
+
+ };
+
+ assert(data < data_end);
}
diff --git a/lib/pdcp/pdcp_cnt.h b/lib/pdcp/pdcp_cnt.h
index bbda478b55..5941b7a406 100644
--- a/lib/pdcp/pdcp_cnt.h
+++ b/lib/pdcp/pdcp_cnt.h
@@ -9,6 +9,15 @@
#include "pdcp_entity.h"
-int pdcp_cnt_ring_create(struct rte_pdcp_entity *en, const struct rte_pdcp_entity_conf *conf);
+uint32_t pdcp_cnt_bitmap_get_memory_footprint(const struct rte_pdcp_entity_conf *conf);
+int pdcp_cnt_bitmap_create(struct entity_priv_dl_part *dl, void *bitmap_mem, uint32_t window_size);
+
+void pdcp_cnt_bitmap_set(struct pdcp_cnt_bitmap bitmap, uint32_t count);
+bool pdcp_cnt_bitmap_is_set(struct pdcp_cnt_bitmap bitmap, uint32_t count);
+void pdcp_cnt_bitmap_range_clear(struct pdcp_cnt_bitmap bitmap, uint32_t start, uint32_t stop);
+
+uint16_t pdcp_cnt_get_bitmap_size(uint32_t pending_bytes);
+void pdcp_cnt_report_fill(struct pdcp_cnt_bitmap bitmap, struct entity_state state,
+ uint8_t *data, uint16_t data_len);
#endif /* PDCP_CNT_H */
diff --git a/lib/pdcp/pdcp_ctrl_pdu.c b/lib/pdcp/pdcp_ctrl_pdu.c
index feb05fd863..e0ac2d3720 100644
--- a/lib/pdcp/pdcp_ctrl_pdu.c
+++ b/lib/pdcp/pdcp_ctrl_pdu.c
@@ -8,6 +8,14 @@
#include "pdcp_ctrl_pdu.h"
#include "pdcp_entity.h"
+#include "pdcp_cnt.h"
+
+static inline uint16_t
+round_up_bits(uint32_t bits)
+{
+ /* round up to the next multiple of 8 */
+ return RTE_ALIGN_MUL_CEIL(bits, 8) / 8;
+}
static __rte_always_inline void
pdcp_hdr_fill(struct rte_pdcp_up_ctrl_pdu_hdr *pdu_hdr, uint32_t rx_deliv)
@@ -19,11 +27,13 @@ pdcp_hdr_fill(struct rte_pdcp_up_ctrl_pdu_hdr *pdu_hdr, uint32_t rx_deliv)
}
int
-pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct rte_mbuf *m)
+pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct entity_priv_dl_part *dl,
+ struct rte_mbuf *m)
{
struct rte_pdcp_up_ctrl_pdu_hdr *pdu_hdr;
- uint32_t rx_deliv;
- int pdu_sz;
+ uint32_t rx_deliv, actual_sz;
+ uint16_t pdu_sz, bitmap_sz;
+ uint8_t *data;
if (!en_priv->flags.is_status_report_required)
return -EINVAL;
@@ -42,5 +52,21 @@ pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct rte_mbuf *m)
return 0;
}
- return -ENOTSUP;
+ actual_sz = RTE_MIN(round_up_bits(en_priv->state.rx_next - rx_deliv - 1),
+ RTE_PDCP_CTRL_PDU_SIZE_MAX - pdu_sz);
+ bitmap_sz = pdcp_cnt_get_bitmap_size(actual_sz);
+
+ data = (uint8_t *)rte_pktmbuf_append(m, pdu_sz + bitmap_sz);
+ if (data == NULL)
+ return -ENOMEM;
+
+ m->pkt_len = pdu_sz + actual_sz;
+ m->data_len = pdu_sz + actual_sz;
+
+ pdcp_hdr_fill((struct rte_pdcp_up_ctrl_pdu_hdr *)data, rx_deliv);
+
+ data = RTE_PTR_ADD(data, pdu_sz);
+ pdcp_cnt_report_fill(dl->bitmap, en_priv->state, data, bitmap_sz);
+
+ return 0;
}
diff --git a/lib/pdcp/pdcp_ctrl_pdu.h b/lib/pdcp/pdcp_ctrl_pdu.h
index a2424fbd10..2a87928b88 100644
--- a/lib/pdcp/pdcp_ctrl_pdu.h
+++ b/lib/pdcp/pdcp_ctrl_pdu.h
@@ -10,6 +10,7 @@
#include "pdcp_entity.h"
int
-pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct rte_mbuf *m);
+pdcp_ctrl_pdu_status_gen(struct entity_priv *en_priv, struct entity_priv_dl_part *dl,
+ struct rte_mbuf *m);
#endif /* PDCP_CTRL_PDU_H */
diff --git a/lib/pdcp/pdcp_entity.h b/lib/pdcp/pdcp_entity.h
index ca98a1d0f7..8e1d6254dd 100644
--- a/lib/pdcp/pdcp_entity.h
+++ b/lib/pdcp/pdcp_entity.h
@@ -182,6 +182,8 @@ struct entity_priv_dl_part {
struct pdcp_t_reordering t_reorder;
/** Reorder packet buffer */
struct pdcp_reorder reorder;
+ /** Bitmap memory region */
+ uint8_t bitmap_mem[0];
};
struct entity_priv_ul_part {
diff --git a/lib/pdcp/pdcp_process.c b/lib/pdcp/pdcp_process.c
index 91b87a2a81..cdadc9b6b8 100644
--- a/lib/pdcp/pdcp_process.c
+++ b/lib/pdcp/pdcp_process.c
@@ -9,6 +9,7 @@
#include <rte_pdcp.h>
#include <rte_pdcp_hdr.h>
+#include "pdcp_cnt.h"
#include "pdcp_crypto.h"
#include "pdcp_entity.h"
#include "pdcp_process.h"
@@ -809,6 +810,16 @@ pdcp_packet_strip(struct rte_mbuf *mb, const uint32_t hdr_trim_sz, const bool tr
}
}
+static inline void
+pdcp_rx_deliv_set(const struct rte_pdcp_entity *entity, uint32_t rx_deliv)
+{
+ struct entity_priv_dl_part *dl = entity_dl_part_get(entity);
+ struct entity_priv *en_priv = entity_priv_get(entity);
+
+ pdcp_cnt_bitmap_range_clear(dl->bitmap, en_priv->state.rx_deliv, rx_deliv);
+ en_priv->state.rx_deliv = rx_deliv;
+}
+
static inline int
pdcp_post_process_update_entity_state(const struct rte_pdcp_entity *entity,
const uint32_t count, struct rte_mbuf *mb,
@@ -829,11 +840,15 @@ pdcp_post_process_update_entity_state(const struct rte_pdcp_entity *entity,
if (count >= en_priv->state.rx_next)
en_priv->state.rx_next = count + 1;
+ if (unlikely(pdcp_cnt_bitmap_is_set(dl->bitmap, count)))
+ return -EEXIST;
+
+ pdcp_cnt_bitmap_set(dl->bitmap, count);
pdcp_packet_strip(mb, hdr_trim_sz, trim_mac);
if (en_priv->flags.is_out_of_order_delivery) {
out_mb[0] = mb;
- en_priv->state.rx_deliv = count + 1;
+ pdcp_rx_deliv_set(entity, count + 1);
return 1;
}
@@ -860,7 +875,7 @@ pdcp_post_process_update_entity_state(const struct rte_pdcp_entity *entity,
}
/* Processed should never exceed the window size */
- en_priv->state.rx_deliv = count + processed;
+ pdcp_rx_deliv_set(entity, count + processed);
} else {
if (!reorder->is_active)
@@ -1317,7 +1332,7 @@ rte_pdcp_t_reordering_expiry_handle(const struct rte_pdcp_entity *entity, struct
* - update RX_DELIV to the COUNT value of the first PDCP SDU which has not been delivered
* to upper layers, with COUNT value >= RX_REORD;
*/
- en_priv->state.rx_deliv = en_priv->state.rx_reord + nb_seq;
+ pdcp_rx_deliv_set(entity, en_priv->state.rx_reord + nb_seq);
/*
* - if RX_DELIV < RX_NEXT:
diff --git a/lib/pdcp/rte_pdcp.c b/lib/pdcp/rte_pdcp.c
index 755d592578..ce846d687e 100644
--- a/lib/pdcp/rte_pdcp.c
+++ b/lib/pdcp/rte_pdcp.c
@@ -12,6 +12,8 @@
#include "pdcp_entity.h"
#include "pdcp_process.h"
+static int bitmap_mem_offset;
+
static int
pdcp_entity_size_get(const struct rte_pdcp_entity_conf *conf)
{
@@ -19,9 +21,12 @@ pdcp_entity_size_get(const struct rte_pdcp_entity_conf *conf)
size = sizeof(struct rte_pdcp_entity) + sizeof(struct entity_priv);
- if (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK)
+ if (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK) {
size += sizeof(struct entity_priv_dl_part);
- else if (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_UPLINK)
+ size = RTE_CACHE_LINE_ROUNDUP(size);
+ bitmap_mem_offset = size;
+ size += pdcp_cnt_bitmap_get_memory_footprint(conf);
+ } else if (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_UPLINK)
size += sizeof(struct entity_priv_ul_part);
else
return -EINVAL;
@@ -34,11 +39,24 @@ pdcp_dl_establish(struct rte_pdcp_entity *entity, const struct rte_pdcp_entity_c
{
const uint32_t window_size = pdcp_window_size_get(conf->pdcp_xfrm.sn_size);
struct entity_priv_dl_part *dl = entity_dl_part_get(entity);
+ void *bitmap_mem;
+ int ret;
entity->max_pkt_cache = RTE_MAX(entity->max_pkt_cache, window_size);
dl->t_reorder.handle = conf->t_reordering;
- return pdcp_reorder_create(&dl->reorder, window_size);
+ ret = pdcp_reorder_create(&dl->reorder, window_size);
+ if (ret)
+ return ret;
+
+ bitmap_mem = RTE_PTR_ADD(entity, bitmap_mem_offset);
+ ret = pdcp_cnt_bitmap_create(dl, bitmap_mem, window_size);
+ if (ret) {
+ pdcp_reorder_destroy(&dl->reorder);
+ return ret;
+ }
+
+ return 0;
}
struct rte_pdcp_entity *
@@ -110,10 +128,6 @@ rte_pdcp_entity_establish(const struct rte_pdcp_entity_conf *conf)
goto crypto_sess_destroy;
}
- ret = pdcp_cnt_ring_create(entity, conf);
- if (ret)
- goto crypto_sess_destroy;
-
return entity;
crypto_sess_destroy:
@@ -192,6 +206,7 @@ struct rte_mbuf *
rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity,
enum rte_pdcp_ctrl_pdu_type type)
{
+ struct entity_priv_dl_part *dl;
struct entity_priv *en_priv;
struct rte_mbuf *m;
int ret;
@@ -202,6 +217,7 @@ rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity,
}
en_priv = entity_priv_get(pdcp_entity);
+ dl = entity_dl_part_get(pdcp_entity);
m = rte_pktmbuf_alloc(en_priv->ctr_pdu_pool);
if (m == NULL) {
@@ -211,7 +227,7 @@ rte_pdcp_control_pdu_create(struct rte_pdcp_entity *pdcp_entity,
switch (type) {
case RTE_PDCP_CTRL_PDU_TYPE_STATUS_REPORT:
- ret = pdcp_ctrl_pdu_status_gen(en_priv, m);
+ ret = pdcp_ctrl_pdu_status_gen(en_priv, dl, m);
break;
default:
ret = -ENOTSUP;
--
2.25.1
next prev parent reply other threads:[~2023-04-14 17:48 UTC|newest]
Thread overview: 192+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 5:21 [RFC 0/1] lib: add pdcp protocol Anoob Joseph
2022-10-27 5:21 ` [RFC 1/1] " Anoob Joseph
2022-12-13 7:01 ` [RFC 0/1] " Akhil Goyal
2022-12-20 12:15 ` Anoob Joseph
2022-12-22 9:25 ` [PATCH 0/5] " Anoob Joseph
2022-12-22 9:25 ` [PATCH 1/5] net: add PDCP header Anoob Joseph
2023-01-18 16:36 ` Thomas Monjalon
2023-01-18 17:39 ` [EXT] " Anoob Joseph
2023-01-19 8:05 ` Thomas Monjalon
2023-01-23 9:21 ` Anoob Joseph
2023-01-23 15:31 ` Thomas Monjalon
2022-12-22 9:25 ` [PATCH 2/5] lib: add pdcp protocol Anoob Joseph
2023-01-18 16:26 ` Akhil Goyal
2023-02-13 10:59 ` Anoob Joseph
2022-12-22 9:25 ` [PATCH 3/5] app/test: add lib pdcp tests Anoob Joseph
2022-12-22 9:25 ` [PATCH 4/5] app/test: pdcp HFN tests in combined mode Anoob Joseph
2022-12-22 9:25 ` [PATCH 5/5] doc: add PDCP library guide Anoob Joseph
2023-01-18 16:39 ` [PATCH 0/5] lib: add pdcp protocol Thomas Monjalon
2023-01-23 17:36 ` Jerin Jacob
2023-04-14 17:44 ` [PATCH v2 00/22] " Anoob Joseph
2023-04-14 17:44 ` [PATCH v2 01/22] net: add PDCP header Anoob Joseph
2023-05-16 14:02 ` Akhil Goyal
2023-04-14 17:44 ` [PATCH v2 02/22] lib: add pdcp protocol Anoob Joseph
2023-05-16 15:30 ` Akhil Goyal
2023-05-18 6:53 ` Anoob Joseph
2023-05-18 7:40 ` Akhil Goyal
2023-05-18 8:32 ` Anoob Joseph
2023-05-18 8:46 ` Akhil Goyal
2023-05-22 7:03 ` Anoob Joseph
2023-04-14 17:44 ` [PATCH v2 03/22] pdcp: add pre and post-process Anoob Joseph
2023-05-16 15:43 ` Akhil Goyal
2023-04-14 17:44 ` [PATCH v2 04/22] pdcp: add packet group Anoob Joseph
2023-05-16 15:56 ` Akhil Goyal
2023-05-18 8:12 ` Anoob Joseph
2023-04-14 17:44 ` [PATCH v2 05/22] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-16 16:21 ` Akhil Goyal
2023-04-14 17:44 ` [PATCH v2 06/22] pdcp: add pre and post process for UL Anoob Joseph
2023-05-18 6:38 ` Akhil Goyal
2023-04-14 17:44 ` [PATCH v2 07/22] pdcp: add pre and post process for DL Anoob Joseph
2023-05-18 6:47 ` Akhil Goyal
2023-05-18 7:33 ` Anoob Joseph
2023-04-14 17:44 ` [PATCH v2 08/22] pdcp: add IV generation routines Anoob Joseph
2023-05-18 6:51 ` Akhil Goyal
2023-04-14 17:44 ` [PATCH v2 09/22] app/test: add lib pdcp tests Anoob Joseph
2023-05-18 8:03 ` Akhil Goyal
2023-05-18 11:31 ` Anoob Joseph
2023-05-18 12:06 ` Akhil Goyal
2023-05-19 10:31 ` Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 10/22] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 11/22] doc: add PDCP library guide Anoob Joseph
2023-05-18 8:26 ` Akhil Goyal
2023-05-22 10:22 ` Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 12/22] pdcp: add control PDU handling Anoob Joseph
2023-05-18 9:15 ` Akhil Goyal
2023-05-22 11:09 ` Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 13/22] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 14/22] test/pdcp: add in-order delivery cases Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 15/22] pdcp: add timer callback handlers Anoob Joseph
2023-05-18 9:37 ` Akhil Goyal
2023-04-14 17:45 ` [PATCH v2 16/22] pdcp: add timer expiry handle Anoob Joseph
2023-05-18 9:43 ` Akhil Goyal
2023-05-22 11:34 ` Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 17/22] test/pdcp: add timer expiry cases Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 18/22] test/pdcp: add timer restart case Anoob Joseph
2023-04-14 17:45 ` Anoob Joseph [this message]
2023-04-14 17:45 ` [PATCH v2 20/22] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 21/22] pdcp: add thread safe processing Anoob Joseph
2023-04-14 17:45 ` [PATCH v2 22/22] test/pdcp: add PDCP status report cases Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 00/22] lib: add pdcp protocol Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 01/22] net: add PDCP header Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 02/22] lib: add pdcp protocol Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 03/22] pdcp: add pre and post-process Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 04/22] pdcp: add packet group Anoob Joseph
2023-05-24 16:00 ` [PATCH v3 05/22] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 06/22] pdcp: add pre and post process for UL Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 07/22] pdcp: add pre and post process for DL Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 08/22] pdcp: add IV generation routines Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 09/22] app/test: add lib pdcp tests Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 10/22] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 11/22] doc: add PDCP library guide Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 12/22] pdcp: add control PDU handling for status report Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 13/22] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 14/22] test/pdcp: add in-order delivery cases Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 15/22] pdcp: add timer callback handlers Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 16/22] pdcp: add timer expiry handle Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 17/22] test/pdcp: add timer expiry cases Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 18/22] test/pdcp: add timer restart case Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 19/22] pdcp: add support for status report Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 20/22] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 21/22] pdcp: add thread safe processing Anoob Joseph
2023-05-24 18:31 ` Stephen Hemminger
2023-05-25 8:15 ` [EXT] " Anoob Joseph
2023-05-25 15:25 ` Stephen Hemminger
2023-05-25 15:37 ` Anoob Joseph
2023-05-24 16:01 ` [PATCH v3 22/22] test/pdcp: add PDCP status report cases Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 00/22] lib: add pdcp protocol Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 01/22] net: add PDCP header Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 02/22] lib: add pdcp protocol Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 03/22] pdcp: add pre and post-process Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 04/22] pdcp: add packet group Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 05/22] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 06/22] pdcp: add pre and post process for UL Anoob Joseph
2023-05-26 21:01 ` [PATCH v4 07/22] pdcp: add pre and post process for DL Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 08/22] pdcp: add IV generation routines Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 09/22] app/test: add lib pdcp tests Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 10/22] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 11/22] doc: add PDCP library guide Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 12/22] pdcp: add control PDU handling for status report Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 13/22] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 14/22] test/pdcp: add in-order delivery cases Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 15/22] pdcp: add timer callback handlers Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 16/22] pdcp: add timer expiry handle Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 17/22] test/pdcp: add timer expiry cases Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 18/22] test/pdcp: add timer restart case Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 19/22] pdcp: add support for status report Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 20/22] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-05-26 21:02 ` [PATCH v4 21/22] pdcp: add thread safe processing Anoob Joseph
2023-05-26 22:11 ` Stephen Hemminger
2023-05-27 5:24 ` [EXT] " Anoob Joseph
2023-05-27 7:17 ` Anoob Joseph
2023-05-26 22:15 ` Stephen Hemminger
2023-05-26 21:02 ` [PATCH v4 22/22] test/pdcp: add PDCP status report cases Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 00/21] lib: add pdcp protocol Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 01/21] net: add PDCP header Anoob Joseph
2023-05-30 8:51 ` Akhil Goyal
2023-05-27 7:15 ` [PATCH v5 02/21] lib: add pdcp protocol Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 03/21] pdcp: add pre and post-process Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 04/21] pdcp: add packet group Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 05/21] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 06/21] pdcp: add pre and post process for UL Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 07/21] pdcp: add pre and post process for DL Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 08/21] pdcp: add IV generation routines Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 09/21] app/test: add lib pdcp tests Anoob Joseph
2023-05-27 7:15 ` [PATCH v5 10/21] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 11/21] doc: add PDCP library guide Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 12/21] pdcp: add control PDU handling for status report Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 13/21] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 14/21] test/pdcp: add in-order delivery cases Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 15/21] pdcp: add timer callback handlers Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 16/21] pdcp: add timer expiry handle Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 17/21] test/pdcp: add timer expiry cases Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 18/21] test/pdcp: add timer restart case Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 19/21] pdcp: add support for status report Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 20/21] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-05-27 7:16 ` [PATCH v5 21/21] test/pdcp: add PDCP status report cases Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 00/21] lib: add pdcp protocol Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 01/21] net: add PDCP header Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 02/21] lib: add pdcp protocol Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 03/21] pdcp: add pre and post-process Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 04/21] pdcp: add packet group Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 05/21] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 06/21] pdcp: add pre and post process for UL Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 07/21] pdcp: add pre and post process for DL Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 08/21] pdcp: add IV generation routines Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 09/21] app/test: add lib pdcp tests Anoob Joseph
2023-05-27 8:58 ` [PATCH v5 10/21] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 11/21] doc: add PDCP library guide Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 12/21] pdcp: add control PDU handling for status report Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 13/21] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 14/21] test/pdcp: add in-order delivery cases Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 15/21] pdcp: add timer callback handlers Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 16/21] pdcp: add timer expiry handle Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 17/21] test/pdcp: add timer expiry cases Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 18/21] test/pdcp: add timer restart case Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 19/21] pdcp: add support for status report Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 20/21] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-05-27 8:59 ` [PATCH v5 21/21] test/pdcp: add PDCP status report cases Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 00/21] lib: add pdcp protocol Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 01/21] net: add PDCP header Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 02/21] lib: add pdcp protocol Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 03/21] pdcp: add pre and post-process Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 04/21] pdcp: add packet group Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 05/21] pdcp: add crypto session create and destroy Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 06/21] pdcp: add pre and post process for UL Anoob Joseph
2023-06-10 22:50 ` Thomas Monjalon
2023-06-12 5:19 ` [EXT] " Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 07/21] pdcp: add pre and post process for DL Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 08/21] pdcp: add IV generation routines Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 09/21] app/test: add lib pdcp tests Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 10/21] test/pdcp: pdcp HFN tests in combined mode Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 11/21] doc: add PDCP library guide Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 12/21] pdcp: add control PDU handling for status report Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 13/21] pdcp: implement t-Reordering and packet buffering Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 14/21] test/pdcp: add in-order delivery cases Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 15/21] pdcp: add timer callback handlers Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 16/21] pdcp: add timer expiry handle Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 17/21] test/pdcp: add timer expiry cases Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 18/21] test/pdcp: add timer restart case Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 19/21] pdcp: add support for status report Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 20/21] pdcp: allocate reorder buffer alongside with entity Anoob Joseph
2023-05-30 10:01 ` [PATCH v6 21/21] test/pdcp: add PDCP status report cases Anoob Joseph
2023-06-01 8:47 ` [PATCH v6 00/21] lib: add pdcp protocol Akhil Goyal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230414174512.642-20-anoobj@marvell.com \
--to=anoobj@marvell.com \
--cc=bernard.iremonger@intel.com \
--cc=dev@dpdk.org \
--cc=gakhil@marvell.com \
--cc=hemant.agrawal@nxp.com \
--cc=jerinj@marvell.com \
--cc=kirankumark@marvell.com \
--cc=konstantin.v.ananyev@yandex.ru \
--cc=mattias.ronnblom@ericsson.com \
--cc=olivier.matz@6wind.com \
--cc=thomas@monjalon.net \
--cc=vfialko@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).