X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_ip_frag%2Frte_ip_frag.h;h=92cedf2fe6a272bc72234209b2ae0685cc29f74a;hb=b7743213447f8c9aa4afa0f2ea9fac56628c57e3;hp=1083d440b56e2d167cf65d360791389b67bc7163;hpb=9f516206d9a5fde6f25bae0553c6aa1a32a09b69;p=dpdk.git diff --git a/lib/librte_ip_frag/rte_ip_frag.h b/lib/librte_ip_frag/rte_ip_frag.h index 1083d440b5..92cedf2fe6 100644 --- a/lib/librte_ip_frag/rte_ip_frag.h +++ b/lib/librte_ip_frag/rte_ip_frag.h @@ -49,11 +49,12 @@ extern "C" { #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 */ @@ -127,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__)); @@ -180,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. * @@ -209,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. @@ -258,7 +262,6 @@ rte_ipv6_frag_get_ipv6_fragment_header(struct ipv6_hdr *hdr) return NULL; } -#ifdef RTE_MBUF_REFCNT /** * IPv4 fragmentation. * @@ -287,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.