[PATCH] inet: Add common IPv6 packet header macros

Adhemerval Zanella Netto adhemerval.zanella@linaro.org
Thu Jan 2 12:15:14 GMT 2025



On 04/12/24 16:50, Dan Luedtke wrote:
> Adds commonly used IPv6 packet header macros similar to what is available
> on NetBSD and FreeBSD in sys/netinet/ip6.h and Android in
> libc/include/netinet/ip6.h
> 
> Usage example IPV6_VERSION_MASK and IPV6_VERSION:
> 
>     if ((ip6->ip6_vfc & IPV6_VERSION_MASK) == IPV6_VERSION)
>         return true;
> 
> Usage example IPV6_FLOWINFO_MASK:
> 
>     ip6->ip6_flow = (flow & IPV6_FLOWINFO_MASK);
> 
> The relevant standard is RFC2460 (Internet Protocol, Version 6
> Specification). It defines the Internet Protocol version (IPV6_VERSION)
> and reduced the size of the flow label field from 24 to 20 bits
> (IPV6_FLOWLABEL_MASK). The traffic class and flow label fields together
> make up the flow information (IPV6_FLOWINFO_MASK).
> 
> Tested on x86_64 GNU/Linux
> 
> Signed-off-by: Dan Luedtke <danrl@google.com>

LGTM, thanks.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>

> ---
>  inet/netinet/ip6.h | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/inet/netinet/ip6.h b/inet/netinet/ip6.h
> index c5d9697e2c..1ecc10f7b5 100644
> --- a/inet/netinet/ip6.h
> +++ b/inet/netinet/ip6.h
> @@ -46,6 +46,17 @@ struct ip6_hdr
>  #define ip6_hlim  ip6_ctlun.ip6_un1.ip6_un1_hlim
>  #define ip6_hops  ip6_ctlun.ip6_un1.ip6_un1_hlim
>  
> +#define IPV6_VERSION       0x60
> +#define IPV6_VERSION_MASK  0xf0
> +
> +#if __BYTE_ORDER == __BIG_ENDIAN
> +#define IPV6_FLOWINFO_MASK   0x0fffffff  /* flow info (28 bits) */
> +#define IPV6_FLOWLABEL_MASK  0x000fffff  /* flow label (20 bits) */
> +#else   /* __BYTE_ORDER == __LITTLE_ENDIAN */
> +#define IPV6_FLOWINFO_MASK   0xffffff0f  /* flow info (28 bits) */
> +#define IPV6_FLOWLABEL_MASK  0xffff0f00  /* flow label (20 bits) */
> +#endif
> +
>  /* Generic extension header.  */
>  struct ip6_ext
>    {



More information about the Libc-alpha mailing list