aboutsummaryrefslogtreecommitdiffstats
path: root/include/uapi/linux/in6.h
diff options
context:
space:
mode:
authorMaciej Żenczykowski <maze@google.com>2017-09-26 21:32:42 -0700
committerDavid S. Miller <davem@davemloft.net>2017-09-30 05:30:52 +0100
commit84e14fe353de7624872e582887712079ba0b2d56 (patch)
tree8e417422256f2b25f0a593874b6d8b3b384ff399 /include/uapi/linux/in6.h
parentnet: ipv6: send NS for DAD when link operationally up (diff)
downloadlinux-dev-84e14fe353de7624872e582887712079ba0b2d56.tar.xz
linux-dev-84e14fe353de7624872e582887712079ba0b2d56.zip
net-ipv6: add support for sockopt(SOL_IPV6, IPV6_FREEBIND)
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: Maciej Żenczykowski <maze@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/uapi/linux/in6.h')
-rw-r--r--include/uapi/linux/in6.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/uapi/linux/in6.h b/include/uapi/linux/in6.h
index 46444f8fbee4..4f8f3eb0699f 100644
--- a/include/uapi/linux/in6.h
+++ b/include/uapi/linux/in6.h
@@ -284,6 +284,7 @@ struct in6_flowlabel_req {
#define IPV6_TRANSPARENT 75
#define IPV6_UNICAST_IF 76
#define IPV6_RECVFRAGSIZE 77
+#define IPV6_FREEBIND 78
/*
* Multicast Routing: