• Maciej Żenczykowski's avatar
    net-ipv6: add support for sockopt(SOL_IPV6, IPV6_FREEBIND) · 84e14fe3
    Maciej Żenczykowski authored
    So far we've been relying on sockopt(SOL_IP, IP_FREEBIND) being usable
    even on IPv6 sockets.
    
    However, it turns out it is perfectly reasonable to want to set freebind
    on an AF_INET6 SOCK_RAW socket - but there is no way to set any SOL_IP
    socket option on such a socket (they're all blindly errored out).
    
    One use case for this is to allow spoofing src ip on a raw socket
    via sendmsg cmsg.
    
    Tested:
      built, and booted
      # python
      >>> import socket
      >>> SOL_IP = socket.SOL_IP
      >>> SOL_IPV6 = socket.IPPROTO_IPV6
      >>> IP_FREEBIND = 15
      >>> IPV6_FREEBIND = 78
      >>> s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, 0)
      >>> s.getsockopt(SOL_IP, IP_FREEBIND)
      0
      >>> s.getsockopt(SOL_IPV6, IPV6_FREEBIND)
      0
      >>> s.setsockopt(SOL_IPV6, IPV6_FREEBIND, 1)
      >>> s.getsockopt(SOL_IP, IP_FREEBIND)
      1
      >>> s.getsockopt(SOL_IPV6, IPV6_FREEBIND)
      1
    Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    84e14fe3
ipv6_sockglue.c 30.2 KB