From patchwork Sat Oct 14 13:27:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aviad Yehezkel X-Patchwork-Id: 30397 X-Patchwork-Delegate: pablo.de.lara.guarch@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4DDCD1B670; Sat, 14 Oct 2017 15:28:14 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id E21781B61E for ; Sat, 14 Oct 2017 15:28:07 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from aviadye@dev.mellanox.co.il) with ESMTPS (AES256-SHA encrypted); 14 Oct 2017 15:28:03 +0200 Received: from l-vmw-rdcore-205.mtl.labs.mlnx (l-vmw-rdcore-205.mtl.labs.mlnx [10.7.66.205]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v9EDS3RK026787; Sat, 14 Oct 2017 16:28:03 +0300 From: aviadye@dev.mellanox.co.il To: dev@dpdk.org, sergio.gonzalez.monroy@intel.com, pablo.de.lara.guarch@intel.com, aviadye@mellanox.com Cc: borisp@mellanox.com, akhil.goyal@nxp.com, hemant.agrawal@nxp.com, radu.nicolau@intel.com, declan.doherty@intel.com, aviadye@dev.mellanox.co.il, liranl@mellanox.com, nelio.laranjeiro@6wind.com, thomas@monjalon.net Date: Sat, 14 Oct 2017 16:27:58 +0300 Message-Id: <1507987683-12315-6-git-send-email-aviadye@dev.mellanox.co.il> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1507987683-12315-1-git-send-email-aviadye@dev.mellanox.co.il> References: <1507987683-12315-1-git-send-email-aviadye@dev.mellanox.co.il> Subject: [dpdk-dev] [PATCH 06/11] examples/ipsec-secgw: Added correct padding to tunnel mode X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Aviad Yehezkel Signed-off-by: Aviad Yehezkel Tested-by: Aviad Yehezkel --- examples/ipsec-secgw/esp.c | 51 ++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/examples/ipsec-secgw/esp.c b/examples/ipsec-secgw/esp.c index 56ad7a0..689e917 100644 --- a/examples/ipsec-secgw/esp.c +++ b/examples/ipsec-secgw/esp.c @@ -229,25 +229,26 @@ esp_outbound(struct rte_mbuf *m, struct ipsec_sa *sa, uint8_t *padding, *new_ip, nlp; struct rte_crypto_sym_op *sym_cop; int32_t i; - uint16_t pad_payload_len, pad_len, ip_hdr_len; + uint16_t pad_payload_len, pad_len = 0; + uint16_t inner_ip_hdr_len = 0, ip_hdr_len = 0; RTE_ASSERT(m != NULL); RTE_ASSERT(sa != NULL); + RTE_ASSERT(sa->flags == IP4_TUNNEL || sa->flags == IP6_TUNNEL || + sa->flags == TRANSPORT); RTE_ASSERT(cop != NULL); - ip_hdr_len = 0; - ip4 = rte_pktmbuf_mtod(m, struct ip *); if (likely(ip4->ip_v == IPVERSION)) { - if (unlikely(sa->flags == TRANSPORT)) { - ip_hdr_len = ip4->ip_hl * 4; + ip_hdr_len = ip4->ip_hl * 4; + if (unlikely(sa->flags == TRANSPORT)) nlp = ip4->ip_p; - } else + else nlp = IPPROTO_IPIP; } else if (ip4->ip_v == IP6_VERSION) { + /* XXX No option headers supported */ + ip_hdr_len = sizeof(struct ip6_hdr); if (unlikely(sa->flags == TRANSPORT)) { - /* XXX No option headers supported */ - ip_hdr_len = sizeof(struct ip6_hdr); ip6 = (struct ip6_hdr *)ip4; nlp = ip6->ip6_nxt; } else @@ -259,22 +260,28 @@ esp_outbound(struct rte_mbuf *m, struct ipsec_sa *sa, } /* Padded payload length */ - pad_payload_len = RTE_ALIGN_CEIL(rte_pktmbuf_pkt_len(m) - - ip_hdr_len + 2, sa->block_size); - pad_len = pad_payload_len + ip_hdr_len - rte_pktmbuf_pkt_len(m); - - RTE_ASSERT(sa->flags == IP4_TUNNEL || sa->flags == IP6_TUNNEL || - sa->flags == TRANSPORT); - - if (likely(sa->flags == IP4_TUNNEL)) + if (unlikely(sa->flags == TRANSPORT)) { + pad_payload_len = RTE_ALIGN_CEIL(rte_pktmbuf_pkt_len(m) + + sizeof(nlp) + 1 - ip_hdr_len, + sa->block_size); + pad_len = pad_payload_len + ip_hdr_len - rte_pktmbuf_pkt_len(m); + } else { + inner_ip_hdr_len = ip_hdr_len; ip_hdr_len = sizeof(struct ip); - else if (sa->flags == IP6_TUNNEL) - ip_hdr_len = sizeof(struct ip6_hdr); - else if (sa->flags != TRANSPORT) { - RTE_LOG(ERR, IPSEC_ESP, "Unsupported SA flags: 0x%x\n", - sa->flags); - return -EINVAL; + if (sa->flags == IP6_TUNNEL) + ip_hdr_len = sizeof(struct ip6_hdr); + + pad_payload_len = RTE_ALIGN_CEIL(rte_pktmbuf_pkt_len(m) + + sizeof(nlp) + 1, + sa->block_size); + pad_len = pad_payload_len - rte_pktmbuf_pkt_len(m); } + RTE_LOG(DEBUG, IPSEC_ESP, "rte_pktmbuf_pkt_len=%u " + "inner_ip_hdr_len=%u ip_hdr_len=%u " + "pad_payload_len=%u pad_len=%u\n", + rte_pktmbuf_pkt_len(m), + inner_ip_hdr_len, ip_hdr_len, + pad_payload_len, pad_len); /* Check maximum packet size */ if (unlikely(ip_hdr_len + sizeof(struct esp_hdr) + sa->iv_len +