Hi Konstantin, > > Hi Akhil, > > > > > Hi Marcin, > > > > > > > > Introduce new function for IPv6 header extension parsing able to > > > determine extension length and next protocol number. > > > > > > This function is helpful when implementing IPv6 header traversing. > > > > > > Signed-off-by: Marcin Smoczynski <marcinx.smoczyn...@intel.com> > > > --- > > > lib/librte_net/rte_ip.h | 49 > +++++++++++++++++++++++++++++++++++++++++ > > > 1 file changed, 49 insertions(+) > > > > > > diff --git a/lib/librte_net/rte_ip.h b/lib/librte_net/rte_ip.h > > > index f9b909090..be64da662 100644 > > > --- a/lib/librte_net/rte_ip.h > > > +++ b/lib/librte_net/rte_ip.h > > > @@ -425,6 +425,55 @@ rte_ipv6_udptcp_cksum(const struct ipv6_hdr > > > *ipv6_hdr, const void *l4_hdr) > > > return (uint16_t)cksum; > > > } > > > > > > +/* IPv6 fragmentation header size */ > > > +#define RTE_IPV6_FRAG_HDR_SIZE 8 > > > + > > > +/** > > > + * Parse next IPv6 header extension > > > + * > > > + * This function checks if proto number is an IPv6 extensions and parses > > > its > > > + * data if so, providing information on next header and extension length. > > > + * > > > + * @param p > > > + * Pointer to an extension raw data. > > > + * @param proto > > > + * Protocol number extracted from the "next header" field from > > > + * the IPv6 header or the previous extension. > > > + * @param ext_len > > > + * Extension data length. > > > + * @return > > > + * next protocol number if proto is an IPv6 extension, -EINVAL > > > otherwise > > > + */ > > > +static inline int __rte_experimental > > > > > > Rte_experimental may not be required for inline functions. > > AFAIK we do need that tag for both inline and non-inline functions, > till API will be transferred to 'stable' state: > > $ find lib -type f | xargs grep __rte_experimental | grep inline | wc -l > 57
My first impression was that this API was not exposed. Inline APIs are normally not exposed, So I thought rte_experimental is not required. I believe only exposed APIs Need to be tagged with rte_experimental. Now since this API is exposed to the application as well, it should have an entry in the .map file. Otherwise shared build will fail I think for application. > > > > > > > > +rte_ipv6_get_next_ext(uint8_t *p, int proto, size_t *ext_len) > > > +{ > > > + int next_proto; > > > + > > > + switch (proto) { > > > + case IPPROTO_AH: > > > + next_proto = *p++; > > > + *ext_len = (*p + 2) * sizeof(uint32_t); > > > + break; > > > + > > > + case IPPROTO_HOPOPTS: > > > + case IPPROTO_ROUTING: > > > + case IPPROTO_DSTOPTS: > > > + next_proto = *p++; > > > + *ext_len = (*p + 1) * sizeof(uint64_t); > > > + break; > > > + > > > + case IPPROTO_FRAGMENT: > > I see that there is some compilation issues with respect to IPPROTO_xxx > > fields. > These are reported in patchworks if you need details. > > > > Could you please fix these and send next rev. > > > > Thanks, > > Akhil