crypto: add vnet_crypto_op_init (...)
[vpp.git] / src / vnet / ipsec / esp_encrypt.c
index ebcf0ed..c2069e5 100644 (file)
@@ -330,7 +330,8 @@ esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              hdr_len += len;
              ip6 = (ip6_header_t *) (payload - hdr_len);
              clib_memcpy_fast (ip6, &sa0->ip6_hdr, len);
-             *next_hdr_ptr = IP_PROTOCOL_IPV6;
+             *next_hdr_ptr = (is_ip6 ?
+                              IP_PROTOCOL_IPV6 : IP_PROTOCOL_IP_IN_IP);
              len = payload_len + hdr_len - len;
              ip6->payload_length = clib_net_to_host_u16 (len);
            }
@@ -341,7 +342,8 @@ esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
              hdr_len += len;
              ip4 = (ip4_header_t *) (payload - hdr_len);
              clib_memcpy_fast (ip4, &sa0->ip4_hdr, len);
-             *next_hdr_ptr = IP_PROTOCOL_IP_IN_IP;
+             *next_hdr_ptr = (is_ip6 ?
+                              IP_PROTOCOL_IPV6 : IP_PROTOCOL_IP_IN_IP);
              len = payload_len + hdr_len;
              esp_update_ip4_hdr (ip4, len, /* is_transport */ 0, 0);
            }
@@ -427,7 +429,7 @@ esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
        {
          vnet_crypto_op_t *op;
          vec_add2_aligned (ptd->crypto_ops, op, 1, CLIB_CACHE_LINE_BYTES);
-         op->op = sa0->crypto_enc_op_type;
+         vnet_crypto_op_init (op, sa0->crypto_enc_op_type);
          op->iv = payload - iv_sz;
          op->src = op->dst = payload;
          op->key = sa0->crypto_key.data;
@@ -440,16 +442,15 @@ esp_encrypt_inline (vlib_main_t * vm, vlib_node_runtime_t * node,
        {
          vnet_crypto_op_t *op;
          vec_add2_aligned (ptd->integ_ops, op, 1, CLIB_CACHE_LINE_BYTES);
-         op->op = sa0->integ_op_type;
+         vnet_crypto_op_init (op, sa0->integ_op_type);
          op->src = payload - iv_sz - sizeof (esp_header_t);
          op->dst = payload + payload_len - icv_sz;
          op->key = sa0->integ_key.data;
          op->key_len = sa0->integ_key.len;
          op->hmac_trunc_len = icv_sz;
          op->len = payload_len - icv_sz + iv_sz + sizeof (esp_header_t);
-         op->flags = 0;
          op->user_data = b - bufs;
-         if (ipsec_sa_is_set_USE_EXTENDED_SEQ_NUM (sa0))
+         if (ipsec_sa_is_set_USE_ESN (sa0))
            {
              u32 seq_hi = clib_net_to_host_u32 (sa0->seq_hi);
              clib_memcpy_fast (op->dst, &seq_hi, sizeof (seq_hi));