common/cnxk: fix channel number setting in MCAM entries
[dpdk.git] / lib / ipsec / sa.c
index bbe2fa3..59a5476 100644 (file)
@@ -7,14 +7,11 @@
 #include <rte_ip.h>
 #include <rte_udp.h>
 #include <rte_errno.h>
-#include <rte_cryptodev.h>
 
 #include "sa.h"
 #include "ipsec_sqn.h"
 #include "crypto.h"
-#include "iph.h"
 #include "misc.h"
-#include "pad.h"
 
 #define MBUF_MAX_L2_LEN                RTE_LEN2MASK(RTE_MBUF_L2_LEN_BITS, uint64_t)
 #define MBUF_MAX_L3_LEN                RTE_LEN2MASK(RTE_MBUF_L3_LEN_BITS, uint64_t)
@@ -136,7 +133,7 @@ ipsec_sa_size(uint64_t type, uint32_t *wnd_sz, uint32_t *nb_bucket)
                /*
                 * RFC 4303 recommends 64 as minimum window size.
                 * there is no point to use ESN mode without SQN window,
-                * so make sure we have at least 64 window when ESN is enalbed.
+                * so make sure we have at least 64 window when ESN is enabled.
                 */
                wsz = ((type & RTE_IPSEC_SATP_ESN_MASK) ==
                        RTE_IPSEC_SATP_ESN_DISABLE) ?
@@ -294,11 +291,11 @@ esp_inb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm)
  * Init ESP outbound specific things.
  */
 static void
-esp_outb_init(struct rte_ipsec_sa *sa, uint32_t hlen)
+esp_outb_init(struct rte_ipsec_sa *sa, uint32_t hlen, uint64_t sqn)
 {
        uint8_t algo_type;
 
-       sa->sqn.outb = 1;
+       sa->sqn.outb = sqn > 1 ? sqn : 1;
 
        algo_type = sa->algo_type;
 
@@ -362,13 +359,13 @@ esp_outb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm)
 
        memcpy(sa->hdr, prm->tun.hdr, prm->tun.hdr_len);
 
-       /* insert UDP header if UDP encapsulation is inabled */
+       /* insert UDP header if UDP encapsulation is enabled */
        if (sa->type & RTE_IPSEC_SATP_NATT_ENABLE) {
                struct rte_udp_hdr *udph = (struct rte_udp_hdr *)
                                &sa->hdr[prm->tun.hdr_len];
                sa->hdr_len += sizeof(struct rte_udp_hdr);
-               udph->src_port = prm->ipsec_xform.udp.sport;
-               udph->dst_port = prm->ipsec_xform.udp.dport;
+               udph->src_port = rte_cpu_to_be_16(prm->ipsec_xform.udp.sport);
+               udph->dst_port = rte_cpu_to_be_16(prm->ipsec_xform.udp.dport);
                udph->dgram_cksum = 0;
        }
 
@@ -376,7 +373,7 @@ esp_outb_tun_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm)
        sa->tx_offload.val = rte_mbuf_tx_offload(sa->hdr_l3_off,
                sa->hdr_len - sa->hdr_l3_off, 0, 0, 0, 0, 0);
 
-       esp_outb_init(sa, sa->hdr_len);
+       esp_outb_init(sa, sa->hdr_len, prm->ipsec_xform.esn.value);
 }
 
 /*
@@ -502,7 +499,7 @@ esp_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
        case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TRANS |
                        RTE_IPSEC_SATP_NATT_ENABLE):
        case (RTE_IPSEC_SATP_DIR_OB | RTE_IPSEC_SATP_MODE_TRANS):
-               esp_outb_init(sa, 0);
+               esp_outb_init(sa, 0, prm->ipsec_xform.esn.value);
                break;
        }
 
@@ -513,15 +510,19 @@ esp_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
  * helper function, init SA replay structure.
  */
 static void
-fill_sa_replay(struct rte_ipsec_sa *sa, uint32_t wnd_sz, uint32_t nb_bucket)
+fill_sa_replay(struct rte_ipsec_sa *sa, uint32_t wnd_sz, uint32_t nb_bucket,
+       uint64_t sqn)
 {
        sa->replay.win_sz = wnd_sz;
        sa->replay.nb_bucket = nb_bucket;
        sa->replay.bucket_index_mask = nb_bucket - 1;
        sa->sqn.inb.rsn[0] = (struct replay_sqn *)(sa + 1);
-       if ((sa->type & RTE_IPSEC_SATP_SQN_MASK) == RTE_IPSEC_SATP_SQN_ATOM)
+       sa->sqn.inb.rsn[0]->sqn = sqn;
+       if ((sa->type & RTE_IPSEC_SATP_SQN_MASK) == RTE_IPSEC_SATP_SQN_ATOM) {
                sa->sqn.inb.rsn[1] = (struct replay_sqn *)
                        ((uintptr_t)sa->sqn.inb.rsn[0] + rsn_size(nb_bucket));
+               sa->sqn.inb.rsn[1]->sqn = sqn;
+       }
 }
 
 int
@@ -601,7 +602,7 @@ rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
 
        /* fill replay window related fields */
        if (nb != 0)
-               fill_sa_replay(sa, wsz, nb);
+               fill_sa_replay(sa, wsz, nb, prm->ipsec_xform.esn.value);
 
        return sz;
 }
@@ -661,7 +662,7 @@ pkt_flag_process(const struct rte_ipsec_session *ss,
        k = 0;
        bytes = 0;
        for (i = 0; i != num; i++) {
-               if ((mb[i]->ol_flags & PKT_RX_SEC_OFFLOAD_FAILED) == 0) {
+               if ((mb[i]->ol_flags & RTE_MBUF_F_RX_SEC_OFFLOAD_FAILED) == 0) {
                        k++;
                        bytes += mb[i]->pkt_len;
                }