Enabling DIFFSERV and ECN in IPSEC proto offload descriptor. Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com> --- drivers/crypto/dpaa_sec/dpaa_sec.c | 14 ++++++++++++-- drivers/crypto/dpaa_sec/dpaa_sec.h | 8 ++++++++ 2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.c b/drivers/crypto/dpaa_sec/dpaa_sec.c index e6ca0e6f0e..881435fdb6 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.c +++ b/drivers/crypto/dpaa_sec/dpaa_sec.c @@ -3023,18 +3023,28 @@ dpaa_sec_set_ipsec_session(__rte_unused struct rte_cryptodev *dev, session->encap_pdb.seq_num = conf->ipsec.esn.low; } + if (ipsec_xform->options.ecn) + session->encap_pdb.options |= PDBOPTS_ESP_TECN; } else if (ipsec_xform->direction == RTE_SECURITY_IPSEC_SA_DIR_INGRESS) { - if (ipsec_xform->tunnel.type == RTE_SECURITY_IPSEC_TUNNEL_IPV4) + if (ipsec_xform->tunnel.type == RTE_SECURITY_IPSEC_TUNNEL_IPV4) { session->decap_pdb.options = sizeof(struct ip) << 16; - else + if (ipsec_xform->options.copy_df) + session->decap_pdb.options |= PDBHMO_ESP_DFV; + } else { session->decap_pdb.options = sizeof(struct rte_ipv6_hdr) << 16; + } if (ipsec_xform->options.esn) { session->decap_pdb.options |= PDBOPTS_ESP_ESN; session->decap_pdb.seq_num_ext_hi = conf->ipsec.esn.hi; session->decap_pdb.seq_num = conf->ipsec.esn.low; } + if (ipsec_xform->options.copy_dscp) + session->decap_pdb.options |= PDBHMO_ESP_DIFFSERV; + if (ipsec_xform->options.ecn) + session->decap_pdb.options |= PDBOPTS_ESP_TECN; + if (ipsec_xform->replay_win_sz) { uint32_t win_sz; win_sz = rte_align32pow2(ipsec_xform->replay_win_sz); diff --git a/drivers/crypto/dpaa_sec/dpaa_sec.h b/drivers/crypto/dpaa_sec/dpaa_sec.h index 02e5307660..603a7d8f38 100644 --- a/drivers/crypto/dpaa_sec/dpaa_sec.h +++ b/drivers/crypto/dpaa_sec/dpaa_sec.h @@ -990,6 +990,10 @@ static const struct rte_security_capability dpaa_sec_security_cap[] = { .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL, .direction = RTE_SECURITY_IPSEC_SA_DIR_EGRESS, .options = { + .copy_df = 1, + .copy_dscp = 1, + .dec_ttl = 1, + .ecn = 1, .esn = 1, }, .replay_win_sz_max = 128 @@ -1004,6 +1008,10 @@ static const struct rte_security_capability dpaa_sec_security_cap[] = { .mode = RTE_SECURITY_IPSEC_SA_MODE_TUNNEL, .direction = RTE_SECURITY_IPSEC_SA_DIR_INGRESS, .options = { + .copy_df = 1, + .copy_dscp = 1, + .dec_ttl = 1, + .ecn = 1, .esn = 1, }, .replay_win_sz_max = 128 -- 2.25.1