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) */

Reply via email to