diff options
Diffstat (limited to 'sys/netinet6/raw_ipv6.c')
-rw-r--r-- | sys/netinet6/raw_ipv6.c | 31 |
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) |