aboutsummaryrefslogtreecommitdiff
path: root/pfinet/linux-src/include/linux
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2013-01-13 16:23:35 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2013-01-13 16:26:51 +0100
commit2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f (patch)
treee7409c870c39a10241875454e345d5ec16517738 /pfinet/linux-src/include/linux
parent03be85eb11f756414aafedca22f93a3351b727b8 (diff)
downloadhurd-2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f.tar.gz
hurd-2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f.tar.bz2
hurd-2b2d7fdc42475019e5ce3eabc9c9673e3c13d89f.zip
[IPV6]: Add IPV6_V6ONLY socket option support.
Cherry-picked from Linux 524354b4d086a4f013343d727eaccb7b4c39eb25 * pfinet/glue-include/linux/ipv6.h: Include linux/config.h> (__ipv6_only_sock, ipv6_only_sock): New macros * pfinet/linux-src/include/linux/ipv6.h: Likewise. * pfinet/linux-src/include/linux/in6.h (IPV6_V6ONLY): New macro. * pfinet/linux-src/include/linux/sysctl.h (NET_IPV6_BINDV6ONLY): New macro. * pfinet/linux-src/include/net/ipv6.h (sysctl_ipv6_bindv6only): Declare variable. * pfinet/linux-src/include/net/sock.h (ipv6_pinfo): Add ipv6only field. * pfinet/linux-src/net/ipv4/tcp_ipv4.c: Include linux/ipv6.h. (tcp_v4_get_port, tcp_v4_lookup_listener): Test for ipv6_only_sock. * pfinet/linux-src/net/ipv4/udp.c: Include linux/ipv6.h. (udp_v4_get_port, udp_v4_lookup_longway, udp_v4_mcast_next): Test for ipv6_only_sock. * pfinet/linux-src/net/ipv6/af_inet6.c (sysctl_ipv6_bindv6only): New variable. (inet6_create): Initialize ipv6only field to sysctl_ipv6_bindv6only. * pfinet/linux-src/net/ipv6/ipv6_sockglue.c (ipv6_setsockopt): Test for ipv6_only_sock. (ipv6_setsockopt, ipv6_getsockopt): Support IPV6_V6ONLY case. * pfinet/linux-src/net/ipv6/tcp_ipv6.c (ipv6_rcv_saddr_equal): New inline function. (tcp_v6_get_port): Replace old tests with ipv6_rcv_saddr_equal. (tcp_v6_connect): Test for __ipv6_only_sock. * pfinet/linux-src/net/ipv6/udp_ipv6.c (udv6_rcv_saddr_equal): New inline function. (udp_v6_get_port): Replace old tests with udv6_rcv_saddr_equal. (udpv6_connect, udpv6_sendmsg): Test for __ipv6_only_sock.
Diffstat (limited to 'pfinet/linux-src/include/linux')
-rw-r--r--pfinet/linux-src/include/linux/in6.h1
-rw-r--r--pfinet/linux-src/include/linux/ipv6.h9
-rw-r--r--pfinet/linux-src/include/linux/sysctl.h3
3 files changed, 12 insertions, 1 deletions
diff --git a/pfinet/linux-src/include/linux/in6.h b/pfinet/linux-src/include/linux/in6.h
index ca5e768b..35e018c7 100644
--- a/pfinet/linux-src/include/linux/in6.h
+++ b/pfinet/linux-src/include/linux/in6.h
@@ -179,6 +179,7 @@ struct in6_flowlabel_req
#define IPV6_MTU_DISCOVER 23
#define IPV6_MTU 24
#define IPV6_RECVERR 25
+#define IPV6_V6ONLY 26
/* IPV6_MTU_DISCOVER values */
#define IPV6_PMTUDISC_DONT 0
diff --git a/pfinet/linux-src/include/linux/ipv6.h b/pfinet/linux-src/include/linux/ipv6.h
index 84564bae..299db1a5 100644
--- a/pfinet/linux-src/include/linux/ipv6.h
+++ b/pfinet/linux-src/include/linux/ipv6.h
@@ -1,6 +1,7 @@
#ifndef _IPV6_H
#define _IPV6_H
+#include <linux/config.h>
#include <linux/in6.h>
#include <asm/byteorder.h>
@@ -118,6 +119,14 @@ struct inet6_skb_parm
__u16 dst1;
};
+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
+#define __ipv6_only_sock(sk) (sk->net_pinfo.af_inet6.ipv6only)
+#define ipv6_only_sock(sk) ((sk)->family == PF_INET6 && __ipv6_only_sock(sk))
+#else
+#define __ipv6_only_sock(sk) 0
+#define ipv6_only_sock(sk) 0
+#endif
+
#endif
#endif
diff --git a/pfinet/linux-src/include/linux/sysctl.h b/pfinet/linux-src/include/linux/sysctl.h
index 00bebabe..1067bfbb 100644
--- a/pfinet/linux-src/include/linux/sysctl.h
+++ b/pfinet/linux-src/include/linux/sysctl.h
@@ -276,7 +276,8 @@ enum
enum {
NET_IPV6_CONF=16,
NET_IPV6_NEIGH=17,
- NET_IPV6_ROUTE=18
+ NET_IPV6_ROUTE=18,
+ NET_IPV6_BINDV6ONLY=20,
};
enum {