ipsec: remove redundant replay window size
authorHemant Agrawal <hemant.agrawal@nxp.com>
Wed, 6 Nov 2019 06:54:13 +0000 (12:24 +0530)
committerAkhil Goyal <akhil.goyal@nxp.com>
Fri, 8 Nov 2019 12:51:16 +0000 (13:51 +0100)
The rte_security lib has introduced replay_win_sz,
so it can be removed from the rte_ipsec lib.

The relevant tests, app are also update to reflect
the usages.

Note that esn and anti-replay fileds were earlier used
only for ipsec library, they were enabling the libipsec
by default. With this change esn and anti-replay setting
will not automatically enabled libipsec.

Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
app/test/test_ipsec.c
doc/guides/rel_notes/release_19_11.rst
examples/ipsec-secgw/ipsec-secgw.c
examples/ipsec-secgw/ipsec.c
examples/ipsec-secgw/sa.c
lib/librte_ipsec/Makefile
lib/librte_ipsec/meson.build
lib/librte_ipsec/rte_ipsec_sa.h
lib/librte_ipsec/sa.c

index 4007eff..7dc83fe 100644 (file)
@@ -689,11 +689,11 @@ fill_ipsec_param(uint32_t replay_win_sz, uint64_t flags)
 
        prm->userdata = 1;
        prm->flags = flags;
-       prm->replay_win_sz = replay_win_sz;
 
        /* setup ipsec xform */
        prm->ipsec_xform = ut_params->ipsec_xform;
        prm->ipsec_xform.salt = (uint32_t)rte_rand();
+       prm->ipsec_xform.replay_win_sz = replay_win_sz;
 
        /* setup tunnel related fields */
        prm->tun.hdr_len = sizeof(ipv4_outer);
index 29e6bf8..795c760 100644 (file)
@@ -403,10 +403,14 @@ ABI Changes
   align the Ethernet header on receive and all known encapsulations
   preserve the alignment of the header.
 
-* security: A new field ``replay_win_sz`` has been added to the structure
+* security: The field ``replay_win_sz`` has been moved from ipsec library
+  based ``rte_ipsec_sa_prm`` structure to security library based structure
   ``rte_security_ipsec_xform``, which specify the Anti replay window size
   to enable sequence replay attack handling.
 
+* ipsec: The field ``replay_win_sz`` has been removed from the structure
+  ``rte_ipsec_sa_prm`` as it has been added to the security library.
+
 
 Shared Library Versions
 -----------------------
@@ -450,7 +454,7 @@ The libraries prepended with a plus sign were incremented in this version.
      librte_gso.so.1
      librte_hash.so.2
      librte_ip_frag.so.1
-     librte_ipsec.so.1
+   + librte_ipsec.so.2
      librte_jobstats.so.1
      librte_kni.so.2
      librte_kvargs.so.1
index b129364..3b5aaf6 100644 (file)
@@ -1424,9 +1424,6 @@ print_app_sa_prm(const struct app_sa_prm *prm)
        printf("librte_ipsec usage: %s\n",
                (prm->enable == 0) ? "disabled" : "enabled");
 
-       if (prm->enable == 0)
-               return;
-
        printf("replay window size: %u\n", prm->window_size);
        printf("ESN: %s\n", (prm->enable_esn == 0) ? "disabled" : "enabled");
        printf("SA flags: %#" PRIx64 "\n", prm->flags);
@@ -1495,11 +1492,9 @@ parse_args(int32_t argc, char **argv)
                        app_sa_prm.enable = 1;
                        break;
                case 'w':
-                       app_sa_prm.enable = 1;
                        app_sa_prm.window_size = parse_decimal(optarg);
                        break;
                case 'e':
-                       app_sa_prm.enable = 1;
                        app_sa_prm.enable_esn = 1;
                        break;
                case 'a':
index d7761e9..d4b5712 100644 (file)
@@ -49,6 +49,8 @@ set_ipsec_conf(struct ipsec_sa *sa, struct rte_security_ipsec_xform *ipsec)
                /* TODO support for Transport */
        }
        ipsec->esn_soft_limit = IPSEC_OFFLOAD_ESN_SOFTLIMIT;
+       ipsec->replay_win_sz = app_sa_prm.window_size;
+       ipsec->options.esn = app_sa_prm.enable_esn;
 }
 
 int
@@ -92,6 +94,7 @@ create_lookaside_session(struct ipsec_ctx *ipsec_ctx, struct ipsec_sa *sa,
                                .spi = sa->spi,
                                .salt = sa->salt,
                                .options = { 0 },
+                               .replay_win_sz = 0,
                                .direction = sa->direction,
                                .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
                                .mode = (IS_TUNNEL(sa->flags)) ?
@@ -151,6 +154,7 @@ create_inline_session(struct socket_ctx *skt_ctx, struct ipsec_sa *sa,
                        .spi = sa->spi,
                        .salt = sa->salt,
                        .options = { 0 },
+                       .replay_win_sz = 0,
                        .direction = sa->direction,
                        .proto = RTE_SECURITY_IPSEC_SA_PROTO_ESP,
                        .mode = (sa->flags == IP4_TUNNEL ||
index f56e16b..7f046e3 100644 (file)
@@ -1115,7 +1115,7 @@ fill_ipsec_app_sa_prm(struct rte_ipsec_sa_prm *prm,
 
        prm->flags = app_prm->flags;
        prm->ipsec_xform.options.esn = app_prm->enable_esn;
-       prm->replay_win_sz = app_prm->window_size;
+       prm->ipsec_xform.replay_win_sz = app_prm->window_size;
 }
 
 static int
index 81fb999..161ea9e 100644 (file)
@@ -14,7 +14,7 @@ LDLIBS += -lrte_cryptodev -lrte_security -lrte_hash
 
 EXPORT_MAP := rte_ipsec_version.map
 
-LIBABIVER := 1
+LIBABIVER := 2
 
 # all source are stored in SRCS-y
 SRCS-$(CONFIG_RTE_LIBRTE_IPSEC) += esp_inb.c
index 7035852..e8604da 100644 (file)
@@ -1,6 +1,7 @@
 # SPDX-License-Identifier: BSD-3-Clause
 # Copyright(c) 2018 Intel Corporation
 
+version = 2
 allow_experimental_apis = true
 
 sources = files('esp_inb.c', 'esp_outb.c', 'sa.c', 'ses.c', 'ipsec_sad.c')
index 47ce169..1cfde58 100644 (file)
@@ -47,12 +47,6 @@ struct rte_ipsec_sa_prm {
                        uint8_t proto;  /**< next header protocol */
                } trs; /**< transport mode related parameters */
        };
-
-       /**
-        * window size to enable sequence replay attack handling.
-        * replay checking is disabled if the window size is 0.
-        */
-       uint32_t replay_win_sz;
 };
 
 /**
index 23d394b..6f1d92c 100644 (file)
@@ -439,7 +439,7 @@ rte_ipsec_sa_size(const struct rte_ipsec_sa_prm *prm)
                return rc;
 
        /* determine required size */
-       wsz = prm->replay_win_sz;
+       wsz = prm->ipsec_xform.replay_win_sz;
        return ipsec_sa_size(type, &wsz, &nb);
 }
 
@@ -461,7 +461,7 @@ rte_ipsec_sa_init(struct rte_ipsec_sa *sa, const struct rte_ipsec_sa_prm *prm,
                return rc;
 
        /* determine required size */
-       wsz = prm->replay_win_sz;
+       wsz = prm->ipsec_xform.replay_win_sz;
        sz = ipsec_sa_size(type, &wsz, &nb);
        if (sz < 0)
                return sz;