examples/l2fwd-crypto: separate IV check from xform setting
authorPablo de Lara <pablo.de.lara.guarch@intel.com>
Thu, 19 Jul 2018 08:39:57 +0000 (09:39 +0100)
committerPablo de Lara <pablo.de.lara.guarch@intel.com>
Mon, 23 Jul 2018 23:48:10 +0000 (01:48 +0200)
IV_param_check() function was checking if the IV size provided
was supported by device and setting the IV size in the xform
structure.

Instead of this, the function should only do the parameter check
and outside the IV size on the xform is set.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Fiona Trahe <fiona.trahe@intel.com>
examples/l2fwd-crypto/main.c

index e334b9b..15f6b85 100644 (file)
@@ -1931,21 +1931,19 @@ check_supported_size(uint16_t length, uint16_t min, uint16_t max,
 static int
 check_iv_param(const struct rte_crypto_param_range *iv_range_size,
                unsigned int iv_param, int iv_random_size,
-               uint16_t *iv_length)
+               uint16_t iv_length)
 {
        /*
         * Check if length of provided IV is supported
         * by the algorithm chosen.
         */
        if (iv_param) {
-               if (check_supported_size(*iv_length,
+               if (check_supported_size(iv_length,
                                iv_range_size->min,
                                iv_range_size->max,
                                iv_range_size->increment)
-                                       != 0) {
-                       printf("Unsupported IV length\n");
+                                       != 0)
                        return -1;
-               }
        /*
         * Check if length of IV to be randomly generated
         * is supported by the algorithm chosen.
@@ -1955,14 +1953,9 @@ check_iv_param(const struct rte_crypto_param_range *iv_range_size,
                                iv_range_size->min,
                                iv_range_size->max,
                                iv_range_size->increment)
-                                       != 0) {
-                       printf("Unsupported IV length\n");
+                                       != 0)
                        return -1;
-               }
-               *iv_length = iv_random_size;
-       /* No size provided, use minimum size. */
-       } else
-               *iv_length = iv_range_size->min;
+       }
 
        return 0;
 }
@@ -2069,8 +2062,21 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
                        if (check_iv_param(&cap->sym.aead.iv_size,
                                        options->aead_iv_param,
                                        options->aead_iv_random_size,
-                                       &options->aead_iv.length) < 0)
+                                       options->aead_iv.length) < 0) {
+                               printf("Unsupported IV length\n");
                                continue;
+                       }
+
+                       /* Set IV if not provided from command line */
+                       if (options->aead_iv_param == 0) {
+                               if (options->aead_iv_random_size != -1)
+                                       options->aead_iv.length =
+                                               options->aead_iv_random_size;
+                               /* No size provided, use minimum size. */
+                               else
+                                       options->aead_iv.length =
+                                               cap->sym.aead.iv_size.min;
+                       }
 
                        /*
                         * Check if length of provided AEAD key is supported
@@ -2178,8 +2184,21 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
                        if (check_iv_param(&cap->sym.cipher.iv_size,
                                        options->cipher_iv_param,
                                        options->cipher_iv_random_size,
-                                       &options->cipher_iv.length) < 0)
+                                       options->cipher_iv.length) < 0) {
+                               printf("Unsupported IV length\n");
                                continue;
+                       }
+
+                       /* Set IV if not provided from command line */
+                       if (options->cipher_iv_param == 0) {
+                               if (options->cipher_iv_random_size != -1)
+                                       options->cipher_iv.length =
+                                               options->cipher_iv_random_size;
+                               /* No size provided, use minimum size. */
+                               else
+                                       options->cipher_iv.length =
+                                               cap->sym.cipher.iv_size.min;
+                       }
 
                        /*
                         * Check if length of provided cipher key is supported
@@ -2235,8 +2254,22 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
                        if (check_iv_param(&cap->sym.auth.iv_size,
                                        options->auth_iv_param,
                                        options->auth_iv_random_size,
-                                       &options->auth_iv.length) < 0)
+                                       options->auth_iv.length) < 0) {
+                               printf("Unsupported IV length\n");
                                continue;
+                       }
+
+                       /* Set IV if not provided from command line */
+                       if (options->auth_iv_param == 0) {
+                               if (options->auth_iv_random_size != -1)
+                                       options->auth_iv.length =
+                                               options->auth_iv_random_size;
+                               /* No size provided, use minimum size. */
+                               else
+                                       options->auth_iv.length =
+                                               cap->sym.auth.iv_size.min;
+                       }
+
                        /*
                         * Check if length of provided auth key is supported
                         * by the algorithm chosen.