[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [PATCH 5/7] {udp_io, traceroute}: Standardise IPv6 PKTINFO handling to be portable



Applied, thanks!

On Sat, Oct 7, 2017 at 7:53 PM, James Clarke <jrtc27@jrtc27.com> wrote:
> The current standard (RFC 3542) is for IPV6_RECVPKTINFO to be given to
> setsockopt, and IPV6_PKTINFO to be used as the packet type. Previously,
> RFC 2292 required IPV6_PKTINFO to be used for both, but RFC 3542
> re-purposed IPV6_PKTINFO when given to setsockopt. The special
> Linux-specific IPV6_2292PKTINFO has the same semantics as IPV6_PKTINFO
> in RFC 2292, but was introduced at the same time as IPV6_RECVPKTINFO.
>
> Therefore, if we have IPV6_RECVPKTINFO available, we can use the RFC
> 3542 style, and if not, we assume that only the RFC 2292 API is
> available, using IPV6_PKTINFO for both.
>
> Signed-off-by: James Clarke <jrtc27@jrtc27.com>
> ---
>  libbb/udp_io.c          | 8 ++++++--
>  networking/traceroute.c | 8 +++-----
>  2 files changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/libbb/udp_io.c b/libbb/udp_io.c
> index 6e3ef484e..68355e6c4 100644
> --- a/libbb/udp_io.c
> +++ b/libbb/udp_io.c
> @@ -8,6 +8,10 @@
>   */
>  #include "libbb.h"
>
> +#if defined(IPV6_PKTINFO) && !defined(IPV6_RECVPKTINFO)
> +# define IPV6_RECVPKTINFO IPV6_PKTINFO
> +#endif
> +
>  /*
>   * This asks kernel to let us know dst addr/port of incoming packets
>   * We don't check for errors here. Not supported == won't be used
> @@ -18,8 +22,8 @@ socket_want_pktinfo(int fd UNUSED_PARAM)
>  #ifdef IP_PKTINFO
>         setsockopt_1(fd, IPPROTO_IP, IP_PKTINFO);
>  #endif
> -#if ENABLE_FEATURE_IPV6 && defined(IPV6_PKTINFO)
> -       setsockopt_1(fd, IPPROTO_IPV6, IPV6_PKTINFO);
> +#if ENABLE_FEATURE_IPV6 && defined(IPV6_RECVPKTINFO)
> +       setsockopt_1(fd, IPPROTO_IPV6, IPV6_RECVPKTINFO);
>  #endif
>  }
>
> diff --git a/networking/traceroute.c b/networking/traceroute.c
> index df7122047..6dcbc2faa 100644
> --- a/networking/traceroute.c
> +++ b/networking/traceroute.c
> @@ -311,6 +311,9 @@
>  # ifndef SOL_IPV6
>  #  define SOL_IPV6 IPPROTO_IPV6
>  # endif
> +# if defined(IPV6_PKTINFO) && !defined(IPV6_RECVPKTINFO)
> +#  define IPV6_RECVPKTINFO IPV6_PKTINFO
> +# endif
>  #endif
>
>  #include "libbb.h"
> @@ -911,12 +914,7 @@ common_traceroute_main(int op, char **argv)
>  #if ENABLE_TRACEROUTE6
>         if (af == AF_INET6) {
>                 xmove_fd(xsocket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6), rcvsock);
> -# ifdef IPV6_RECVPKTINFO
>                 setsockopt_1(rcvsock, SOL_IPV6, IPV6_RECVPKTINFO);
> -               setsockopt_1(rcvsock, SOL_IPV6, IPV6_2292PKTINFO);
> -# else
> -               setsockopt_1(rcvsock, SOL_IPV6, IPV6_PKTINFO);
> -# endif
>         } else
>  #endif
>         {
> --
> 2.14.1
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox


Reply to: