From patchwork Tue Oct 21 08:46:00 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jijiang Liu X-Patchwork-Id: 877 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id BD7497E98; Tue, 21 Oct 2014 10:38:29 +0200 (CEST) Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by dpdk.org (Postfix) with ESMTP id B4C0B7E98 for ; Tue, 21 Oct 2014 10:38:09 +0200 (CEST) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga102.fm.intel.com with ESMTP; 21 Oct 2014 01:46:20 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.04,760,1406617200"; d="scan'208";a="617741708" Received: from shvmail01.sh.intel.com ([10.239.29.42]) by fmsmga002.fm.intel.com with ESMTP; 21 Oct 2014 01:46:18 -0700 Received: from shecgisg004.sh.intel.com (shecgisg004.sh.intel.com [10.239.29.89]) by shvmail01.sh.intel.com with ESMTP id s9L8kGGo007208; Tue, 21 Oct 2014 16:46:16 +0800 Received: from shecgisg004.sh.intel.com (localhost [127.0.0.1]) by shecgisg004.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id s9L8kEdq020283; Tue, 21 Oct 2014 16:46:16 +0800 Received: (from jijiangl@localhost) by shecgisg004.sh.intel.com (8.13.6/8.13.6/Submit) id s9L8kEvj020279; Tue, 21 Oct 2014 16:46:14 +0800 From: Jijiang Liu To: dev@dpdk.org Date: Tue, 21 Oct 2014 16:46:00 +0800 Message-Id: <1413881168-20239-2-git-send-email-jijiang.liu@intel.com> X-Mailer: git-send-email 1.7.12.2 In-Reply-To: <1413881168-20239-1-git-send-email-jijiang.liu@intel.com> References: <1413881168-20239-1-git-send-email-jijiang.liu@intel.com> Subject: [dpdk-dev] [PATCH v6 1/9] librte_mbuf:the rte_mbuf structure changes X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Remove the "reserved2" field and add the "packet_type" and the "inner_l2_l3_len" fields in the rte_mbuf structure. The packet type field is used to indicate ordinary L2 packet format and also tunneling packet format such as IP in IP, IP in GRE, MAC in GRE and MAC in UDP. The inner L2 length and the inner L3 length are used for TX offloading of tunneling packet. Signed-off-by: Jijiang Liu Acked-by: Helin Zhang Acked-by: Jingjing Wu --- lib/librte_mbuf/rte_mbuf.h | 25 ++++++++++++++++++++++++- 1 files changed, 24 insertions(+), 1 deletions(-) diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index ddadc21..98951a6 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -163,7 +163,14 @@ struct rte_mbuf { /* remaining bytes are set on RX when pulling packet from descriptor */ MARKER rx_descriptor_fields1; - uint16_t reserved2; /**< Unused field. Required for padding */ + + /** + * Packet type, which is used to indicate ordinary L2 packet format and + * also tunneled packet format such as IP in IP, IP in GRE, MAC in GRE + * and MAC in UDP. + */ + uint16_t packet_type; + uint16_t data_len; /**< Amount of data in segment buffer. */ uint32_t pkt_len; /**< Total pkt len: sum of all segments. */ uint16_t vlan_tci; /**< VLAN Tag Control Identifier (CPU order) */ @@ -196,6 +203,18 @@ struct rte_mbuf { uint16_t l2_len:7; /**< L2 (MAC) Header Length. */ }; }; + + /* fields for TX offloading of tunnels */ + union { + uint16_t inner_l2_l3_len; + /**< combined inner l2/l3 lengths as single var */ + struct { + uint16_t inner_l3_len:9; + /**< inner L3 (IP) Header Length. */ + uint16_t inner_l2_len:7; + /**< inner L2 (MAC) Header Length. */ + }; + }; } __rte_cache_aligned; /** @@ -546,11 +565,13 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf *m) m->next = NULL; m->pkt_len = 0; m->l2_l3_len = 0; + m->inner_l2_l3_len = 0; m->vlan_tci = 0; m->nb_segs = 1; m->port = 0xff; m->ol_flags = 0; + m->packet_type = 0; m->data_off = (RTE_PKTMBUF_HEADROOM <= m->buf_len) ? RTE_PKTMBUF_HEADROOM : m->buf_len; @@ -614,12 +635,14 @@ static inline void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *md) mi->port = md->port; mi->vlan_tci = md->vlan_tci; mi->l2_l3_len = md->l2_l3_len; + mi->inner_l2_l3_len = md->inner_l2_l3_len; mi->hash = md->hash; mi->next = NULL; mi->pkt_len = mi->data_len; mi->nb_segs = 1; mi->ol_flags = md->ol_flags; + mi->packet_type = md->packet_type; __rte_mbuf_sanity_check(mi, 1); __rte_mbuf_sanity_check(md, 0);