Module Name: src Committed By: riastradh Date: Wed Jan 20 21:44:00 UTC 2016
Modified Files: src/sys/net: if_stf.c raw_cb.h raw_usrreq.c rtsock.c src/sys/netatalk: at_proto.c src/sys/netinet: if_arp.c in_gif.c in_proto.c ip_mroute.c src/sys/netinet6: in6_gif.c in6_proto.c ip6protosw.h src/sys/netipsec: keysock.c keysock.h xform_ipip.c src/sys/netnatm: natm_proto.c src/sys/sys: protosw.h Log Message: Eliminate struct protosw::pr_output. You can't use this unless you know what it is a priori: the formal prototype is variadic, and the different instances (e.g., ip_output, route_output) have different real prototypes. Convert the only user of it, raw_send in net/raw_cb.c, to take an explicit callback argument. Convert the only instances of it, route_output and key_output, to such explicit callbacks for raw_send. Use assertions to make sure the conversion to explicit callbacks is warranted. Discussed on tech-net with no objections: https://mail-index.netbsd.org/tech-net/2016/01/16/msg005484.html To generate a diff of this commit: cvs rdiff -u -r1.82 -r1.83 src/sys/net/if_stf.c cvs rdiff -u -r1.25 -r1.26 src/sys/net/raw_cb.h cvs rdiff -u -r1.54 -r1.55 src/sys/net/raw_usrreq.c cvs rdiff -u -r1.174 -r1.175 src/sys/net/rtsock.c cvs rdiff -u -r1.18 -r1.19 src/sys/netatalk/at_proto.c cvs rdiff -u -r1.199 -r1.200 src/sys/netinet/if_arp.c cvs rdiff -u -r1.68 -r1.69 src/sys/netinet/in_gif.c cvs rdiff -u -r1.115 -r1.116 src/sys/netinet/in_proto.c cvs rdiff -u -r1.133 -r1.134 src/sys/netinet/ip_mroute.c cvs rdiff -u -r1.65 -r1.66 src/sys/netinet6/in6_gif.c cvs rdiff -u -r1.107 -r1.108 src/sys/netinet6/in6_proto.c cvs rdiff -u -r1.22 -r1.23 src/sys/netinet6/ip6protosw.h cvs rdiff -u -r1.48 -r1.49 src/sys/netipsec/keysock.c cvs rdiff -u -r1.7 -r1.8 src/sys/netipsec/keysock.h cvs rdiff -u -r1.32 -r1.33 src/sys/netipsec/xform_ipip.c cvs rdiff -u -r1.15 -r1.16 src/sys/netnatm/natm_proto.c cvs rdiff -u -r1.65 -r1.66 src/sys/sys/protosw.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_stf.c diff -u src/sys/net/if_stf.c:1.82 src/sys/net/if_stf.c:1.83 --- src/sys/net/if_stf.c:1.82 Mon Aug 24 22:21:26 2015 +++ src/sys/net/if_stf.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stf.c,v 1.82 2015/08/24 22:21:26 pooka Exp $ */ +/* $NetBSD: if_stf.c,v 1.83 2016/01/20 21:43:59 riastradh Exp $ */ /* $KAME: if_stf.c,v 1.62 2001/06/07 22:32:16 itojun Exp $ */ /* @@ -75,7 +75,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.82 2015/08/24 22:21:26 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stf.c,v 1.83 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -165,7 +165,6 @@ static const struct protosw in_stf_proto .pr_protocol = IPPROTO_IPV6, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = in_stf_input, - .pr_output = rip_output, .pr_ctlinput = NULL, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, Index: src/sys/net/raw_cb.h diff -u src/sys/net/raw_cb.h:1.25 src/sys/net/raw_cb.h:1.26 --- src/sys/net/raw_cb.h:1.25 Sat May 2 17:18:03 2015 +++ src/sys/net/raw_cb.h Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_cb.h,v 1.25 2015/05/02 17:18:03 rtr Exp $ */ +/* $NetBSD: raw_cb.h,v 1.26 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -71,7 +71,8 @@ int raw_usrreq(struct socket *, void raw_setsockaddr(struct rawcb *, struct sockaddr *); void raw_setpeeraddr(struct rawcb *, struct sockaddr *); int raw_send(struct socket *, - struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *); + struct mbuf *, struct sockaddr *, struct mbuf *, struct lwp *, + int (*)(struct mbuf *, struct socket *)); #endif /* _KERNEL */ Index: src/sys/net/raw_usrreq.c diff -u src/sys/net/raw_usrreq.c:1.54 src/sys/net/raw_usrreq.c:1.55 --- src/sys/net/raw_usrreq.c:1.54 Sat May 2 17:18:03 2015 +++ src/sys/net/raw_usrreq.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: raw_usrreq.c,v 1.54 2015/05/02 17:18:03 rtr Exp $ */ +/* $NetBSD: raw_usrreq.c,v 1.55 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.54 2015/05/02 17:18:03 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: raw_usrreq.c,v 1.55 2016/01/20 21:43:59 riastradh Exp $"); #include <sys/param.h> #include <sys/mbuf.h> @@ -153,7 +153,8 @@ raw_setpeeraddr(struct rawcb *rp, struct int raw_send(struct socket *so, struct mbuf *m, struct sockaddr *nam, - struct mbuf *control, struct lwp *l) + struct mbuf *control, struct lwp *l, + int (*output)(struct mbuf *, struct socket *)) { struct rawcb *rp = sotorawcb(so); int error = 0; @@ -186,7 +187,7 @@ raw_send(struct socket *so, struct mbuf goto die; } } - error = (*so->so_proto->pr_output)(m, so); + error = (*output)(m, so); if (nam) raw_disconnect(rp); Index: src/sys/net/rtsock.c diff -u src/sys/net/rtsock.c:1.174 src/sys/net/rtsock.c:1.175 --- src/sys/net/rtsock.c:1.174 Tue Oct 13 21:28:34 2015 +++ src/sys/net/rtsock.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.174 2015/10/13 21:28:34 rjs Exp $ */ +/* $NetBSD: rtsock.c,v 1.175 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.174 2015/10/13 21:28:34 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rtsock.c,v 1.175 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -151,7 +151,7 @@ struct route_info COMPATNAME(route_info) #define PRESERVED_RTF (RTF_UP | RTF_GATEWAY | RTF_HOST | RTF_DONE | RTF_MASK) static void COMPATNAME(route_init)(void); -static int COMPATNAME(route_output)(struct mbuf *, ...); +static int COMPATNAME(route_output)(struct mbuf *, struct socket *); static int rt_msg2(int, struct rt_addrinfo *, void *, struct rt_walkarg *, int *); static int rt_xaddrs(u_char, const char *, const char *, struct rt_addrinfo *); @@ -165,6 +165,8 @@ static int sysctl_iflist(int, struct rt_ static int sysctl_rtable(SYSCTLFN_PROTO); static void rt_adjustcount(int, int); +static const struct protosw COMPATNAME(route_protosw)[]; + static void rt_adjustcount(int af, int cnt) { @@ -390,9 +392,10 @@ COMPATNAME(route_send)(struct socket *so int s; KASSERT(solocked(so)); + KASSERT(so->so_proto == &COMPATNAME(route_protosw)[0]); s = splsoftnet(); - error = raw_send(so, m, nam, control, l); + error = raw_send(so, m, nam, control, l, &COMPATNAME(route_output)); splx(s); return error; @@ -420,7 +423,7 @@ COMPATNAME(route_purgeif)(struct socket /*ARGSUSED*/ int -COMPATNAME(route_output)(struct mbuf *m, ...) +COMPATNAME(route_output)(struct mbuf *m, struct socket *so) { struct sockproto proto = { .sp_family = PF_XROUTE, }; struct rt_xmsghdr *rtm = NULL; @@ -431,14 +434,8 @@ COMPATNAME(route_output)(struct mbuf *m, int len, error = 0; struct ifnet *ifp = NULL; struct ifaddr *ifa = NULL; - struct socket *so; - va_list ap; sa_family_t family; - va_start(ap, m); - so = va_arg(ap, struct socket *); - va_end(ap); - #define senderr(e) do { error = e; goto flush;} while (/*CONSTCOND*/ 0) if (m == NULL || ((m->m_len < sizeof(int32_t)) && (m = m_pullup(m, sizeof(int32_t))) == NULL)) @@ -1541,7 +1538,6 @@ static const struct protosw COMPATNAME(r .pr_domain = &COMPATNAME(routedomain), .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = raw_input, - .pr_output = COMPATNAME(route_output), .pr_ctlinput = raw_ctlinput, .pr_usrreqs = &route_usrreqs, .pr_init = raw_init, Index: src/sys/netatalk/at_proto.c diff -u src/sys/netatalk/at_proto.c:1.18 src/sys/netatalk/at_proto.c:1.19 --- src/sys/netatalk/at_proto.c:1.18 Sun May 18 14:46:16 2014 +++ src/sys/netatalk/at_proto.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: at_proto.c,v 1.18 2014/05/18 14:46:16 rmind Exp $ */ +/* $NetBSD: at_proto.c,v 1.19 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (c) 1990,1991 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: at_proto.c,v 1.18 2014/05/18 14:46:16 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: at_proto.c,v 1.19 2016/01/20 21:43:59 riastradh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -55,7 +55,6 @@ const struct protosw atalksw[] = { .pr_domain = &atalkdomain, .pr_protocol = ATPROTO_DDP, .pr_flags = PR_ATOMIC|PR_ADDR, - .pr_output = ddp_output, .pr_usrreqs = &ddp_usrreqs, .pr_init = ddp_init, }, Index: src/sys/netinet/if_arp.c diff -u src/sys/netinet/if_arp.c:1.199 src/sys/netinet/if_arp.c:1.200 --- src/sys/netinet/if_arp.c:1.199 Tue Jan 5 05:37:06 2016 +++ src/sys/netinet/if_arp.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_arp.c,v 1.199 2016/01/05 05:37:06 ozaki-r Exp $ */ +/* $NetBSD: if_arp.c,v 1.200 2016/01/20 21:43:59 riastradh Exp $ */ /*- * Copyright (c) 1998, 2000, 2008 The NetBSD Foundation, Inc. @@ -68,7 +68,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.199 2016/01/05 05:37:06 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_arp.c,v 1.200 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_ddb.h" @@ -270,7 +270,6 @@ const struct protosw arpsw[] = { .pr_protocol = 0, .pr_flags = 0, .pr_input = 0, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = 0, .pr_usrreqs = 0, Index: src/sys/netinet/in_gif.c diff -u src/sys/netinet/in_gif.c:1.68 src/sys/netinet/in_gif.c:1.69 --- src/sys/netinet/in_gif.c:1.68 Mon Jan 18 06:08:26 2016 +++ src/sys/netinet/in_gif.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in_gif.c,v 1.68 2016/01/18 06:08:26 knakahara Exp $ */ +/* $NetBSD: in_gif.c,v 1.69 2016/01/20 21:43:59 riastradh Exp $ */ /* $KAME: in_gif.c,v 1.66 2001/07/29 04:46:09 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_gif.c,v 1.68 2016/01/18 06:08:26 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_gif.c,v 1.69 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -85,7 +85,6 @@ static const struct protosw in_gif_proto .pr_protocol = 0 /* IPPROTO_IPV[46] */, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = in_gif_input, - .pr_output = rip_output, .pr_ctlinput = NULL, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, Index: src/sys/netinet/in_proto.c diff -u src/sys/netinet/in_proto.c:1.115 src/sys/netinet/in_proto.c:1.116 --- src/sys/netinet/in_proto.c:1.115 Tue Oct 13 21:28:35 2015 +++ src/sys/netinet/in_proto.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in_proto.c,v 1.115 2015/10/13 21:28:35 rjs Exp $ */ +/* $NetBSD: in_proto.c,v 1.116 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in_proto.c,v 1.115 2015/10/13 21:28:35 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in_proto.c,v 1.116 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_mrouting.h" @@ -199,7 +199,6 @@ PR_WRAP_CTLINPUT(esp4_ctlinput) const struct protosw inetsw[] = { { .pr_domain = &inetdomain, .pr_init = ip_init, - .pr_output = ip_output, .pr_fasttimo = ip_fasttimo, .pr_slowtimo = ip_slowtimo, .pr_drain = ip_drainstub, @@ -276,7 +275,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_RAW, .pr_flags = PR_ATOMIC|PR_ADDR|PR_PURGEIF, .pr_input = rip_input, - .pr_output = rip_output, .pr_ctlinput = rip_ctlinput, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -286,7 +284,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_ICMP, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = icmp_input, - .pr_output = rip_output, .pr_ctlinput = rip_ctlinput, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -326,7 +323,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_IPV4, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = encap4_input, - .pr_output = rip_output, .pr_ctlinput = rip_ctlinput, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -338,7 +334,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_IPV6, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = encap4_input, - .pr_output = rip_output, .pr_ctlinput = rip_ctlinput, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -351,7 +346,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_ETHERIP, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = ip_etherip_input, - .pr_output = rip_output, .pr_ctlinput = rip_ctlinput, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -363,7 +357,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_CARP, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = carp_proto_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, .pr_init = carp_init, @@ -375,7 +368,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_PFSYNC, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = pfsync_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, }, @@ -385,7 +377,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_IGMP, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = igmp_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_ctlinput = rip_ctlinput, .pr_usrreqs = &rip_usrreqs, @@ -399,7 +390,6 @@ const struct protosw inetsw[] = { .pr_protocol = IPPROTO_PIM, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = pim_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_ctlinput = rip_ctlinput, .pr_usrreqs = &rip_usrreqs, @@ -410,7 +400,6 @@ const struct protosw inetsw[] = { .pr_domain = &inetdomain, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = rip_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_ctlinput = rip_ctlinput, .pr_usrreqs = &rip_usrreqs, Index: src/sys/netinet/ip_mroute.c diff -u src/sys/netinet/ip_mroute.c:1.133 src/sys/netinet/ip_mroute.c:1.134 --- src/sys/netinet/ip_mroute.c:1.133 Sun Jan 17 15:08:10 2016 +++ src/sys/netinet/ip_mroute.c Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip_mroute.c,v 1.133 2016/01/17 15:08:10 christos Exp $ */ +/* $NetBSD: ip_mroute.c,v 1.134 2016/01/20 21:43:59 riastradh Exp $ */ /* * Copyright (c) 1992, 1993 @@ -93,7 +93,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.133 2016/01/17 15:08:10 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ip_mroute.c,v 1.134 2016/01/20 21:43:59 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -199,7 +199,6 @@ static const struct protosw vif_protosw .pr_protocol = IPPROTO_IPV4, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = vif_input, - .pr_output = rip_output, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, }; Index: src/sys/netinet6/in6_gif.c diff -u src/sys/netinet6/in6_gif.c:1.65 src/sys/netinet6/in6_gif.c:1.66 --- src/sys/netinet6/in6_gif.c:1.65 Mon Jan 18 06:08:26 2016 +++ src/sys/netinet6/in6_gif.c Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_gif.c,v 1.65 2016/01/18 06:08:26 knakahara Exp $ */ +/* $NetBSD: in6_gif.c,v 1.66 2016/01/20 21:44:00 riastradh Exp $ */ /* $KAME: in6_gif.c,v 1.62 2001/07/29 04:27:25 itojun Exp $ */ /* @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.65 2016/01/18 06:08:26 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_gif.c,v 1.66 2016/01/20 21:44:00 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_inet.h" @@ -464,7 +464,6 @@ static const struct ip6protosw in6_gif_p .pr_protocol = 0 /* IPPROTO_IPV[46] */, .pr_flags = PR_ATOMIC | PR_ADDR, .pr_input = in6_gif_input, - .pr_output = rip6_output, .pr_ctlinput = in6_gif_ctlinput, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, Index: src/sys/netinet6/in6_proto.c diff -u src/sys/netinet6/in6_proto.c:1.107 src/sys/netinet6/in6_proto.c:1.108 --- src/sys/netinet6/in6_proto.c:1.107 Tue Oct 13 21:28:35 2015 +++ src/sys/netinet6/in6_proto.c Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: in6_proto.c,v 1.107 2015/10/13 21:28:35 rjs Exp $ */ +/* $NetBSD: in6_proto.c,v 1.108 2016/01/20 21:44:00 riastradh Exp $ */ /* $KAME: in6_proto.c,v 1.66 2000/10/10 15:35:47 itojun Exp $ */ /* @@ -62,7 +62,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: in6_proto.c,v 1.107 2015/10/13 21:28:35 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: in6_proto.c,v 1.108 2016/01/20 21:44:00 riastradh Exp $"); #ifdef _KERNEL_OPT #include "opt_gateway.h" @@ -288,7 +288,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_RAW, .pr_flags = PR_ATOMIC|PR_ADDR|PR_PURGEIF, .pr_input = rip6_input, - .pr_output = rip6_output, .pr_ctlinput = rip6_ctlinput, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, @@ -305,7 +304,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_ICMPV6, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = icmp6_input, - .pr_output = rip6_output, .pr_ctlinput = rip6_ctlinput, .pr_ctloutput = icmp6_ctloutput, .pr_usrreqs = &rip6_usrreqs, @@ -357,7 +355,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_IPV4, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = encap6_input, - .pr_output = rip6_output, .pr_ctlinput = encap6_ctlinput, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, @@ -369,7 +366,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_IPV6, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = encap6_input, - .pr_output = rip6_output, .pr_ctlinput = encap6_ctlinput, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, @@ -381,7 +377,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_ETHERIP, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = ip6_etherip_input, - .pr_output = rip6_output, .pr_ctlinput = rip6_ctlinput, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, @@ -393,7 +388,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_CARP, .pr_flags = PR_ATOMIC|PR_ADDR, .pr_input = carp6_proto_input, - .pr_output = rip6_output, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, }, @@ -403,7 +397,6 @@ const struct ip6protosw inet6sw[] = { .pr_protocol = IPPROTO_PIM, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = pim6_input, - .pr_output = rip6_output, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, .pr_init = pim6_init, @@ -413,7 +406,6 @@ const struct ip6protosw inet6sw[] = { .pr_domain = &inet6domain, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = rip6_input, - .pr_output = rip6_output, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, .pr_init = rip6_init, Index: src/sys/netinet6/ip6protosw.h diff -u src/sys/netinet6/ip6protosw.h:1.22 src/sys/netinet6/ip6protosw.h:1.23 --- src/sys/netinet6/ip6protosw.h:1.22 Sun May 18 14:46:16 2014 +++ src/sys/netinet6/ip6protosw.h Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: ip6protosw.h,v 1.22 2014/05/18 14:46:16 rmind Exp $ */ +/* $NetBSD: ip6protosw.h,v 1.23 2016/01/20 21:44:00 riastradh Exp $ */ /* $KAME: ip6protosw.h,v 1.22 2001/02/08 18:02:08 itojun Exp $ */ /* @@ -120,9 +120,6 @@ struct ip6protosw { /* protocol-protocol hooks */ int (*pr_input) /* input to protocol (from below) */ (struct mbuf **, int *, int); - int (*pr_output) /* output to protocol (from above) */ - (struct mbuf *, struct socket *, struct sockaddr_in6 *, - struct mbuf *); void *(*pr_ctlinput) /* control input (from below) */ (int, const struct sockaddr *, void *); int (*pr_ctloutput) /* control output (from above) */ Index: src/sys/netipsec/keysock.c diff -u src/sys/netipsec/keysock.c:1.48 src/sys/netipsec/keysock.c:1.49 --- src/sys/netipsec/keysock.c:1.48 Sat May 2 17:18:04 2015 +++ src/sys/netipsec/keysock.c Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: keysock.c,v 1.48 2015/05/02 17:18:04 rtr Exp $ */ +/* $NetBSD: keysock.c,v 1.49 2016/01/20 21:44:00 riastradh Exp $ */ /* $FreeBSD: src/sys/netipsec/keysock.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */ /* $KAME: keysock.c,v 1.25 2001/08/13 20:07:41 itojun Exp $ */ @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.48 2015/05/02 17:18:04 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: keysock.c,v 1.49 2016/01/20 21:44:00 riastradh Exp $"); /* This code has derived from sys/net/rtsock.c on FreeBSD2.2.5 */ @@ -61,8 +61,6 @@ __KERNEL_RCSID(0, "$NetBSD: keysock.c,v #include <netipsec/ipsec_osdep.h> #include <netipsec/ipsec_private.h> -typedef int pr_output_t (struct mbuf *, struct socket *); - struct key_cb { int key_count; int any_count; @@ -78,6 +76,7 @@ static struct sockaddr key_src = { .sa_family = PF_KEY, }; +static const struct protosw keysw[]; static int key_sendup0(struct rawcb *, struct mbuf *, int, int); @@ -86,18 +85,12 @@ int key_registered_sb_max = (2048 * MHLE /* * key_output() */ -int -key_output(struct mbuf *m, ...) +static int +key_output(struct mbuf *m, struct socket *so) { struct sadb_msg *msg; int len, error = 0; int s; - struct socket *so; - va_list ap; - - va_start(ap, m); - so = va_arg(ap, struct socket *); - va_end(ap); if (m == 0) panic("key_output: NULL pointer was passed"); @@ -638,9 +631,10 @@ key_send(struct socket *so, struct mbuf int s; KASSERT(solocked(so)); + KASSERT(so->so_proto == &keysw[0]); s = splsoftnet(); - error = raw_send(so, m, nam, control, l); + error = raw_send(so, m, nam, control, l, &key_output); splx(s); return error; @@ -693,7 +687,7 @@ PR_WRAP_USRREQS(key) #define key_sendoob key_sendoob_wrapper #define key_purgeif key_purgeif_wrapper -const struct pr_usrreqs key_usrreqs = { +static const struct pr_usrreqs key_usrreqs = { .pr_attach = key_attach, .pr_detach = key_detach, .pr_accept = key_accept, @@ -715,13 +709,12 @@ const struct pr_usrreqs key_usrreqs = { .pr_purgeif = key_purgeif, }; -const struct protosw keysw[] = { +static const struct protosw keysw[] = { { .pr_type = SOCK_RAW, .pr_domain = &keydomain, .pr_protocol = PF_KEY_V2, .pr_flags = PR_ATOMIC|PR_ADDR, - .pr_output = key_output, .pr_ctlinput = raw_ctlinput, .pr_usrreqs = &key_usrreqs, .pr_init = raw_init, Index: src/sys/netipsec/keysock.h diff -u src/sys/netipsec/keysock.h:1.7 src/sys/netipsec/keysock.h:1.8 --- src/sys/netipsec/keysock.h:1.7 Sun May 18 14:46:16 2014 +++ src/sys/netipsec/keysock.h Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: keysock.h,v 1.7 2014/05/18 14:46:16 rmind Exp $ */ +/* $NetBSD: keysock.h,v 1.8 2016/01/20 21:44:00 riastradh Exp $ */ /* $FreeBSD: src/sys/netipsec/keysock.h,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */ /* $KAME: keysock.h,v 1.8 2000/03/27 05:11:06 sumikawa Exp $ */ @@ -70,7 +70,6 @@ struct keycb { int kp_registered; /* registered socket */ }; -int key_output (struct mbuf *, ...); int key_sendup (struct socket *, struct sadb_msg *, u_int, int); int key_sendup_mbuf (struct socket *, struct mbuf *, int); #endif /* _KERNEL */ Index: src/sys/netipsec/xform_ipip.c diff -u src/sys/netipsec/xform_ipip.c:1.32 src/sys/netipsec/xform_ipip.c:1.33 --- src/sys/netipsec/xform_ipip.c:1.32 Fri Mar 27 07:47:10 2015 +++ src/sys/netipsec/xform_ipip.c Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: xform_ipip.c,v 1.32 2015/03/27 07:47:10 ozaki-r Exp $ */ +/* $NetBSD: xform_ipip.c,v 1.33 2016/01/20 21:44:00 riastradh Exp $ */ /* $FreeBSD: src/sys/netipsec/xform_ipip.c,v 1.3.2.1 2003/01/24 05:11:36 sam Exp $ */ /* $OpenBSD: ip_ipip.c,v 1.25 2002/06/10 18:04:55 itojun Exp $ */ @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.32 2015/03/27 07:47:10 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xform_ipip.c,v 1.33 2016/01/20 21:44:00 riastradh Exp $"); /* * IP-inside-IP processing @@ -692,7 +692,6 @@ static struct ipprotosw ipe4_protosw = { .pr_protocol = IPPROTO_IPV4, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = ip4_input, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = rip_ctloutput, .pr_usrreqs = &rip_usrreqs, @@ -713,7 +712,6 @@ static struct ip6protosw ipe4_protosw6 = .pr_protocol = IPPROTO_IPV6, .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, .pr_input = ip4_input6, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = rip6_ctloutput, .pr_usrreqs = &rip6_usrreqs, Index: src/sys/netnatm/natm_proto.c diff -u src/sys/netnatm/natm_proto.c:1.15 src/sys/netnatm/natm_proto.c:1.16 --- src/sys/netnatm/natm_proto.c:1.15 Sun May 18 14:46:16 2014 +++ src/sys/netnatm/natm_proto.c Wed Jan 20 21:44:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: natm_proto.c,v 1.15 2014/05/18 14:46:16 rmind Exp $ */ +/* $NetBSD: natm_proto.c,v 1.16 2016/01/20 21:44:00 riastradh Exp $ */ /* * Copyright (c) 1996 Charles D. Cranor and Washington University. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: natm_proto.c,v 1.15 2014/05/18 14:46:16 rmind Exp $"); +__KERNEL_RCSID(0, "$NetBSD: natm_proto.c,v 1.16 2016/01/20 21:44:00 riastradh Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -62,7 +62,6 @@ const struct protosw natmsw[] = { .pr_protocol = PROTO_NATMAAL5, .pr_flags = PR_CONNREQUIRED, .pr_input = 0, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = 0, .pr_usrreqs = &natm_usrreq, @@ -76,7 +75,6 @@ const struct protosw natmsw[] = { .pr_protocol = PROTO_NATMAAL5, .pr_flags = PR_CONNREQUIRED | PR_ATOMIC, .pr_input = 0, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = 0, .pr_usrreqs = &natm_usrreq, @@ -90,7 +88,6 @@ const struct protosw natmsw[] = { .pr_protocol = PROTO_NATMAAL0, .pr_flags = PR_CONNREQUIRED, .pr_input = 0, - .pr_output = 0, .pr_ctlinput = 0, .pr_ctloutput = 0, .pr_usrreqs = &natm_usrreqs, Index: src/sys/sys/protosw.h diff -u src/sys/sys/protosw.h:1.65 src/sys/sys/protosw.h:1.66 --- src/sys/sys/protosw.h:1.65 Tue Oct 13 21:28:34 2015 +++ src/sys/sys/protosw.h Wed Jan 20 21:43:59 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: protosw.h,v 1.65 2015/10/13 21:28:34 rjs Exp $ */ +/* $NetBSD: protosw.h,v 1.66 2016/01/20 21:43:59 riastradh Exp $ */ /*- * Copyright (c) 1982, 1986, 1993 @@ -77,8 +77,6 @@ struct protosw { /* protocol-protocol hooks */ void (*pr_input) /* input to protocol (from below) */ (struct mbuf *, ...); - int (*pr_output) /* output to protocol (from above) */ - (struct mbuf *, ...); void *(*pr_ctlinput) /* control input (from below) */ (int, const struct sockaddr *, void *); int (*pr_ctloutput) /* control output (from above) */