dpdk/ipsec: fix digest physical address
authorSergio Gonzalez Monroy <[email protected]>
Wed, 18 Oct 2017 13:44:24 +0000 (14:44 +0100)
committerDamjan Marion <[email protected]>
Thu, 19 Oct 2017 12:35:25 +0000 (12:35 +0000)
VPP-1034

Change-Id: Ib13cf0395bc2e42d24de51347e0aeed8a137f2f2
Signed-off-by: Sergio Gonzalez Monroy <[email protected]>
src/plugins/dpdk/ipsec/esp.h
src/plugins/dpdk/ipsec/esp_decrypt.c
src/plugins/dpdk/ipsec/esp_encrypt.c

index 5b5c81a..51224d6 100644 (file)
@@ -334,10 +334,6 @@ crypto_op_setup (u8 is_aead, struct rte_mbuf *mb0,
   sym_cop->m_src = mb0;
   rte_crypto_op_attach_sym_session (cop, session);
 
-  if (!digest_paddr)
-    digest_paddr =
-      rte_pktmbuf_mtophys_offset (mb0, (uintptr_t) digest - (uintptr_t) mb0);
-
 #if DPDK_NO_AEAD
   sym_cop->cipher.data.offset = cipher_off;
   sym_cop->cipher.data.length = cipher_len;
index c4f295d..20936b3 100644 (file)
@@ -236,7 +236,7 @@ dpdk_esp_decrypt_node_fn (vlib_main_t * vm,
          u32 cipher_off, cipher_len;
          u32 auth_off = 0, auth_len = 0, aad_size = 0;
          u8 *aad = NULL, *digest = NULL;
-         u64 digest_paddr = 0;
+         u64 digest_paddr;
 
           u8 *iv = rte_pktmbuf_mtod_offset(mb0, void*, sizeof (esp_header_t));
           dpdk_cop_priv_t *priv = (dpdk_cop_priv_t *)(sym_cop + 1);
@@ -249,6 +249,8 @@ dpdk_esp_decrypt_node_fn (vlib_main_t * vm,
            vlib_buffer_get_current (b0) + sizeof(esp_header_t) +
            iv_size + payload_len;
 
+         digest_paddr = mb0->buf_physaddr + (digest - (u8 *) mb0->buf_addr);
+
           if (is_aead)
             {
              u32 *_iv = (u32 *) iv;
index 6de444f..b4e29e9 100644 (file)
@@ -358,6 +358,12 @@ dpdk_esp_encrypt_node_fn (vlib_main_t * vm,
          u32 cipher_off, cipher_len;
          u32 auth_off = 0, auth_len = 0, aad_size = 0;
          u8 *aad = NULL, *digest = NULL;
+         u64 digest_paddr;
+
+         digest =
+           vlib_buffer_get_current (b0) + b0->current_length - trunc_size;
+
+         digest_paddr = mb0->buf_physaddr + (digest - (u8 *) mb0->buf_addr);
 
          if (is_aead)
            {
@@ -380,10 +386,6 @@ dpdk_esp_encrypt_node_fn (vlib_main_t * vm,
                  *((u32 *) & aad[8]) = sa0->seq_hi;
                  aad_size = 12;
                }
-
-             digest =
-               vlib_buffer_get_current (b0) + b0->current_length -
-               trunc_size;
            }
          else
            {
@@ -393,10 +395,6 @@ dpdk_esp_encrypt_node_fn (vlib_main_t * vm,
              auth_off = ip_hdr_size;
              auth_len = b0->current_length - ip_hdr_size - trunc_size;
 
-             digest =
-               vlib_buffer_get_current (b0) + b0->current_length -
-               trunc_size;
-
              if (PREDICT_FALSE (sa0->use_esn))
                {
                  *((u32 *) digest) = sa0->seq_hi;
@@ -407,7 +405,7 @@ dpdk_esp_encrypt_node_fn (vlib_main_t * vm,
          crypto_op_setup (is_aead, mb0, cop, sess,
                           cipher_off, cipher_len, (u8 *) icb, iv_size,
                           auth_off, auth_len, aad, aad_size,
-                          digest, 0, trunc_size);
+                          digest, digest_paddr, trunc_size);
 
          if (PREDICT_FALSE (is_ipv6))
            {