X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Fip_frag%2Frte_ip_frag.h;h=7d2abe116a59debed5ab7192b271a2af7865ccb1;hb=30a1de105a5f40d77b344a891c4a68f79e815c43;hp=08555fde6aaed64d3845ea79864604113f32c38d;hpb=f1f6ebc0eaf68a825c6175f5e6a436f7d91660c3;p=dpdk.git diff --git a/lib/ip_frag/rte_ip_frag.h b/lib/ip_frag/rte_ip_frag.h index 08555fde6a..7d2abe116a 100644 --- a/lib/ip_frag/rte_ip_frag.h +++ b/lib/ip_frag/rte_ip_frag.h @@ -27,92 +27,20 @@ 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; +/** death row size (in packets) */ +#define RTE_IP_FRAG_DEATH_ROW_LEN 32 -#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)) +/** death row size in mbufs */ +#define RTE_IP_FRAG_DEATH_ROW_MBUF_LEN \ + (RTE_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 { uint32_t cnt; /**< number of mbufs currently on death row */ - struct rte_mbuf *row[IP_FRAG_DEATH_ROW_MBUF_LEN]; + struct rte_mbuf *row[RTE_IP_FRAG_DEATH_ROW_MBUF_LEN]; /**< 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 - /** * Create a new IP fragmentation table. * @@ -198,7 +126,7 @@ rte_ipv6_fragment_packet(struct rte_mbuf *pkt_in, struct rte_mbuf *rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl, struct rte_ip_frag_death_row *dr, struct rte_mbuf *mb, uint64_t tms, struct rte_ipv6_hdr *ip_hdr, - struct ipv6_extension_fragment *frag_hdr); + struct rte_ipv6_fragment_ext *frag_hdr); /** * Return a pointer to the packet's fragment header, if found. @@ -211,11 +139,11 @@ struct rte_mbuf *rte_ipv6_frag_reassemble_packet(struct rte_ip_frag_tbl *tbl, * Pointer to the IPv6 fragment extension header, or NULL if it's not * present. */ -static inline struct ipv6_extension_fragment * +static inline struct rte_ipv6_fragment_ext * rte_ipv6_frag_get_ipv6_fragment_header(struct rte_ipv6_hdr *hdr) { if (hdr->proto == IPPROTO_FRAGMENT) { - return (struct ipv6_extension_fragment *) ++hdr; + return (struct rte_ipv6_fragment_ext *) ++hdr; } else return NULL; @@ -328,9 +256,20 @@ rte_ip_frag_table_statistics_dump(FILE * f, const struct rte_ip_frag_tbl *tbl); */ __rte_experimental void -rte_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl, +rte_ip_frag_table_del_expired_entries(struct rte_ip_frag_tbl *tbl, struct rte_ip_frag_death_row *dr, uint64_t tms); +/**@{@name Obsolete macros, kept here for compatibility reasons. + * Will be deprecated/removed in future DPDK releases. + */ +/** Obsolete */ +#define IP_FRAG_DEATH_ROW_LEN RTE_IP_FRAG_DEATH_ROW_LEN +/** Obsolete */ +#define IP_FRAG_DEATH_ROW_MBUF_LEN RTE_IP_FRAG_DEATH_ROW_MBUF_LEN +/** Obsolete */ +#define ipv6_extension_fragment rte_ipv6_fragment_ext +/**@}*/ + #ifdef __cplusplus } #endif