summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/raw_ipv6.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/netinet6/raw_ipv6.c')
-rw-r--r--sys/netinet6/raw_ipv6.c31
1 files changed, 28 insertions, 3 deletions
diff --git a/sys/netinet6/raw_ipv6.c b/sys/netinet6/raw_ipv6.c
index fbd3649bd0b..427ce5a7c5a 100644
--- a/sys/netinet6/raw_ipv6.c
+++ b/sys/netinet6/raw_ipv6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: raw_ipv6.c,v 1.24 2000/06/21 18:42:19 itojun Exp $ */
+/* $OpenBSD: raw_ipv6.c,v 1.25 2000/07/13 13:41:45 itojun Exp $ */
/*
%%% copyright-nrl-95
@@ -44,7 +44,7 @@ didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>.
* SUCH DAMAGE.
*
* @(#)raw_ip.c 8.7 (Berkeley) 5/15/95
- * $Id: raw_ipv6.c,v 1.24 2000/06/21 18:42:19 itojun Exp $
+ * $Id: raw_ipv6.c,v 1.25 2000/07/13 13:41:45 itojun Exp $
*/
#include <sys/param.h>
@@ -62,7 +62,6 @@ didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>.
#include <net/route.h>
#include <netinet/in.h>
-#include <netinet/ip_mroute.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
#include <netinet/in_pcb.h>
@@ -71,6 +70,7 @@ didn't get a copy, you may request one from <license@ipv6.nrl.navy.mil>.
#include <netinet/ip6.h>
#include <netinet6/ip6_var.h>
#include <netinet/icmp6.h>
+#include <netinet6/ip6_mroute.h>
#include <netinet6/ip6protosw.h>
#undef IPSEC
@@ -530,6 +530,7 @@ rip6_ctloutput(op, so, level, optname, m)
struct mbuf **m;
{
register struct inpcb *inp = sotoinpcb(so);
+ int error;
if ((level != IPPROTO_IPV6) && (level != IPPROTO_ICMPV6)) {
if (op == PRCO_SETOPT && *m)
@@ -538,6 +539,29 @@ rip6_ctloutput(op, so, level, optname, m)
}
switch (optname) {
+ case MRT6_INIT:
+ case MRT6_DONE:
+ case MRT6_ADD_MIF:
+ case MRT6_DEL_MIF:
+ case MRT6_ADD_MFC:
+ case MRT6_DEL_MFC:
+ case MRT6_PIM:
+ if (level != IPPROTO_IPV6) {
+ if (op == PRCO_SETOPT && *m)
+ (void)m_free(*m);
+ return EINVAL;
+ }
+
+ if (op == PRCO_SETOPT) {
+ error = ip6_mrouter_set(optname, so, *m);
+ if (*m)
+ (void)m_free(*m);
+ } else if (op == PRCO_GETOPT)
+ error = ip6_mrouter_get(optname, so, m);
+ else
+ error = EINVAL;
+ return (error);
+
case IPV6_CHECKSUM:
if (op == PRCO_SETOPT || op == PRCO_GETOPT) {
if (op == PRCO_SETOPT) {
@@ -553,6 +577,7 @@ rip6_ctloutput(op, so, level, optname, m)
return 0;
}
break;
+
case ICMP6_FILTER:
if (level != IPPROTO_ICMPV6) {
if (op == PRCO_SETOPT && *m)