summaryrefslogtreecommitdiff
path: root/java/jdk14/files/patch-ipv6only
blob: 2be94884d76e9ff855971e203475f10a4e0804d5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
$FreeBSD$

--- ../../j2se/src/solaris/native/java/net/PlainDatagramSocketImpl.c.orig	Mon Oct 31 21:54:39 2005
+++ ../../j2se/src/solaris/native/java/net/PlainDatagramSocketImpl.c	Tue Nov  1 13:13:05 2005
@@ -226,8 +226,15 @@ Java_java_net_PlainDatagramSocketImpl_bi
 
     NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len);
 #if defined(_ALLBSD_SOURCE)
-            if (cannotMap4to6(env, iaObj))
-                return;
+#if defined(IPV6_V6ONLY)
+    if (((struct sockaddr *)&him)->sa_family == AF_INET6) {
+	int t = 0;
+	JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&t, sizeof(t));
+    }
+#else
+    if (cannotMap4to6(env, iaObj))
+	return;
+#endif /* IPV6_V6ONLY */
 #endif /* _ALLBSD_SOURCE */
 
 
@@ -292,8 +299,15 @@ Java_java_net_PlainDatagramSocketImpl_co
 
     NET_InetAddressToSockaddr(env, address, port, (struct sockaddr *)&rmtaddr, &len);
 #if defined(_ALLBSD_SOURCE)
-            if (cannotMap4to6(env, address))
-                return;
+#if defined(IPV6_V6ONLY)
+    if (((struct sockaddr *)&rmtaddr)->sa_family == AF_INET6) {
+	int t = 0;
+	JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&t, sizeof(t));
+    }
+#else
+    if (cannotMap4to6(env, address))
+	return;
+#endif /* IPV6_V6ONLY */
 #endif /* _ALLBSD_SOURCE */
 
 
@@ -2191,11 +2205,18 @@ static void mcast_join_leave(JNIEnv *env
 	jbyte caddr[16];
 	jint family;
 	jint address;
+#if defined(_ALLBSD_SOURCE) && defined(IPV6_V6ONLY)
+	int t = 0;
+#endif
 	family = (*env)->GetIntField(env, iaObj, ia_familyID) == IPv4? AF_INET : AF_INET6;
 
 #if defined(_ALLBSD_SOURCE)
-	    if (cannotMap4to6(env, iaObj))
-		return;
+#if defined(IPV6_V6ONLY)
+	JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&t, sizeof(t));
+#else
+	if (cannotMap4to6(env, iaObj))
+	    return;
+#endif /* IPV6_V6ONLY */
 #endif /* _ALLBSD_SOURCE */
 
 	if (family == AF_INET) { /* will convert to IPv4-mapped address */
--- ../../j2se/src/solaris/native/java/net/PlainSocketImpl.c.orig	Mon Oct 31 21:54:39 2005
+++ ../../j2se/src/solaris/native/java/net/PlainSocketImpl.c	Tue Nov  1 13:11:57 2005
@@ -323,8 +323,15 @@ Java_java_net_PlainSocketImpl_socketConn
     /* connect */
     NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&him, &len);
 #if defined(_ALLBSD_SOURCE)
-            if (cannotMap4to6(env, iaObj))
-                return;
+#if defined(IPV6_V6ONLY)
+    if (((struct sockaddr *)&him)->sa_family == AF_INET6) {
+	int t = 0;
+	JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&t, sizeof(t));
+    }
+#else
+    if (cannotMap4to6(env, iaObj))
+	return;
+#endif /* IPV6_V6ONLY */
 #endif /* _ALLBSD_SOURCE */
 
 #ifdef AF_INET6
@@ -579,8 +586,15 @@ Java_java_net_PlainSocketImpl_socketBind
     /* bind */
     NET_InetAddressToSockaddr(env, iaObj, localport, (struct sockaddr *)&him, &len);
 #if defined(_ALLBSD_SOURCE)
-            if (cannotMap4to6(env, iaObj))
-                return;
+#if defined(IPV6_V6ONLY)
+    if (((struct sockaddr *)&him)->sa_family == AF_INET6) {
+	int t = 0;
+	JVM_SetSockOpt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&t, sizeof(t));
+    }
+#else
+    if (cannotMap4to6(env, iaObj))
+	return;
+#endif /* IPV6_V6ONLY */
 #endif /* _ALLBSD_SOURCE */
 
     if (NET_Bind(fd, (struct sockaddr *)&him, len) < 0) {
--- ../../j2se/src/solaris/native/java/net/net_util_md.c.orig	Mon Oct 31 21:54:39 2005
+++ ../../j2se/src/solaris/native/java/net/net_util_md.c	Tue Nov  1 13:14:35 2005
@@ -1129,7 +1129,7 @@ NET_Bind(int fd, struct sockaddr *him, i
     return rv;
 }
 
-#if defined(_ALLBSD_SOURCE)
+#if defined(_ALLBSD_SOURCE) && !defined(IPV6_V6ONLY)
 
 /*
  * If net.inet6.ip6.v6only is set to 1, then IPv4 mapped addresses usage
--- ../../j2se/src/solaris/native/java/net/net_util_md.h.orig	Mon Oct 31 21:54:39 2005
+++ ../../j2se/src/solaris/native/java/net/net_util_md.h	Tue Nov  1 13:15:39 2005
@@ -24,6 +24,9 @@
 #endif
 #endif /* !_ALLBSD_SOURCE */
 
+#if defined(IPV6_V6ONLY) && defined(__OpenBSD__)
+#undef IPV6_V6ONLY
+#endif
 /*
  * Linux header files define sockaddr_in6 incorrectly (missing the
  * sin6_scope_id field) so we use our own definition.
@@ -144,7 +147,7 @@
 /*
  * Check for disabled IPv4 mapped addresses.
  */
-#if defined(_ALLBSD_SOURCE)
+#if defined(_ALLBSD_SOURCE) && !defined(IPV6_V6ONLY)
 int cannotMap4to6(JNIEnv *env, jobject iaObj);
 #endif