X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_ip_frag%2Frte_ip_frag.h;h=92cedf2fe6a272bc72234209b2ae0685cc29f74a;hb=5915699153d788c5cb3c449635eca46f1da6f2fe;hp=3989a5a819ebed8d87daafecea94bd87d94db40d;hpb=3a52e64742c370bebc465b91f3197d940d5738cd;p=dpdk.git diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h index 3989a5a819..92cedf2fe6 100644 --- a/lib/librte_ip_frag/rte_ip_frag.h +++ b/lib/librte_ip_frag/rte_ip_frag.h @@ -41,15 +41,20 @@ * Implementation of IP packet fragmentation and reassembly. */ +#ifdef __cplusplus +extern "C" { +#endif + #include #include #include -#include #include #include #include +struct rte_mbuf; + enum { IP_LAST_FRAG_IDX, /**< index of last fragment */ IP_FIRST_FRAG_IDX, /**< index of first fragment */ @@ -123,19 +128,24 @@ struct rte_ip_frag_tbl { }; /** IPv6 fragment extension header */ +#define RTE_IPV6_EHDR_MF_SHIFT 0 +#define RTE_IPV6_EHDR_MF_MASK 1 +#define RTE_IPV6_EHDR_FO_SHIFT 3 +#define RTE_IPV6_EHDR_FO_MASK (~((1 << RTE_IPV6_EHDR_FO_SHIFT) - 1)) + +#define RTE_IPV6_FRAG_USED_MASK \ + (RTE_IPV6_EHDR_MF_MASK | RTE_IPV6_EHDR_FO_MASK) + +#define RTE_IPV6_GET_MF(x) ((x) & RTE_IPV6_EHDR_MF_MASK) +#define RTE_IPV6_GET_FO(x) ((x) >> RTE_IPV6_EHDR_FO_SHIFT) + +#define RTE_IPV6_SET_FRAG_DATA(fo, mf) \ + (((fo) & RTE_IPV6_EHDR_FO_MASK) | ((mf) & RTE_IPV6_EHDR_MF_MASK)) + struct ipv6_extension_fragment { uint8_t next_header; /**< Next header type */ - uint8_t reserved1; /**< Reserved */ - union { - struct { - uint16_t frag_offset:13; /**< Offset from the start of the packet */ - uint16_t reserved2:2; /**< Reserved */ - uint16_t more_frags:1; - /**< 1 if more fragments left, 0 if last fragment */ - }; - uint16_t frag_data; - /**< union of all fragmentation data */ - }; + uint8_t reserved; /**< Reserved */ + uint16_t frag_data; /**< All fragmentation data */ uint32_t id; /**< Packet ID */ } __attribute__((__packed__)); @@ -176,7 +186,6 @@ rte_ip_frag_table_destroy( struct rte_ip_frag_tbl *tbl) rte_free(tbl); } -#ifdef RTE_MBUF_REFCNT /** * This function implements the fragmentation of IPv6 packets. * @@ -205,7 +214,6 @@ rte_ipv6_fragment_packet(struct rte_mbuf *pkt_in, uint16_t mtu_size, struct rte_mempool *pool_direct, struct rte_mempool *pool_indirect); -#endif /* * This function implements reassembly of fragmented IPv6 packets. @@ -254,7 +262,6 @@ rte_ipv6_frag_get_ipv6_fragment_header(struct ipv6_hdr *hdr) return NULL; } -#ifdef RTE_MBUF_REFCNT /** * IPv4 fragmentation. * @@ -283,7 +290,6 @@ int32_t rte_ipv4_fragment_packet(struct rte_mbuf *pkt_in, uint16_t nb_pkts_out, uint16_t mtu_size, struct rte_mempool *pool_direct, struct rte_mempool *pool_indirect); -#endif /* * This function implements reassembly of fragmented IPv4 packets. @@ -350,4 +356,8 @@ void rte_ip_frag_free_death_row(struct rte_ip_frag_death_row *dr, void rte_ip_frag_table_statistics_dump(FILE * f, const struct rte_ip_frag_tbl *tbl); +#ifdef __cplusplus +} +#endif + #endif /* _RTE_IP_FRAG_H_ */