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>
Cc: "Hemant Agrawal" <hemant.agrawal@nxp.com>,
"Mattias Rönnblom" <mattias.ronnblom@ericsson.com>,
"Kiran Kumar K" <kirankumark@marvell.com>,
"Volodymyr Fialko" <vfialko@marvell.com>,
dev@dpdk.org, "Olivier Matz" <olivier.matz@6wind.com>,
"Stephen Hemminger" <stephen@networkplumber.org>
Subject: [PATCH v6 07/21] pdcp: add pre and post process for DL
Date: Tue, 30 May 2023 15:31:44 +0530 [thread overview]
Message-ID: <20230530100158.1428-8-anoobj@marvell.com> (raw)
In-Reply-To: <20230530100158.1428-1-anoobj@marvell.com>
Add routines to perform pre & post processing for down link entities.
Signed-off-by: Anoob Joseph <anoobj@marvell.com>
Signed-off-by: Kiran Kumar K <kirankumark@marvell.com>
Signed-off-by: Volodymyr Fialko <vfialko@marvell.com>
---
lib/pdcp/pdcp_entity.h | 2 +
lib/pdcp/pdcp_process.c | 384 ++++++++++++++++++++++++++++++++++++++++
lib/pdcp/pdcp_process.h | 11 ++
lib/pdcp/rte_pdcp.c | 23 +++
4 files changed, 420 insertions(+)
diff --git a/lib/pdcp/pdcp_entity.h b/lib/pdcp/pdcp_entity.h
index 23628ebad4..1d4a43a3bc 100644
--- a/lib/pdcp/pdcp_entity.h
+++ b/lib/pdcp/pdcp_entity.h
@@ -13,6 +13,8 @@
struct entity_priv;
+#define PDCP_HFN_MIN 0
+
/* IV generation function based on the entity configuration */
typedef void (*iv_gen_t)(struct rte_crypto_op *cop, const struct entity_priv *en_priv,
uint32_t count);
diff --git a/lib/pdcp/pdcp_process.c b/lib/pdcp/pdcp_process.c
index 9b7de39db6..bd75e6f802 100644
--- a/lib/pdcp/pdcp_process.c
+++ b/lib/pdcp/pdcp_process.c
@@ -6,6 +6,7 @@
#include <rte_crypto_sym.h>
#include <rte_cryptodev.h>
#include <rte_memcpy.h>
+#include <rte_mbuf_dyn.h>
#include <rte_pdcp.h>
#include <rte_pdcp_hdr.h>
@@ -333,9 +334,353 @@ pdcp_post_process_ul(const struct rte_pdcp_entity *entity,
return nb_success;
}
+static inline int
+pdcp_sn_count_get(const uint32_t rx_deliv, int32_t rsn, uint32_t *count,
+ const enum rte_security_pdcp_sn_size sn_size)
+{
+ const uint32_t rx_deliv_sn = pdcp_sn_from_count_get(rx_deliv, sn_size);
+ const uint32_t window_sz = pdcp_window_size_get(sn_size);
+ uint32_t rhfn;
+
+ rhfn = pdcp_hfn_from_count_get(rx_deliv, sn_size);
+
+ if (rsn < (int32_t)(rx_deliv_sn - window_sz)) {
+ if (unlikely(rhfn == pdcp_hfn_max(sn_size)))
+ return -ERANGE;
+ rhfn += 1;
+ } else if ((uint32_t)rsn >= (rx_deliv_sn + window_sz)) {
+ if (unlikely(rhfn == PDCP_HFN_MIN))
+ return -ERANGE;
+ rhfn -= 1;
+ }
+
+ *count = pdcp_count_from_hfn_sn_get(rhfn, rsn, sn_size);
+
+ return 0;
+}
+
+static inline uint16_t
+pdcp_pre_process_uplane_sn_12_dl_flags(const struct rte_pdcp_entity *entity,
+ struct rte_mbuf *in_mb[], struct rte_crypto_op *cop[],
+ uint16_t num, uint16_t *nb_err_ret,
+ const bool is_integ_protected)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+ struct rte_pdcp_up_data_pdu_sn_12_hdr *pdu_hdr;
+ uint16_t nb_cop, nb_prep = 0, nb_err = 0;
+ rte_pdcp_dynfield_t *mb_dynfield;
+ struct rte_mbuf *mb;
+ int32_t rsn = 0;
+ uint32_t count;
+ int i;
+
+ const uint8_t data_offset = en_priv->hdr_sz + en_priv->aad_sz;
+
+ nb_cop = rte_crypto_op_bulk_alloc(en_priv->cop_pool, RTE_CRYPTO_OP_TYPE_SYMMETRIC, cop,
+ num);
+
+ const uint32_t rx_deliv = en_priv->state.rx_deliv;
+
+ for (i = 0; i < nb_cop; i++) {
+ mb = in_mb[i];
+ pdu_hdr = rte_pktmbuf_mtod(mb, struct rte_pdcp_up_data_pdu_sn_12_hdr *);
+
+ /* Check for PDU type */
+ if (likely(pdu_hdr->d_c == RTE_PDCP_PDU_TYPE_DATA)) {
+ rsn = ((pdu_hdr->sn_11_8 << 8) | (pdu_hdr->sn_7_0));
+ } else {
+ /** NOTE: Control PDU not handled.*/
+ in_mb[nb_err++] = mb;
+ continue;
+ }
+
+ if (unlikely(pdcp_sn_count_get(rx_deliv, rsn, &count,
+ RTE_SECURITY_PDCP_SN_SIZE_12))) {
+ in_mb[nb_err++] = mb;
+ continue;
+ }
+
+ cop_prepare(en_priv, mb, cop[nb_prep++], data_offset, count, is_integ_protected);
+
+ mb_dynfield = pdcp_dynfield(mb);
+ *mb_dynfield = count;
+ }
+
+ if (unlikely(nb_err))
+ rte_mempool_put_bulk(en_priv->cop_pool, (void *)&cop[nb_prep], nb_cop - nb_prep);
+
+ *nb_err_ret = num - nb_prep;
+
+ return nb_prep;
+}
+
+static uint16_t
+pdcp_pre_process_uplane_sn_12_dl_ip(const struct rte_pdcp_entity *entity, struct rte_mbuf *mb[],
+ struct rte_crypto_op *cop[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_pre_process_uplane_sn_12_dl_flags(entity, mb, cop, num, nb_err, true);
+}
+
+static uint16_t
+pdcp_pre_process_uplane_sn_12_dl(const struct rte_pdcp_entity *entity, struct rte_mbuf *mb[],
+ struct rte_crypto_op *cop[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_pre_process_uplane_sn_12_dl_flags(entity, mb, cop, num, nb_err, false);
+}
+
+static inline uint16_t
+pdcp_pre_process_uplane_sn_18_dl_flags(const struct rte_pdcp_entity *entity,
+ struct rte_mbuf *in_mb[], struct rte_crypto_op *cop[],
+ uint16_t num, uint16_t *nb_err_ret,
+ const bool is_integ_protected)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+ struct rte_pdcp_up_data_pdu_sn_18_hdr *pdu_hdr;
+ uint16_t nb_cop, nb_prep = 0, nb_err = 0;
+ rte_pdcp_dynfield_t *mb_dynfield;
+ struct rte_mbuf *mb;
+ int32_t rsn = 0;
+ uint32_t count;
+ int i;
+
+ const uint8_t data_offset = en_priv->hdr_sz + en_priv->aad_sz;
+ nb_cop = rte_crypto_op_bulk_alloc(en_priv->cop_pool, RTE_CRYPTO_OP_TYPE_SYMMETRIC, cop,
+ num);
+
+ const uint32_t rx_deliv = en_priv->state.rx_deliv;
+
+ for (i = 0; i < nb_cop; i++) {
+ mb = in_mb[i];
+ pdu_hdr = rte_pktmbuf_mtod(mb, struct rte_pdcp_up_data_pdu_sn_18_hdr *);
+
+ /* Check for PDU type */
+ if (likely(pdu_hdr->d_c == RTE_PDCP_PDU_TYPE_DATA)) {
+ rsn = ((pdu_hdr->sn_17_16 << 16) | (pdu_hdr->sn_15_8 << 8) |
+ (pdu_hdr->sn_7_0));
+ } else {
+ /** NOTE: Control PDU not handled.*/
+ in_mb[nb_err++] = mb;
+ continue;
+ }
+
+ if (unlikely(pdcp_sn_count_get(rx_deliv, rsn, &count,
+ RTE_SECURITY_PDCP_SN_SIZE_18))) {
+ in_mb[nb_err++] = mb;
+ continue;
+ }
+
+ cop_prepare(en_priv, mb, cop[nb_prep++], data_offset, count, is_integ_protected);
+
+ mb_dynfield = pdcp_dynfield(mb);
+ *mb_dynfield = count;
+ }
+
+ if (unlikely(nb_err))
+ /* Using mempool API since crypto API is not providing bulk free */
+ rte_mempool_put_bulk(en_priv->cop_pool, (void *)&cop[nb_prep], nb_cop - nb_prep);
+
+ *nb_err_ret = num - nb_prep;
+
+ return nb_prep;
+}
+
+static uint16_t
+pdcp_pre_process_uplane_sn_18_dl_ip(const struct rte_pdcp_entity *entity, struct rte_mbuf *mb[],
+ struct rte_crypto_op *cop[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_pre_process_uplane_sn_18_dl_flags(entity, mb, cop, num, nb_err, true);
+}
+
+static uint16_t
+pdcp_pre_process_uplane_sn_18_dl(const struct rte_pdcp_entity *entity, struct rte_mbuf *mb[],
+ struct rte_crypto_op *cop[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_pre_process_uplane_sn_18_dl_flags(entity, mb, cop, num, nb_err, false);
+}
+
+static uint16_t
+pdcp_pre_process_cplane_sn_12_dl(const struct rte_pdcp_entity *entity, struct rte_mbuf *in_mb[],
+ struct rte_crypto_op *cop[], uint16_t num, uint16_t *nb_err_ret)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+ struct rte_pdcp_cp_data_pdu_sn_12_hdr *pdu_hdr;
+ uint16_t nb_cop, nb_prep = 0, nb_err = 0;
+ rte_pdcp_dynfield_t *mb_dynfield;
+ struct rte_mbuf *mb;
+ uint32_t count;
+ int32_t rsn;
+ int i;
+
+ const uint8_t data_offset = en_priv->hdr_sz + en_priv->aad_sz;
+
+ nb_cop = rte_crypto_op_bulk_alloc(en_priv->cop_pool, RTE_CRYPTO_OP_TYPE_SYMMETRIC, cop,
+ num);
+
+ const uint32_t rx_deliv = en_priv->state.rx_deliv;
+
+ for (i = 0; i < nb_cop; i++) {
+ mb = in_mb[i];
+ pdu_hdr = rte_pktmbuf_mtod(mb, struct rte_pdcp_cp_data_pdu_sn_12_hdr *);
+ rsn = ((pdu_hdr->sn_11_8 << 8) | (pdu_hdr->sn_7_0));
+ if (unlikely(pdcp_sn_count_get(rx_deliv, rsn, &count,
+ RTE_SECURITY_PDCP_SN_SIZE_12))) {
+ in_mb[nb_err++] = mb;
+ continue;
+ }
+
+ cop_prepare(en_priv, mb, cop[nb_prep++], data_offset, count, true);
+
+ mb_dynfield = pdcp_dynfield(mb);
+ *mb_dynfield = count;
+ }
+
+ if (unlikely(nb_err))
+ /* Using mempool API since crypto API is not providing bulk free */
+ rte_mempool_put_bulk(en_priv->cop_pool, (void *)&cop[nb_prep], nb_cop - nb_prep);
+
+ *nb_err_ret = num - nb_prep;
+
+ return nb_prep;
+}
+
+static inline void
+pdcp_packet_strip(struct rte_mbuf *mb, const uint32_t hdr_trim_sz, const bool trim_mac)
+{
+ char *p = rte_pktmbuf_adj(mb, hdr_trim_sz);
+ RTE_ASSERT(p != NULL);
+ RTE_SET_USED(p);
+
+ if (trim_mac) {
+ int ret = rte_pktmbuf_trim(mb, RTE_PDCP_MAC_I_LEN);
+ RTE_ASSERT(ret == 0);
+ RTE_SET_USED(ret);
+ }
+}
+
+static inline bool
+pdcp_post_process_update_entity_state(const struct rte_pdcp_entity *entity,
+ const uint32_t count)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+
+ if (count < en_priv->state.rx_deliv)
+ return false;
+
+ /* t-Reordering timer is not supported - SDU will be delivered immediately.
+ * Update RX_DELIV to the COUNT value of the first PDCP SDU which has not
+ * been delivered to upper layers
+ */
+ en_priv->state.rx_next = count + 1;
+
+ if (count >= en_priv->state.rx_next)
+ en_priv->state.rx_next = count + 1;
+
+ return true;
+}
+
+static inline uint16_t
+pdcp_post_process_uplane_dl_flags(const struct rte_pdcp_entity *entity, struct rte_mbuf *in_mb[],
+ struct rte_mbuf *out_mb[], uint16_t num, uint16_t *nb_err_ret,
+ const bool is_integ_protected)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+ const uint32_t aad_sz = en_priv->aad_sz;
+ int i, nb_success = 0, nb_err = 0;
+ rte_pdcp_dynfield_t *mb_dynfield;
+ struct rte_mbuf *err_mb[num];
+ struct rte_mbuf *mb;
+ uint32_t count;
+
+ const uint32_t hdr_trim_sz = en_priv->hdr_sz + aad_sz;
+
+ for (i = 0; i < num; i++) {
+ mb = in_mb[i];
+ if (unlikely(mb->ol_flags & RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED))
+ goto error;
+
+ mb_dynfield = pdcp_dynfield(mb);
+ count = *mb_dynfield;
+
+ if (unlikely(!pdcp_post_process_update_entity_state(entity, count)))
+ goto error;
+
+ pdcp_packet_strip(mb, hdr_trim_sz, is_integ_protected);
+ out_mb[nb_success++] = mb;
+ continue;
+
+error:
+ err_mb[nb_err++] = mb;
+ }
+
+ if (unlikely(nb_err != 0))
+ rte_memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
+
+ *nb_err_ret = nb_err;
+ return nb_success;
+}
+
+static uint16_t
+pdcp_post_process_uplane_dl_ip(const struct rte_pdcp_entity *entity, struct rte_mbuf *in_mb[],
+ struct rte_mbuf *out_mb[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_post_process_uplane_dl_flags(entity, in_mb, out_mb, num, nb_err, true);
+}
+
+static uint16_t
+pdcp_post_process_uplane_dl(const struct rte_pdcp_entity *entity, struct rte_mbuf *in_mb[],
+ struct rte_mbuf *out_mb[], uint16_t num, uint16_t *nb_err)
+{
+ return pdcp_post_process_uplane_dl_flags(entity, in_mb, out_mb, num, nb_err, false);
+}
+
+static uint16_t
+pdcp_post_process_cplane_sn_12_dl(const struct rte_pdcp_entity *entity,
+ struct rte_mbuf *in_mb[],
+ struct rte_mbuf *out_mb[],
+ uint16_t num, uint16_t *nb_err_ret)
+{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+ const uint32_t aad_sz = en_priv->aad_sz;
+ int i, nb_success = 0, nb_err = 0;
+ rte_pdcp_dynfield_t *mb_dynfield;
+ struct rte_mbuf *err_mb[num];
+ struct rte_mbuf *mb;
+ uint32_t count;
+
+ const uint32_t hdr_trim_sz = en_priv->hdr_sz + aad_sz;
+
+ for (i = 0; i < num; i++) {
+ mb = in_mb[i];
+ if (unlikely(mb->ol_flags & RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED))
+ goto error;
+
+ mb_dynfield = pdcp_dynfield(mb);
+ count = *mb_dynfield;
+
+ if (unlikely(!pdcp_post_process_update_entity_state(entity, count)))
+ goto error;
+
+ pdcp_packet_strip(mb, hdr_trim_sz, true);
+
+ out_mb[nb_success++] = mb;
+ continue;
+
+error:
+ err_mb[nb_err++] = mb;
+ }
+
+ if (unlikely(nb_err != 0))
+ rte_memcpy(&out_mb[nb_success], err_mb, nb_err * sizeof(struct rte_mbuf *));
+
+ *nb_err_ret = nb_err;
+ return nb_success;
+}
+
static int
pdcp_pre_post_func_set(struct rte_pdcp_entity *entity, const struct rte_pdcp_entity_conf *conf)
{
+ struct entity_priv *en_priv = entity_priv_get(entity);
+
entity->pre_process = NULL;
entity->post_process = NULL;
@@ -346,6 +691,13 @@ pdcp_pre_post_func_set(struct rte_pdcp_entity *entity, const struct rte_pdcp_ent
entity->post_process = pdcp_post_process_ul;
}
+ if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_CONTROL) &&
+ (conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_12) &&
+ (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK)) {
+ entity->pre_process = pdcp_pre_process_cplane_sn_12_dl;
+ entity->post_process = pdcp_post_process_cplane_sn_12_dl;
+ }
+
if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_DATA) &&
(conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_12) &&
(conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_UPLINK)) {
@@ -360,6 +712,38 @@ pdcp_pre_post_func_set(struct rte_pdcp_entity *entity, const struct rte_pdcp_ent
entity->post_process = pdcp_post_process_ul;
}
+ if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_DATA) &&
+ (conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_12) &&
+ (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK) &&
+ (en_priv->flags.is_authenticated)) {
+ entity->pre_process = pdcp_pre_process_uplane_sn_12_dl_ip;
+ entity->post_process = pdcp_post_process_uplane_dl_ip;
+ }
+
+ if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_DATA) &&
+ (conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_12) &&
+ (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK) &&
+ (!en_priv->flags.is_authenticated)) {
+ entity->pre_process = pdcp_pre_process_uplane_sn_12_dl;
+ entity->post_process = pdcp_post_process_uplane_dl;
+ }
+
+ if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_DATA) &&
+ (conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_18) &&
+ (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK) &&
+ (en_priv->flags.is_authenticated)) {
+ entity->pre_process = pdcp_pre_process_uplane_sn_18_dl_ip;
+ entity->post_process = pdcp_post_process_uplane_dl_ip;
+ }
+
+ if ((conf->pdcp_xfrm.domain == RTE_SECURITY_PDCP_MODE_DATA) &&
+ (conf->pdcp_xfrm.sn_size == RTE_SECURITY_PDCP_SN_SIZE_18) &&
+ (conf->pdcp_xfrm.pkt_dir == RTE_SECURITY_PDCP_DOWNLINK) &&
+ (!en_priv->flags.is_authenticated)) {
+ entity->pre_process = pdcp_pre_process_uplane_sn_18_dl;
+ entity->post_process = pdcp_post_process_uplane_dl;
+ }
+
if (entity->pre_process == NULL || entity->post_process == NULL)
return -ENOTSUP;
diff --git a/lib/pdcp/pdcp_process.h b/lib/pdcp/pdcp_process.h
index fd53fff0aa..a52f769b82 100644
--- a/lib/pdcp/pdcp_process.h
+++ b/lib/pdcp/pdcp_process.h
@@ -5,8 +5,19 @@
#ifndef PDCP_PROCESS_H
#define PDCP_PROCESS_H
+#include <rte_mbuf_dyn.h>
#include <rte_pdcp.h>
+typedef uint32_t rte_pdcp_dynfield_t;
+
+extern int rte_pdcp_dynfield_offset;
+
+static inline rte_pdcp_dynfield_t *
+pdcp_dynfield(struct rte_mbuf *mbuf)
+{
+ return RTE_MBUF_DYNFIELD(mbuf, rte_pdcp_dynfield_offset, rte_pdcp_dynfield_t *);
+}
+
int
pdcp_process_func_set(struct rte_pdcp_entity *entity, const struct rte_pdcp_entity_conf *conf);
diff --git a/lib/pdcp/rte_pdcp.c b/lib/pdcp/rte_pdcp.c
index adcad5dd25..91dab91f73 100644
--- a/lib/pdcp/rte_pdcp.c
+++ b/lib/pdcp/rte_pdcp.c
@@ -10,6 +10,26 @@
#include "pdcp_entity.h"
#include "pdcp_process.h"
+#define RTE_PDCP_DYNFIELD_NAME "rte_pdcp_dynfield"
+
+int rte_pdcp_dynfield_offset = -1;
+
+static int
+pdcp_dynfield_register(void)
+{
+ const struct rte_mbuf_dynfield dynfield_desc = {
+ .name = RTE_PDCP_DYNFIELD_NAME,
+ .size = sizeof(rte_pdcp_dynfield_t),
+ .align = __alignof__(rte_pdcp_dynfield_t),
+ };
+
+ if (rte_pdcp_dynfield_offset != -1)
+ return rte_pdcp_dynfield_offset;
+
+ rte_pdcp_dynfield_offset = rte_mbuf_dynfield_register(&dynfield_desc);
+ return rte_pdcp_dynfield_offset;
+}
+
static int
pdcp_entity_size_get(const struct rte_pdcp_entity_conf *conf)
{
@@ -35,6 +55,9 @@ rte_pdcp_entity_establish(const struct rte_pdcp_entity_conf *conf)
int ret, entity_size;
uint32_t count;
+ if (pdcp_dynfield_register() < 0)
+ return NULL;
+
if (conf == NULL || conf->cop_pool == NULL) {
rte_errno = EINVAL;
return NULL;
--
2.25.1
next prev parent reply other threads:[~2023-05-30 10:02 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 ` [PATCH v2 19/22] pdcp: add support for status report Anoob Joseph
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 ` Anoob Joseph [this message]
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=20230530100158.1428-8-anoobj@marvell.com \
--to=anoobj@marvell.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=stephen@networkplumber.org \
--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).