From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sclab-apps-2.localdomain (sc-fw1.tilera.com [12.218.212.162]) by dpdk.org (Postfix) with ESMTP id DB22FC8B4 for ; Wed, 29 Apr 2015 18:16:06 +0200 (CEST) X-CheckPoint: {554103C6-6-A3D4DA0C-C0000002} Received: by sclab-apps-2.localdomain (Postfix, from userid 1318) id E566E22072C; Wed, 29 Apr 2015 09:15:54 -0700 (PDT) From: Cyril Chemparathy To: dev@dpdk.org Date: Wed, 29 Apr 2015 09:15:32 -0700 Message-Id: <1430324134-25654-9-git-send-email-cchemparathy@ezchip.com> X-Mailer: git-send-email 2.1.2 In-Reply-To: <1430324134-25654-1-git-send-email-cchemparathy@ezchip.com> References: <1430324134-25654-1-git-send-email-cchemparathy@ezchip.com> Subject: [dpdk-dev] [PATCH 08/10] librte_mbuf: Add rte_pktmbuf_mtod_offset() 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: , X-List-Received-Date: Wed, 29 Apr 2015 16:16:16 -0000 There are a number of instances in the code where rte_pktmbuf_mtod() is used to get the mbuf data pointer, only to add an offset before casting the result to some other header type. This patch adds a new rte_pktmbuf_mtod_offset() macro to eliminate these awful double cast situations. Signed-off-by: Cyril Chemparathy --- lib/librte_mbuf/rte_mbuf.h | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h index 5ddd8dd..e8f1bf4 100644 --- a/lib/librte_mbuf/rte_mbuf.h +++ b/lib/librte_mbuf/rte_mbuf.h @@ -54,6 +54,7 @@ */ #include +#include #include #include #include @@ -1071,6 +1072,23 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m) } /** + * A macro that points to an offset into the data in the mbuf. + * + * The returned pointer is cast to type t. Before using this + * function, the user must ensure that m_headlen(m) is large enough to + * read its data. + * + * @param m + * The packet mbuf. + * @param o + * The offset into the mbuf data. + * @param t + * The type to cast the result into. + */ +#define rte_pktmbuf_mtod_offset(m, t, o) \ + ((t)((char *)(m)->buf_addr + (m)->data_off + (o))) + +/** * A macro that points to the start of the data in the mbuf. * * The returned pointer is cast to type t. Before using this @@ -1082,7 +1100,7 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m) * @param t * The type to cast the result into. */ -#define rte_pktmbuf_mtod(m, t) ((t)((char *)(m)->buf_addr + (m)->data_off)) +#define rte_pktmbuf_mtod(m, t) rte_pktmbuf_mtod_offset(m, t, 0) /** * A macro that returns the length of the packet. -- 2.1.2