From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 403A0A0C57; Mon, 1 Nov 2021 13:49:22 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 29EF4410E8; Mon, 1 Nov 2021 13:49:22 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 66AD940DF6 for ; Mon, 1 Nov 2021 13:49:20 +0100 (CET) X-IronPort-AV: E=McAfee;i="6200,9189,10154"; a="231268602" X-IronPort-AV: E=Sophos;i="5.87,199,1631602800"; d="scan'208";a="231268602" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Nov 2021 05:49:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,199,1631602800"; d="scan'208";a="637766642" Received: from sivswdev08.ir.intel.com ([10.237.217.47]) by fmsmga001.fm.intel.com with ESMTP; 01 Nov 2021 05:49:18 -0700 From: Konstantin Ananyev To: dev@dpdk.org Cc: Konstantin Ananyev Date: Mon, 1 Nov 2021 12:49:15 +0000 Message-Id: <20211101124915.9640-1-konstantin.ananyev@intel.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20211101122444.5276-1-konstantin.ananyev@intel.com> References: <20211101122444.5276-1-konstantin.ananyev@intel.com> Subject: [dpdk-dev] [PATCH v2] ip_frag: hide internal structures X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 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" Move internal reassembly structures into new private header 'ip_reassembly.h'. Signed-off-by: Konstantin Ananyev --- lib/ip_frag/ip_frag_common.h | 1 + lib/ip_frag/ip_reassembly.h | 88 ++++++++++++++++++++++++++++++++++++ lib/ip_frag/rte_ip_frag.h | 74 +----------------------------- 3 files changed, 91 insertions(+), 72 deletions(-) create mode 100644 lib/ip_frag/ip_reassembly.h diff --git a/lib/ip_frag/ip_frag_common.h b/lib/ip_frag/ip_frag_common.h index a17a74076c..9c0dbdeb6e 100644 --- a/lib/ip_frag/ip_frag_common.h +++ b/lib/ip_frag/ip_frag_common.h @@ -6,6 +6,7 @@ #define _IP_FRAG_COMMON_H_ #include "rte_ip_frag.h" +#include "ip_reassembly.h" /* logging macros. */ #ifdef RTE_LIBRTE_IP_FRAG_DEBUG diff --git a/lib/ip_frag/ip_reassembly.h b/lib/ip_frag/ip_reassembly.h new file mode 100644 index 0000000000..768a904a3f --- /dev/null +++ b/lib/ip_frag/ip_reassembly.h @@ -0,0 +1,88 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2021 Intel Corporation + */ + +#ifndef _IP_REASSEMBLY_H_ +#define _IP_REASSEMBLY_H_ + +/* + * RTE IP Fragmentation and Reassembly + * Implementation of IP packet fragmentation and reassembly. + */ + +#include + +enum { + IP_LAST_FRAG_IDX, /**< index of last fragment */ + IP_FIRST_FRAG_IDX, /**< index of first fragment */ + IP_MIN_FRAG_NUM, /**< minimum number of fragments */ + IP_MAX_FRAG_NUM = RTE_LIBRTE_IP_FRAG_MAX_FRAG, + /**< maximum number of fragments per packet */ +}; + +/** @internal fragmented mbuf */ +struct ip_frag { + uint16_t ofs; /**< offset into the packet */ + uint16_t len; /**< length of fragment */ + struct rte_mbuf *mb; /**< fragment mbuf */ +}; + +/** @internal + * to uniquely identify fragmented datagram. + */ +struct ip_frag_key { + uint64_t src_dst[4]; + /**< src and dst address, only first 8 bytes used for IPv4 */ + RTE_STD_C11 + union { + uint64_t id_key_len; /**< combined for easy fetch */ + __extension__ + struct { + uint32_t id; /**< packet id */ + uint32_t key_len; /**< src/dst key length */ + }; + }; +}; + +/** + * @internal Fragmented packet to reassemble. + * First two entries in the frags[] array are for the last and first fragments. + */ +struct ip_frag_pkt { + RTE_TAILQ_ENTRY(ip_frag_pkt) lru; /**< LRU list */ + struct ip_frag_key key; /**< fragmentation key */ + uint64_t start; /**< creation timestamp */ + uint32_t total_size; /**< expected reassembled size */ + uint32_t frag_size; /**< size of fragments received */ + uint32_t last_idx; /**< index of next entry to fill */ + struct ip_frag frags[IP_MAX_FRAG_NUM]; /**< fragments */ +} __rte_cache_aligned; + +RTE_TAILQ_HEAD(ip_pkt_list, ip_frag_pkt); /**< @internal fragments tailq */ + +/** fragmentation table statistics */ +struct ip_frag_tbl_stat { + uint64_t find_num; /**< total # of find/insert attempts. */ + uint64_t add_num; /**< # of add ops. */ + uint64_t del_num; /**< # of del ops. */ + uint64_t reuse_num; /**< # of reuse (del/add) ops. */ + uint64_t fail_total; /**< total # of add failures. */ + uint64_t fail_nospace; /**< # of 'no space' add failures. */ +} __rte_cache_aligned; + +/** fragmentation table */ +struct rte_ip_frag_tbl { + uint64_t max_cycles; /**< ttl for table entries. */ + uint32_t entry_mask; /**< hash value mask. */ + uint32_t max_entries; /**< max entries allowed. */ + uint32_t use_entries; /**< entries in use. */ + uint32_t bucket_entries; /**< hash associativity. */ + uint32_t nb_entries; /**< total size of the table. */ + uint32_t nb_buckets; /**< num of associativity lines. */ + struct ip_frag_pkt *last; /**< last used entry. */ + struct ip_pkt_list lru; /**< LRU list for table entries. */ + struct ip_frag_tbl_stat stat; /**< statistics counters. */ + __extension__ struct ip_frag_pkt pkt[0]; /**< hash table. */ +}; + +#endif /* _RTE_IP_REASSEMBLY_H_ */ diff --git a/lib/ip_frag/rte_ip_frag.h b/lib/ip_frag/rte_ip_frag.h index 08555fde6a..b469bb5f4e 100644 --- a/lib/ip_frag/rte_ip_frag.h +++ b/lib/ip_frag/rte_ip_frag.h @@ -27,54 +27,11 @@ extern "C" { struct rte_mbuf; -enum { - IP_LAST_FRAG_IDX, /**< index of last fragment */ - IP_FIRST_FRAG_IDX, /**< index of first fragment */ - IP_MIN_FRAG_NUM, /**< minimum number of fragments */ - IP_MAX_FRAG_NUM = RTE_LIBRTE_IP_FRAG_MAX_FRAG, - /**< maximum number of fragments per packet */ -}; - -/** @internal fragmented mbuf */ -struct ip_frag { - uint16_t ofs; /**< offset into the packet */ - uint16_t len; /**< length of fragment */ - struct rte_mbuf *mb; /**< fragment mbuf */ -}; - -/** @internal to uniquely identify fragmented datagram. */ -struct ip_frag_key { - uint64_t src_dst[4]; - /**< src and dst address, only first 8 bytes used for IPv4 */ - RTE_STD_C11 - union { - uint64_t id_key_len; /**< combined for easy fetch */ - __extension__ - struct { - uint32_t id; /**< packet id */ - uint32_t key_len; /**< src/dst key length */ - }; - }; -}; - -/** - * @internal Fragmented packet to reassemble. - * First two entries in the frags[] array are for the last and first fragments. - */ -struct ip_frag_pkt { - RTE_TAILQ_ENTRY(ip_frag_pkt) lru; /**< LRU list */ - struct ip_frag_key key; /**< fragmentation key */ - uint64_t start; /**< creation timestamp */ - uint32_t total_size; /**< expected reassembled size */ - uint32_t frag_size; /**< size of fragments received */ - uint32_t last_idx; /**< index of next entry to fill */ - struct ip_frag frags[IP_MAX_FRAG_NUM]; /**< fragments */ -} __rte_cache_aligned; - #define IP_FRAG_DEATH_ROW_LEN 32 /**< death row size (in packets) */ /* death row size in mbufs */ -#define IP_FRAG_DEATH_ROW_MBUF_LEN (IP_FRAG_DEATH_ROW_LEN * (IP_MAX_FRAG_NUM + 1)) +#define IP_FRAG_DEATH_ROW_MBUF_LEN \ + (IP_FRAG_DEATH_ROW_LEN * (RTE_LIBRTE_IP_FRAG_MAX_FRAG + 1)) /** mbuf death row (packets to be freed) */ struct rte_ip_frag_death_row { @@ -83,33 +40,6 @@ struct rte_ip_frag_death_row { /**< mbufs to be freed */ }; -RTE_TAILQ_HEAD(ip_pkt_list, ip_frag_pkt); /**< @internal fragments tailq */ - -/** fragmentation table statistics */ -struct ip_frag_tbl_stat { - uint64_t find_num; /**< total # of find/insert attempts. */ - uint64_t add_num; /**< # of add ops. */ - uint64_t del_num; /**< # of del ops. */ - uint64_t reuse_num; /**< # of reuse (del/add) ops. */ - uint64_t fail_total; /**< total # of add failures. */ - uint64_t fail_nospace; /**< # of 'no space' add failures. */ -} __rte_cache_aligned; - -/** fragmentation table */ -struct rte_ip_frag_tbl { - uint64_t max_cycles; /**< ttl for table entries. */ - uint32_t entry_mask; /**< hash value mask. */ - uint32_t max_entries; /**< max entries allowed. */ - uint32_t use_entries; /**< entries in use. */ - uint32_t bucket_entries; /**< hash associativity. */ - uint32_t nb_entries; /**< total size of the table. */ - uint32_t nb_buckets; /**< num of associativity lines. */ - struct ip_frag_pkt *last; /**< last used entry. */ - struct ip_pkt_list lru; /**< LRU list for table entries. */ - struct ip_frag_tbl_stat stat; /**< statistics counters. */ - __extension__ struct ip_frag_pkt pkt[0]; /**< hash table. */ -}; - /* struct ipv6_extension_fragment moved to librte_net/rte_ip.h and renamed. */ #define ipv6_extension_fragment rte_ipv6_fragment_ext -- 2.25.1