patch-2.4.21 linux-2.4.21/net/ipv6/ipv6_sockglue.c
Next file: linux-2.4.21/net/ipv6/mcast.c
Previous file: linux-2.4.21/net/ipv6/ip6_output.c
Back to the patch index
Back to the overall index
- Lines: 68
- Date:
2003-06-13 07:51:39.000000000 -0700
- Orig file:
linux-2.4.20/net/ipv6/ipv6_sockglue.c
- Orig date:
2001-09-20 14:12:56.000000000 -0700
diff -urN linux-2.4.20/net/ipv6/ipv6_sockglue.c linux-2.4.21/net/ipv6/ipv6_sockglue.c
@@ -21,7 +21,6 @@
* o Return an optlen of the truncated length if need be
*/
-#define __NO_VERSION__
#include <linux/module.h>
#include <linux/config.h>
#include <linux/errno.h>
@@ -157,7 +156,8 @@
break;
}
- if (!(ipv6_addr_type(&np->daddr) & IPV6_ADDR_MAPPED)) {
+ if (ipv6_only_sock(sk) ||
+ !(ipv6_addr_type(&np->daddr) & IPV6_ADDR_MAPPED)) {
retv = -EADDRNOTAVAIL;
break;
}
@@ -203,6 +203,13 @@
}
goto e_inval;
+ case IPV6_V6ONLY:
+ if (sk->num)
+ goto e_inval;
+ np->ipv6only = valbool;
+ retv = 0;
+ break;
+
case IPV6_PKTINFO:
np->rxopt.bits.rxinfo = valbool;
retv = 0;
@@ -351,6 +358,24 @@
retv = ipv6_sock_mc_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_multiaddr);
break;
}
+ case IPV6_JOIN_ANYCAST:
+ case IPV6_LEAVE_ANYCAST:
+ {
+ struct ipv6_mreq mreq;
+
+ if (optlen != sizeof(struct ipv6_mreq))
+ goto e_inval;
+
+ retv = -EFAULT;
+ if (copy_from_user(&mreq, optval, sizeof(struct ipv6_mreq)))
+ break;
+
+ if (optname == IPV6_JOIN_ANYCAST)
+ retv = ipv6_sock_ac_join(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_acaddr);
+ else
+ retv = ipv6_sock_ac_drop(sk, mreq.ipv6mr_ifindex, &mreq.ipv6mr_acaddr);
+ break;
+ }
case IPV6_ROUTER_ALERT:
retv = ip6_ra_control(sk, val, NULL);
break;
@@ -466,6 +491,10 @@
break;
}
+ case IPV6_V6ONLY:
+ val = np->ipv6only;
+ break;
+
case IPV6_PKTINFO:
val = np->rxopt.bits.rxinfo;
break;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)