Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 12 Aug 2001 11:49:55 -0700
From:      Julian Elischer <julian@elischer.org>
To:        itojun@iijlab.net, net@freebsd.org
Subject:   Re: IPV6/KAME/protosw integration cleanup
Message-ID:  <3B76CFD3.4C6D4DDE@elischer.org>
References:  <4382.997609887@itojun.org> <3B76B8F3.1AC69B88@elischer.org>

next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------368BE1ACB0C8DBFA3CF8FDC2
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: 7bit

Julian Elischer wrote:

Here is the patch I will consider committing in a week (unless I see these
issues 
being handled elsewhere)

-- 
+------------------------------------+       ______ _  __
|   __--_|\  Julian Elischer         |       \     U \/ / hard at work in 
|  /       \ julian@elischer.org     +------>x   USA    \ a very strange
| (   OZ    )                                \___   ___ | country !
+- X_.---._/    presently in San Francisco       \_/   \\
          v
--------------368BE1ACB0C8DBFA3CF8FDC2
Content-Type: text/plain; charset=iso-8859-2;
 name="protosw.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="protosw.diff"

? i386/conf/LINT
Index: contrib/ipfilter/netinet/mlfk_ipl.c
===================================================================
RCS file: /home/ncvs/src/sys/contrib/ipfilter/netinet/mlfk_ipl.c,v
retrieving revision 1.9
diff -u -r1.9 mlfk_ipl.c
--- contrib/ipfilter/netinet/mlfk_ipl.c	2001/03/26 12:41:18	1.9
+++ contrib/ipfilter/netinet/mlfk_ipl.c	2001/08/12 18:50:37
@@ -34,6 +34,7 @@
 #include <sys/conf.h>
 #include <sys/socket.h>
 #include <sys/sysctl.h>
+#include <sys/protosw.h>
 #include <net/if.h>
 #include <netinet/in_systm.h>
 #include <netinet/in.h>
Index: kern/uipc_mbuf.c
===================================================================
RCS file: /home/ncvs/src/sys/kern/uipc_mbuf.c,v
retrieving revision 1.86
diff -u -r1.86 uipc_mbuf.c
--- kern/uipc_mbuf.c	2001/06/22 06:34:59	1.86
+++ kern/uipc_mbuf.c	2001/08/12 18:50:43
@@ -303,7 +303,7 @@
  * continuing for "len" bytes, into the indicated buffer.
  */
 void
-m_copydata(struct mbuf *m, int off, int len, caddr_t cp)
+m_copydata(const struct mbuf *m, int off, int len, caddr_t cp)
 {
 	unsigned count;
 
Index: net/if_faith.c
===================================================================
RCS file: /home/ncvs/src/sys/net/if_faith.c,v
retrieving revision 1.6
diff -u -r1.6 if_faith.c
--- net/if_faith.c	2001/07/05 14:42:54	1.6
+++ net/if_faith.c	2001/08/12 18:50:49
@@ -58,6 +58,7 @@
 #include <sys/sockio.h>
 #include <sys/time.h>
 #include <sys/queue.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_types.h>
Index: net/if_gif.c
===================================================================
RCS file: /home/ncvs/src/sys/net/if_gif.c,v
retrieving revision 1.12
diff -u -r1.12 if_gif.c
--- net/if_gif.c	2001/07/02 21:02:05	1.12
+++ net/if_gif.c	2001/08/12 18:50:49
@@ -62,7 +62,6 @@
 #include <netinet/in_var.h>
 #include <netinet/in_gif.h>
 #include <netinet/ip_var.h>
-#include <netinet/ipprotosw.h>
 #endif	/* INET */
 
 #ifdef INET6
@@ -101,7 +100,7 @@
 
 #ifdef INET
 extern  struct domain inetdomain;
-struct ipprotosw in_gif_protosw =
+struct protosw in_gif_protosw =
 { SOCK_RAW,	&inetdomain,	0/*IPPROTO_IPV[46]*/,	PR_ATOMIC|PR_ADDR,
   in_gif_input,	rip_output,	0,		rip_ctloutput,
   0,
@@ -110,7 +109,7 @@
 };
 #endif
 #ifdef INET6
-extern  struct domain6 inet6domain;
+extern  struct domain inet6domain;
 struct ip6protosw in6_gif_protosw =
 { SOCK_RAW,	&inet6domain,	0/*IPPROTO_IPV[46]*/,	PR_ATOMIC|PR_ADDR,
   in6_gif_input, rip6_output,	0,		rip6_ctloutput,
@@ -321,7 +320,7 @@
 	}
 
 	/* LINTED const cast */
-	m_copydata((struct mbuf *)m, 0, sizeof(ip), (caddr_t)&ip);
+	m_copydata(m, 0, sizeof(ip), (caddr_t)&ip);
 
 	switch (ip.ip_v) {
 #ifdef INET
@@ -571,6 +570,9 @@
 				&(((struct if_laddrreq *)data)->addr);
 			dst = (struct sockaddr *)
 				&(((struct if_laddrreq *)data)->dstaddr);
+			break;
+		default:
+			panic("gif_ioctl");
 		}
 
 		/* sa_family must be equal */
Index: net/if_stf.c
===================================================================
RCS file: /home/ncvs/src/sys/net/if_stf.c,v
retrieving revision 1.9
diff -u -r1.9 if_stf.c
--- net/if_stf.c	2001/07/02 21:02:05	1.9
+++ net/if_stf.c	2001/08/12 18:50:49
@@ -98,7 +98,6 @@
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
-#include <netinet/ipprotosw.h>
 #include <netinet/ip_var.h>
 #include <netinet/in_var.h>
 
@@ -134,7 +133,7 @@
 static int ip_stf_ttl = 40;
 
 extern  struct domain inetdomain;
-struct ipprotosw in_stf_protosw =
+struct protosw in_stf_protosw =
 { SOCK_RAW,	&inetdomain,	IPPROTO_IPV6,	PR_ATOMIC|PR_ADDR,
   in_stf_input, rip_output,	0,		rip_ctloutput,
   0,
@@ -247,7 +246,7 @@
 		return 0;
 
 	/* LINTED const cast */
-	m_copydata((struct mbuf *)m, 0, sizeof(ip), (caddr_t)&ip);
+	m_copydata(m, 0, sizeof(ip), (caddr_t)&ip);
 
 	if (ip.ip_v != 4)
 		return 0;
@@ -531,14 +530,11 @@
 }
 
 void
-#if __STDC__
-in_stf_input(struct mbuf *m, ...)
-#else
-in_stf_input(m, va_alist)
+in_stf_input(m, off, proto)
 	struct mbuf *m;
-#endif
+	int off;
+	int proto;
 {
-	int off, proto;
 	struct stf_softc *sc;
 	struct ip *ip;
 	struct ip6_hdr *ip6;
@@ -546,12 +542,6 @@
 	int len, isr;
 	struct ifqueue *ifq = NULL;
 	struct ifnet *ifp;
-	va_list ap;
-
-	va_start(ap, m);
-	off = va_arg(ap, int);
-	proto = va_arg(ap, int);
-	va_end(ap);
 
 	if (proto != IPPROTO_IPV6) {
 		m_freem(m);
Index: net/if_stf.h
===================================================================
RCS file: /home/ncvs/src/sys/net/if_stf.h,v
retrieving revision 1.1
diff -u -r1.1 if_stf.h
--- net/if_stf.h	2000/07/04 16:35:04	1.1
+++ net/if_stf.h	2001/08/12 18:50:49
@@ -33,6 +33,6 @@
 #ifndef _NET_IF_STF_H_
 #define _NET_IF_STF_H_
 
-void in_stf_input __P((struct mbuf *, ...));
+pr_input_t in_stf_input;
 
 #endif /* _NET_IF_STF_H_ */
Index: net/net_osdep.h
===================================================================
RCS file: /home/ncvs/src/sys/net/net_osdep.h,v
retrieving revision 1.5
diff -u -r1.5 net_osdep.h
--- net/net_osdep.h	2001/06/11 12:38:58	1.5
+++ net/net_osdep.h	2001/08/12 18:50:49
@@ -195,6 +195,7 @@
  * - protosw for IPv4 (sys/netinet)
  *	FreeBSD4: struct ipprotosw in netinet/ipprotosw.h
  *	others: struct protosw in sys/protosw.h
+ *	(including FreeBSD5)
  *
  * - protosw in general.
  *	NetBSD 1.5 has extra member for ipfilter (netbsd-current dropped
Index: net/raw_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/net/raw_usrreq.c,v
retrieving revision 1.19
diff -u -r1.19 raw_usrreq.c
--- net/raw_usrreq.c	2000/10/29 16:06:43	1.19
+++ net/raw_usrreq.c	2001/08/12 18:50:49
@@ -249,15 +249,14 @@
 			error = EISCONN;
 			goto release;
 		}
-		rp->rcb_faddr = nam;
 	} else if (rp->rcb_faddr == 0) {
 		error = ENOTCONN;
 		goto release;
+	} else {
+		nam = rp->rcb_faddr;
 	}
-	error = (*so->so_proto->pr_output)(m, so);
+	error = (*so->so_proto->pr_output)(m, so, nam);
 	m = NULL;
-	if (nam)
-		rp->rcb_faddr = 0;
 release:
 	if (m != NULL)
 		m_freem(m);
Index: net/rtsock.c
===================================================================
RCS file: /home/ncvs/src/sys/net/rtsock.c,v
retrieving revision 1.55
diff -u -r1.55 rtsock.c
--- net/rtsock.c	2001/08/02 19:56:29	1.55
+++ net/rtsock.c	2001/08/12 18:50:50
@@ -73,7 +73,7 @@
 static int	rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *));
 static int	sysctl_dumpentry __P((struct radix_node *rn, void *vw));
 static int	sysctl_iflist __P((int af, struct walkarg *w));
-static int	 route_output __P((struct mbuf *, struct socket *));
+static pr_output_t	 route_output;
 static void	 rt_setmetrics __P((u_long, struct rt_metrics *, struct rt_metrics *));
 
 /* Sleazy use of local variables throughout file, warning!!!! */
@@ -264,18 +264,34 @@
 }
 
 static struct pr_usrreqs route_usrreqs = {
-	rts_abort, pru_accept_notsupp, rts_attach, rts_bind, rts_connect,
-	pru_connect2_notsupp, pru_control_notsupp, rts_detach, rts_disconnect,
-	pru_listen_notsupp, rts_peeraddr, pru_rcvd_notsupp, pru_rcvoob_notsupp,
-	rts_send, pru_sense_null, rts_shutdown, rts_sockaddr,
-	sosend, soreceive, sopoll
+	rts_abort,
+	pru_accept_notsupp,
+	rts_attach,
+	rts_bind,
+	rts_connect,
+	pru_connect2_notsupp,
+	pru_control_notsupp,
+	rts_detach,
+	rts_disconnect,
+	pru_listen_notsupp,
+	rts_peeraddr,
+	pru_rcvd_notsupp,
+	pru_rcvoob_notsupp,
+	rts_send,
+	pru_sense_null,
+	rts_shutdown,
+	rts_sockaddr,
+	sosend,
+	soreceive,
+	sopoll
 };
 
 /*ARGSUSED*/
 static int
-route_output(m, so)
+route_output(m, so, addr)
 	register struct mbuf *m;
 	struct socket *so;
+	struct sockaddr *addr;
 {
 	register struct rt_msghdr *rtm = 0;
 	register struct rtentry *rt = 0;
Index: netinet/igmp.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/igmp.c,v
retrieving revision 1.31
diff -u -r1.31 igmp.c
--- netinet/igmp.c	2001/06/23 17:17:58	1.31
+++ netinet/igmp.c	2001/08/12 18:50:51
@@ -150,7 +150,8 @@
 void
 igmp_input(m, off, proto)
 	register struct mbuf *m;
-	int off, proto;
+	int off;
+	int proto;
 {
 	register int iphlen = off;
 	register struct igmp *igmp;
Index: netinet/igmp_var.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/igmp_var.h,v
retrieving revision 1.17
diff -u -r1.17 igmp_var.h
--- netinet/igmp_var.h	1999/12/29 04:40:59	1.17
+++ netinet/igmp_var.h	2001/08/12 18:50:52
@@ -85,12 +85,13 @@
  */
 #define IGMP_AGE_THRESHOLD			540
 
-void	igmp_init __P((void));
-void	igmp_input __P((struct mbuf *, int, int));
+pr_init_t	igmp_init;
+pr_input_t	igmp_input;
+pr_fasttimo_t	igmp_fasttimo;
+pr_slowtimo_t	igmp_slowtimo;
+
 void	igmp_joingroup __P((struct in_multi *));
 void	igmp_leavegroup __P((struct in_multi *));
-void	igmp_fasttimo __P((void));
-void	igmp_slowtimo __P((void));
 
 SYSCTL_DECL(_net_inet_igmp);
 
Index: netinet/in.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in.c,v
retrieving revision 1.55
diff -u -r1.55 in.c
--- netinet/in.c	2001/08/04 17:10:13	1.55
+++ netinet/in.c	2001/08/12 18:50:53
@@ -41,6 +41,7 @@
 #include <sys/socket.h>
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_types.h>
Index: netinet/in_gif.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in_gif.c,v
retrieving revision 1.11
diff -u -r1.11 in_gif.c
--- netinet/in_gif.c	2001/07/02 21:02:07	1.11
+++ netinet/in_gif.c	2001/08/12 18:50:53
@@ -42,6 +42,7 @@
 #include <sys/errno.h>
 #include <sys/kernel.h>
 #include <sys/sysctl.h>
+#include <sys/protosw.h>
 
 #include <sys/malloc.h>
 
@@ -298,7 +299,7 @@
 	dst = (struct sockaddr_in *)sc->gif_pdst;
 
 	/* LINTED const cast */
-	m_copydata((struct mbuf *)m, 0, sizeof(ip), (caddr_t)&ip);
+	m_copydata(m, 0, sizeof(ip), (caddr_t)&ip);
 
 	/* check for address match */
 	addrmatch = 0;
Index: netinet/in_gif.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in_gif.h,v
retrieving revision 1.5
diff -u -r1.5 in_gif.h
--- netinet/in_gif.h	2001/07/02 21:02:07	1.5
+++ netinet/in_gif.h	2001/08/12 18:50:54
@@ -37,7 +37,7 @@
 
 extern int ip_gif_ttl;
 
-void in_gif_input __P((struct mbuf *, int off, int proto));
+pr_input_t in_gif_input;
 int in_gif_output __P((struct ifnet *, int, struct mbuf *, struct rtentry *));
 int gif_encapcheck4 __P((const struct mbuf *, int, int, void *));
 
Index: netinet/in_proto.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in_proto.c,v
retrieving revision 1.57
diff -u -r1.57 in_proto.c
--- netinet/in_proto.c	2001/07/02 21:02:07	1.57
+++ netinet/in_proto.c	2001/08/12 18:50:54
@@ -63,8 +63,6 @@
 #include <netinet/udp_var.h>
 #include <netinet/ip_encap.h>
 
-#include <netinet/ipprotosw.h>
-
 /*
  * TCP/IP protocol family: IP, ICMP, UDP, TCP.
  */
@@ -90,7 +88,7 @@
 extern	struct domain inetdomain;
 static	struct pr_usrreqs nousrreqs;
 
-struct ipprotosw inetsw[] = {
+struct protosw inetsw[] = {
 { 0,		&inetdomain,	0,		0,
   0,		0,		0,		0,
   0,
Index: netinet/in_rmx.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/in_rmx.c,v
retrieving revision 1.40
diff -u -r1.40 in_rmx.c
--- netinet/in_rmx.c	2001/05/11 14:37:34	1.40
+++ netinet/in_rmx.c	2001/08/12 18:50:55
@@ -49,6 +49,7 @@
 #include <sys/socket.h>
 #include <sys/mbuf.h>
 #include <sys/syslog.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/route.h>
Index: netinet/ip_dummynet.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_dummynet.c,v
retrieving revision 1.39
diff -u -r1.39 ip_dummynet.c
--- netinet/ip_dummynet.c	2001/02/10 00:10:18	1.39
+++ netinet/ip_dummynet.c	2001/08/12 18:50:58
@@ -63,6 +63,7 @@
 #include <sys/queue.h>			/* XXX */
 #include <sys/kernel.h>
 #include <sys/module.h>
+#include <sys/protosw.h>
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/time.h>
Index: netinet/ip_encap.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_encap.c,v
retrieving revision 1.5
diff -u -r1.5 ip_encap.c
--- netinet/ip_encap.c	2001/07/25 20:15:49	1.5
+++ netinet/ip_encap.c	2001/08/12 18:50:59
@@ -77,7 +77,6 @@
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
 #include <netinet/ip_encap.h>
-#include <netinet/ipprotosw.h>
 
 #ifdef INET6
 #include <netinet/ip6.h>
@@ -127,27 +126,17 @@
 
 #ifdef INET
 void
-#if __STDC__
-encap4_input(struct mbuf *m, ...)
-#else
-encap4_input(m, va_alist)
+encap4_input(m, off, proto)
 	struct mbuf *m;
-	va_dcl
-#endif
+	int off;
+	int proto;
 {
-	int off, proto;
 	struct ip *ip;
 	struct sockaddr_in s, d;
-	const struct ipprotosw *psw;
+	const struct protosw *psw;
 	struct encaptab *ep, *match;
-	va_list ap;
 	int prio, matchprio;
 
-	va_start(ap, m);
-	off = va_arg(ap, int);
-	proto = va_arg(ap, int);
-	va_end(ap);
-
 	ip = mtod(m, struct ip *);
 
 	bzero(&s, sizeof(s));
@@ -205,7 +194,7 @@
 
 	if (match) {
 		/* found a match, "match" has the best one */
-		psw = (const struct ipprotosw *)match->psw;
+		psw = (const struct protosw *)match->psw;
 		if (psw && psw->pr_input) {
 			encap_fillarg(m, match);
 			(*psw->pr_input)(m, off, proto);
Index: netinet/ip_encap.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_encap.h,v
retrieving revision 1.1
diff -u -r1.1 ip_encap.h
--- netinet/ip_encap.h	2000/07/04 16:35:05	1.1
+++ netinet/ip_encap.h	2001/08/12 18:50:59
@@ -48,9 +48,10 @@
 	void *arg;			/* passed via m->m_pkthdr.aux */
 };
 
-void	encap_init __P((void));
-void	encap4_input __P((struct mbuf *, ...));
-int	encap6_input __P((struct mbuf **, int *, int));
+pr_init_t	encap_init;
+pr_input_t	encap4_input;
+pr_input6_t	encap6_input;
+
 const struct encaptab *encap_attach __P((int, int, const struct sockaddr *,
 	const struct sockaddr *, const struct sockaddr *,
 	const struct sockaddr *, const struct protosw *, void *));
Index: netinet/ip_fw.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_fw.c,v
retrieving revision 1.165
diff -u -r1.165 ip_fw.c
--- netinet/ip_fw.c	2001/07/02 15:50:31	1.165
+++ netinet/ip_fw.c	2001/08/12 18:51:02
@@ -43,6 +43,7 @@
 #include <sys/sysctl.h>
 #include <sys/syslog.h>
 #include <sys/ucred.h>
+#include <sys/protosw.h>
 #include <net/if.h>
 #include <net/route.h>
 #include <netinet/in.h>
Index: netinet/ip_icmp.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_icmp.c,v
retrieving revision 1.58
diff -u -r1.58 ip_icmp.c
--- netinet/ip_icmp.c	2001/06/23 17:17:58	1.58
+++ netinet/ip_icmp.c	2001/08/12 18:51:04
@@ -232,7 +232,8 @@
 void
 icmp_input(m, off, proto)
 	register struct mbuf *m;
-	int off, proto;
+	int off;
+	int proto;
 {
 	int hlen = off;
 	register struct icmp *icp;
Index: netinet/ip_icmp.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_icmp.h,v
retrieving revision 1.16
diff -u -r1.16 ip_icmp.h
--- netinet/ip_icmp.h	1999/12/29 04:41:01	1.16
+++ netinet/ip_icmp.h	2001/08/12 18:51:04
@@ -186,7 +186,7 @@
 
 #ifdef _KERNEL
 void	icmp_error __P((struct mbuf *, int, int, n_long, struct ifnet *));
-void	icmp_input __P((struct mbuf *, int, int));
+pr_input_t icmp_input;
 #endif
 
 #endif
Index: netinet/ip_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v
retrieving revision 1.174
diff -u -r1.174 ip_input.c
--- netinet/ip_input.c	2001/06/23 17:17:58	1.174
+++ netinet/ip_input.c	2001/08/12 18:51:07
@@ -75,8 +75,6 @@
 #include <netinet/ip_icmp.h>
 #include <machine/in_cksum.h>
 
-#include <netinet/ipprotosw.h>
-
 #include <sys/socketvar.h>
 
 #include <netinet/ip_fw.h>
@@ -153,7 +151,7 @@
 #endif
 
 extern	struct domain inetdomain;
-extern	struct ipprotosw inetsw[];
+extern	struct protosw inetsw[];
 u_char	ip_protox[IPPROTO_MAX];
 static int	ipqmaxlen = IFQ_MAXLEN;
 struct	in_ifaddrhead in_ifaddrhead; /* first inet address */
@@ -236,17 +234,17 @@
 void
 ip_init()
 {
-	register struct ipprotosw *pr;
+	register struct protosw *pr;
 	register int i;
 
 	TAILQ_INIT(&in_ifaddrhead);
-	pr = (struct ipprotosw *)pffindproto(PF_INET, IPPROTO_RAW, SOCK_RAW);
+	pr = (struct protosw *)pffindproto(PF_INET, IPPROTO_RAW, SOCK_RAW);
 	if (pr == 0)
 		panic("ip_init");
 	for (i = 0; i < IPPROTO_MAX; i++)
 		ip_protox[i] = pr - inetsw;
-	for (pr = (struct ipprotosw *)inetdomain.dom_protosw;
-	    pr < (struct ipprotosw *)inetdomain.dom_protoswNPROTOSW; pr++)
+	for (pr = (struct protosw *)inetdomain.dom_protosw;
+	    pr < (struct protosw *)inetdomain.dom_protoswNPROTOSW; pr++)
 		if (pr->pr_domain->dom_family == PF_INET &&
 		    pr->pr_protocol && pr->pr_protocol != IPPROTO_RAW)
 			ip_protox[pr->pr_protocol] = pr - inetsw;
Index: netinet/ip_mroute.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_mroute.c,v
retrieving revision 1.64
diff -u -r1.64 ip_mroute.c
--- netinet/ip_mroute.c	2001/07/25 20:15:49	1.64
+++ netinet/ip_mroute.c	2001/08/12 18:51:10
@@ -37,7 +37,6 @@
 #include <netinet/igmp.h>
 #include <netinet/ip_encap.h>
 #include <netinet/ip_mroute.h>
-#include <netinet/ipprotosw.h>
 #include <netinet/udp.h>
 #include <machine/in_cksum.h>
 
@@ -732,7 +731,7 @@
 }
 
 extern struct domain inetdomain;
-static struct ipprotosw mroute_encap_protosw =
+static struct protosw mroute_encap_protosw =
 { SOCK_RAW,	&inetdomain,	IPPROTO_IPV4,	PR_ATOMIC|PR_ADDR,
   mroute_encap_input,	0,	0,		rip_ctloutput,
   0,
Index: netinet/ip_var.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/ip_var.h,v
retrieving revision 1.57
diff -u -r1.57 ip_var.h
--- netinet/ip_var.h	2001/06/11 18:41:57	1.57
+++ netinet/ip_var.h	2001/08/12 18:51:11
@@ -154,19 +154,21 @@
 extern int	(*legal_vif_num) __P((int));
 extern u_long	(*ip_mcast_src) __P((int));
 extern int rsvp_on;
+
 extern struct	pr_usrreqs rip_usrreqs;
+
+pr_ctloutput_t	ip_ctloutput;
+pr_drain_t	ip_drain;
+pr_init_t	ip_init;
+pr_slowtimo_t	ip_slowtimo;
 
-int	 ip_ctloutput __P((struct socket *, struct sockopt *sopt));
-void	 ip_drain __P((void));
 void	 ip_freemoptions __P((struct ip_moptions *));
-void	 ip_init __P((void));
 extern int	 (*ip_mforward) __P((struct ip *, struct ifnet *, struct mbuf *,
 			  struct ip_moptions *));
 int	 ip_output __P((struct mbuf *,
 	    struct mbuf *, struct route *, int, struct ip_moptions *));
 void	 ip_savecontrol __P((struct inpcb *, struct mbuf **, struct ip *,
 		struct mbuf *));
-void	 ip_slowtimo __P((void));
 struct mbuf *
 	 ip_srcroute __P((void));
 void	 ip_stripoptions __P((struct mbuf *, struct mbuf *));
@@ -174,13 +176,13 @@
 u_int16_t	
 	 ip_randomid __P((void));
 #endif
-int	 rip_ctloutput __P((struct socket *, struct sockopt *));
-void	 rip_ctlinput __P((int, struct sockaddr *, void *));
-void	 rip_init __P((void));
-void	 rip_input __P((struct mbuf *, int, int));
-int	 rip_output __P((struct mbuf *, struct socket *, u_long));
-void	ipip_input __P((struct mbuf *, int, int));
-void	rsvp_input __P((struct mbuf *, int, int));
+pr_ctloutput_t	rip_ctloutput;
+pr_ctlinput_t	rip_ctlinput;
+pr_init_t	rip_init;
+pr_input_t	rip_input;
+pr_output_t	rip_output;
+pr_input_t	ipip_input;
+pr_input_t	rsvp_input;
 int	ip_rsvp_init __P((struct socket *));
 int	ip_rsvp_done __P((void));
 int	ip_rsvp_vif_init __P((struct socket *, struct sockopt *));
@@ -188,8 +190,8 @@
 void	ip_rsvp_force_done __P((struct socket *));
 
 #ifdef IPDIVERT
-void	div_init __P((void));
-void	div_input __P((struct mbuf *, int, int));
+pr_init_t	div_init;
+pr_input_t	div_input;
 void	divert_packet __P((struct mbuf *, int, int));
 extern struct pr_usrreqs div_usrreqs;
 extern u_int16_t ip_divert_cookie;
Index: netinet/raw_ip.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.80
diff -u -r1.80 raw_ip.c
--- netinet/raw_ip.c	2001/07/26 19:19:48	1.80
+++ netinet/raw_ip.c	2001/08/12 18:51:12
@@ -114,7 +114,8 @@
 void
 rip_input(m, off, proto)
 	struct mbuf *m;
-	int off, proto;
+	int off;
+	int proto;
 {
 	register struct ip *ip = mtod(m, struct ip *);
 	register struct inpcb *inp;
@@ -196,10 +197,10 @@
  * Tack on options user may have setup with control call.
  */
 int
-rip_output(m, so, dst)
+rip_output(m, so, nam)
 	struct mbuf *m;
 	struct socket *so;
-	u_long dst;
+	struct sockaddr *nam;
 {
 	register struct ip *ip;
 	register struct inpcb *inp = sotoinpcb(so);
@@ -214,6 +215,10 @@
 			m_freem(m);
 			return(EMSGSIZE);
 		}
+		if (nam == NULL) {
+			m_freem(m);
+			return ENOTCONN;
+		}
 		M_PREPEND(m, sizeof(struct ip), M_TRYWAIT);
 		ip = mtod(m, struct ip *);
 		ip->ip_tos = inp->inp_ip_tos;
@@ -221,7 +226,8 @@
 		ip->ip_p = inp->inp_ip_p;
 		ip->ip_len = m->m_pkthdr.len;
 		ip->ip_src = inp->inp_laddr;
-		ip->ip_dst.s_addr = dst;
+		ip->ip_dst.s_addr
+		    = ((struct sockaddr_in *)nam)->sin_addr.s_addr;
 		ip->ip_ttl = inp->inp_ip_ttl;
 	} else {
 		if (m->m_pkthdr.len > IP_MAXPACKET) {
@@ -566,22 +572,26 @@
 	 struct mbuf *control, struct proc *p)
 {
 	struct inpcb *inp = sotoinpcb(so);
-	register u_long dst;
+	struct sockaddr_in dst_addr;
+
 
 	if (so->so_state & SS_ISCONNECTED) {
 		if (nam) {
 			m_freem(m);
 			return EISCONN;
 		}
-		dst = inp->inp_faddr.s_addr;
+		dst_addr.sin_len = sizeof(dst_addr);
+		dst_addr.sin_family = AF_INET;
+		dst_addr.sin_port = 0;
+		dst_addr.sin_addr.s_addr = inp->inp_faddr.s_addr;
+		nam = (struct sockaddr *)&dst_addr;
 	} else {
 		if (nam == NULL) {
 			m_freem(m);
 			return ENOTCONN;
 		}
-		dst = ((struct sockaddr_in *)nam)->sin_addr.s_addr;
 	}
-	return rip_output(m, so, dst);
+	return rip_output(m, so, nam);
 }
 
 static int
Index: netinet/tcp_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_input.c,v
retrieving revision 1.136
diff -u -r1.136 tcp_input.c
--- netinet/tcp_input.c	2001/07/08 02:20:46	1.136
+++ netinet/tcp_input.c	2001/08/12 18:51:17
@@ -331,7 +331,8 @@
 void
 tcp_input(m, off0, proto)
 	register struct mbuf *m;
-	int off0, proto;
+	int off0;
+	int proto;
 {
 	register struct tcphdr *th;
 	register struct ip *ip = NULL;
Index: netinet/tcp_subr.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_subr.c,v
retrieving revision 1.112
diff -u -r1.112 tcp_subr.c
--- netinet/tcp_subr.c	2001/07/27 00:04:39	1.112
+++ netinet/tcp_subr.c	2001/08/12 18:51:19
@@ -1107,8 +1107,8 @@
 		    (struct sockaddr *)ip6cp->ip6c_src,
 		    th.th_sport, cmd, notify);
 	} else
-		in6_pcbnotify(&tcb, sa, 0, (struct sockaddr *)sa6_src,
-			      0, cmd, notify);
+		in6_pcbnotify(&tcb, sa, 0, (struct sockaddr *)sa6_src, 0,
+		    cmd, notify);
 }
 #endif /* INET6 */
 
Index: netinet/tcp_var.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/tcp_var.h,v
retrieving revision 1.70
diff -u -r1.70 tcp_var.h
--- netinet/tcp_var.h	2001/07/08 02:20:47	1.70
+++ netinet/tcp_var.h	2001/08/12 18:51:20
@@ -372,19 +372,21 @@
 extern	int ss_fltsz;
 extern	int ss_fltsz_local;
 
+pr_ctlinput_t	tcp_ctlinput;
+pr_ctloutput_t	tcp_ctloutput;
+pr_fasttimo_t	tcp_fasttimo;
+pr_slowtimo_t	tcp_slowtimo;
+pr_init_t	tcp_init;
+pr_drain_t	tcp_drain;
+pr_input_t	tcp_input;
+
 void	 tcp_canceltimers __P((struct tcpcb *));
 struct tcpcb *
 	 tcp_close __P((struct tcpcb *));
-void	 tcp_ctlinput __P((int, struct sockaddr *, void *));
-int	 tcp_ctloutput __P((struct socket *, struct sockopt *));
 struct tcpcb *
 	 tcp_drop __P((struct tcpcb *, int));
-void	 tcp_drain __P((void));
-void	 tcp_fasttimo __P((void));
 struct rmxp_tao *
 	 tcp_gettaocache __P((struct inpcb *));
-void	 tcp_init __P((void));
-void	 tcp_input __P((struct mbuf *, int, int));
 void	 tcp_mss __P((struct tcpcb *, int));
 int	 tcp_mssopt __P((struct tcpcb *));
 void	 tcp_drop_syn_sent __P((struct inpcb *, int));
@@ -398,7 +400,6 @@
 struct rtentry *
 	 tcp_rtlookup __P((struct inpcb *));
 void	 tcp_setpersist __P((struct tcpcb *));
-void	 tcp_slowtimo __P((void));
 struct tcptemp *
 	 tcp_maketemplate __P((struct tcpcb *));
 void	 tcp_fillheaders __P((struct tcpcb *, void *, void *));
Index: netinet/udp_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet/udp_usrreq.c,v
retrieving revision 1.93
diff -u -r1.93 udp_usrreq.c
--- netinet/udp_usrreq.c	2001/07/26 19:19:48	1.93
+++ netinet/udp_usrreq.c	2001/08/12 18:51:21
@@ -151,7 +151,8 @@
 void
 udp_input(m, off, proto)
 	register struct mbuf *m;
-	int off, proto;
+	int off;
+ 	int proto;
 {
 	int iphlen = off;
 	register struct ip *ip;
Index: netinet/udp_var.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet/udp_var.h,v
retrieving revision 1.23
diff -u -r1.23 udp_var.h
--- netinet/udp_var.h	2001/02/18 07:10:03	1.23
+++ netinet/udp_var.h	2001/08/12 18:51:21
@@ -103,9 +103,9 @@
 extern struct	udpstat udpstat;
 extern int	log_in_vain;
 
-void	udp_ctlinput __P((int, struct sockaddr *, void *));
-void	udp_init __P((void));
-void	udp_input __P((struct mbuf *, int, int));
+pr_ctlinput_t	udp_ctlinput;
+pr_init_t	udp_init;
+pr_input_t	udp_input;
 
 void	udp_notify __P((struct inpcb *inp, int errno));
 int	udp_shutdown __P((struct socket *so));
Index: netinet6/ah.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ah.h,v
retrieving revision 1.5
diff -u -r1.5 ah.h
--- netinet6/ah.h	2001/06/11 12:39:03	1.5
+++ netinet6/ah.h	2001/08/12 18:51:21
@@ -79,13 +79,14 @@
 
 #define	AH_MAXSUMSIZE	16
 
+extern pr_input_t  ah4_input;
 extern const struct ah_algorithm *ah_algorithm_lookup __P((int));
 
+
 /* cksum routines */
 extern int ah_hdrlen __P((struct secasvar *));
 
 extern size_t ah_hdrsiz __P((struct ipsecrequest *));
-extern void ah4_input __P((struct mbuf *, ...));
 extern int ah4_output __P((struct mbuf *, struct ipsecrequest *));
 extern int ah4_calccksum __P((struct mbuf *, caddr_t, size_t,
 	const struct ah_algorithm *, struct secasvar *));
Index: netinet6/ah_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ah_input.c,v
retrieving revision 1.7
diff -u -r1.7 ah_input.c
--- netinet6/ah_input.c	2001/06/11 12:39:04	1.7
+++ netinet6/ah_input.c	2001/08/12 18:51:23
@@ -56,6 +56,7 @@
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/in_var.h>
+#include <netinet/in_pcb.h>
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
 #include <netinet/ip_ecn.h>
@@ -94,17 +95,13 @@
 #define IPLEN_FLIPPED
 
 #ifdef INET
-#include <netinet/ipprotosw.h>
-extern struct ipprotosw inetsw[];
+extern struct protosw inetsw[];
 
 void
-#if __STDC__
-ah4_input(struct mbuf *m, ...)
-#else
-ah4_input(m, va_alist)
+ah4_input(m, off, proto)
 	struct mbuf *m;
-	va_dcl
-#endif
+	int off;
+	int proto;
 {
 	struct ip *ip;
 	struct ah *ah;
@@ -116,15 +113,8 @@
 	struct secasvar *sav = NULL;
 	u_int16_t nxt;
 	size_t hlen;
-	int off, proto;
-	va_list ap;
 	size_t stripsiz = 0;
 
-	va_start(ap, m);
-	off = va_arg(ap, int);
-	proto = va_arg(ap, int);
-	va_end(ap);
-
 #ifndef PULLDOWN_TEST
 	if (m->m_len < off + sizeof(struct newah)) {
 		m = m_pullup(m, off + sizeof(struct newah));
@@ -999,6 +989,7 @@
 	} else {
 		m = NULL;
 		ip6 = NULL;
+		off = 0;
 	}
 
 	if (ip6) {
Index: netinet6/esp.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/esp.h,v
retrieving revision 1.4
diff -u -r1.4 esp.h
--- netinet6/esp.h	2001/06/11 12:39:04	1.4
+++ netinet6/esp.h	2001/08/12 18:51:23
@@ -97,8 +97,8 @@
 extern int esp_max_ivlen __P((void));
 
 /* crypt routines */
+extern pr_input_t esp4_input;
 extern int esp4_output __P((struct mbuf *, struct ipsecrequest *));
-extern void esp4_input __P((struct mbuf *, ...));
 extern size_t esp_hdrsiz __P((struct ipsecrequest *));
 
 extern int esp_schedule __P((const struct esp_algorithm *, struct secasvar *));
Index: netinet6/esp_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/esp_input.c,v
retrieving revision 1.7
diff -u -r1.7 esp_input.c
--- netinet6/esp_input.c	2001/06/11 12:39:05	1.7
+++ netinet6/esp_input.c	2001/08/12 18:51:25
@@ -56,6 +56,7 @@
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
+#include <netinet/in_pcb.h>
 #include <netinet/in_var.h>
 #include <netinet/ip_ecn.h>
 #ifdef INET6
@@ -97,17 +98,13 @@
 		? sizeof(struct newesp) : sizeof(struct esp))
 
 #ifdef INET
-#include <netinet/ipprotosw.h>
-extern struct ipprotosw inetsw[];
+extern struct protosw inetsw[];
 
 void
-#if __STDC__
-esp4_input(struct mbuf *m, ...)
-#else
-esp4_input(m, va_alist)
+esp4_input(m, off, proto)
 	struct mbuf *m;
-	va_dcl
-#endif
+	int off;
+	int proto;
 {
 	struct ip *ip;
 	struct esp *esp;
@@ -120,13 +117,6 @@
 	int ivlen;
 	size_t hlen;
 	size_t esplen;
-	va_list ap;
-	int off, proto;
-
-	va_start(ap, m);
-	off = va_arg(ap, int);
-	proto = va_arg(ap, int);
-	va_end(ap);
 
 	/* sanity check for alignment. */
 	if (off % 4 != 0 || m->m_pkthdr.len % 4 != 0) {
@@ -924,6 +914,7 @@
 	} else {
 		m = NULL;
 		ip6 = NULL;
+		off = 0;
 	}
 
 	if (ip6) {
Index: netinet6/esp_rijndael.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/esp_rijndael.c,v
retrieving revision 1.1
diff -u -r1.1 esp_rijndael.c
--- netinet6/esp_rijndael.c	2001/06/11 12:39:05	1.1
+++ netinet6/esp_rijndael.c	2001/08/12 18:51:25
@@ -35,6 +35,7 @@
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/protosw.h>
 #include <sys/socket.h>
 #include <sys/queue.h>
 
Index: netinet6/in6.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6.c,v
retrieving revision 1.15
diff -u -r1.15 in6.c
--- netinet6/in6.c	2001/08/03 19:10:31	1.15
+++ netinet6/in6.c	2001/08/12 18:51:29
@@ -79,6 +79,7 @@
 #include <sys/time.h>
 #include <sys/kernel.h>
 #include <sys/syslog.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_types.h>
@@ -1789,8 +1790,8 @@
 	static char ip6buf[8][48];
 	int i;
 	char *cp;
-	u_short *a = (u_short *)addr;
-	u_char *d;
+	const u_short *a = (const u_short *)addr;
+	const u_char *d;
 	int dcolon = 0;
 
 	ip6round = (ip6round + 1) & 7;
@@ -1819,7 +1820,7 @@
 			a++;
 			continue;
 		}
-		d = (u_char *)a;
+		d = (const u_char *)a;
 		*cp++ = digits[*d >> 4];
 		*cp++ = digits[*d++ & 0xf];
 		*cp++ = digits[*d >> 4];
Index: netinet6/in6_gif.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_gif.c,v
retrieving revision 1.5
diff -u -r1.5 in6_gif.c
--- netinet6/in6_gif.c	2001/06/11 12:39:05	1.5
+++ netinet6/in6_gif.c	2001/08/12 18:51:30
@@ -41,7 +41,7 @@
 #include <sys/errno.h>
 #include <sys/queue.h>
 #include <sys/syslog.h>
-
+#include <sys/protosw.h>
 #include <sys/malloc.h>
 
 #include <net/if.h>
@@ -302,7 +302,7 @@
 	dst = (struct sockaddr_in6 *)sc->gif_pdst;
 
 	/* LINTED const cast */
-	m_copydata((struct mbuf *)m, 0, sizeof(ip6), (caddr_t)&ip6);
+	m_copydata(m, 0, sizeof(ip6), (caddr_t)&ip6);
 
 	/* check for address match */
 	addrmatch = 0;
Index: netinet6/in6_ifattach.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_ifattach.c,v
retrieving revision 1.7
diff -u -r1.7 in6_ifattach.c
--- netinet6/in6_ifattach.c	2001/08/04 17:10:13	1.7
+++ netinet6/in6_ifattach.c	2001/08/12 18:51:31
@@ -38,6 +38,7 @@
 #include <sys/kernel.h>
 #include <sys/syslog.h>
 #include <sys/md5.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_dl.h>
Index: netinet6/in6_pcb.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_pcb.c,v
retrieving revision 1.16
diff -u -r1.16 in6_pcb.c
--- netinet6/in6_pcb.c	2001/08/04 17:10:14	1.16
+++ netinet6/in6_pcb.c	2001/08/12 18:51:33
@@ -765,7 +765,8 @@
 void
 in6_pcbnotify(head, dst, fport_arg, src, lport_arg, cmd, notify)
 	struct inpcbhead *head;
-	struct sockaddr *dst, *src;
+	struct sockaddr *dst;
+	const struct sockaddr *src;
 	u_int fport_arg, lport_arg;
 	int cmd;
 	void (*notify) __P((struct inpcb *, int));
Index: netinet6/in6_pcb.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_pcb.h,v
retrieving revision 1.5
diff -u -r1.5 in6_pcb.h
--- netinet6/in6_pcb.h	2001/08/04 17:10:14	1.5
+++ netinet6/in6_pcb.h	2001/08/12 18:51:34
@@ -91,7 +91,7 @@
 				struct in6_addr *, u_int, struct in6_addr *,
 				u_int, int, struct ifnet *));
 void	in6_pcbnotify __P((struct inpcbhead *, struct sockaddr *,
-			   u_int, struct sockaddr *, u_int, int,
+			   u_int, const struct sockaddr *, u_int, int,
 			   void (*)(struct inpcb *, int)));
 void	in6_rtchange __P((struct inpcb *, int));
 int	in6_setpeeraddr __P((struct socket *so, struct sockaddr **nam));
Index: netinet6/in6_prefix.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_prefix.c,v
retrieving revision 1.7
diff -u -r1.7 in6_prefix.c
--- netinet6/in6_prefix.c	2001/06/11 12:39:05	1.7
+++ netinet6/in6_prefix.c	2001/08/12 18:51:35
@@ -74,6 +74,7 @@
 #include <sys/systm.h>
 #include <sys/syslog.h>
 #include <sys/proc.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 
Index: netinet6/in6_rmx.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/in6_rmx.c,v
retrieving revision 1.4
diff -u -r1.4 in6_rmx.c
--- netinet6/in6_rmx.c	2001/06/11 12:39:05	1.4
+++ netinet6/in6_rmx.c	2001/08/12 18:51:36
@@ -82,6 +82,7 @@
 #include <sys/socketvar.h>
 #include <sys/mbuf.h>
 #include <sys/syslog.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/route.h>
Index: netinet6/ip6_fw.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ip6_fw.c,v
retrieving revision 1.13
diff -u -r1.13 ip6_fw.c
--- netinet6/ip6_fw.c	2001/06/28 05:18:31	1.13
+++ netinet6/ip6_fw.c	2001/08/12 18:51:38
@@ -42,6 +42,7 @@
 #include <sys/socket.h>
 #include <sys/socketvar.h>
 #include <sys/syslog.h>
+#include <sys/protosw.h>
 #include <sys/time.h>
 #include <net/if.h>
 #include <net/route.h>
Index: netinet6/ip6_var.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ip6_var.h,v
retrieving revision 1.7
diff -u -r1.7 ip6_var.h
--- netinet6/ip6_var.h	2001/06/11 12:39:05	1.7
+++ netinet6/ip6_var.h	2001/08/12 18:51:39
@@ -332,23 +332,22 @@
 struct ip6_pktopts *ip6_copypktopts __P((struct ip6_pktopts *, int));
 int	ip6_optlen __P((struct inpcb *));
 
-int	route6_input __P((struct mbuf **, int *, int));
+pr_input6_t	route6_input;
 
-void	frag6_init __P((void));
-int	frag6_input __P((struct mbuf **, int *, int));
-void	frag6_slowtimo __P((void));
-void	frag6_drain __P((void));
+pr_init_t	frag6_init;
+pr_input6_t	frag6_input;
+pr_slowtimo_t	frag6_slowtimo;
+pr_drain_t	frag6_drain;
 
-void	rip6_init __P((void));
-int	rip6_input __P((struct mbuf **mp, int *offp, int proto));
-void	rip6_ctlinput __P((int, struct sockaddr *, void *));
-int	rip6_ctloutput __P((struct socket *so, struct sockopt *sopt));
-int	rip6_output __P((struct mbuf *, ...));
-int	rip6_usrreq __P((struct socket *,
-	    int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *));
+pr_init_t	rip6_init;
+pr_input6_t	rip6_input;
+pr_ctlinput_t	rip6_ctlinput;
+pr_ctloutput_t	rip6_ctloutput;
+pr_output_t	rip6_output;
+pr_usrreq_t	rip6_usrreq;
+pr_input6_t	dest6_input; 
+pr_input6_t	none_input; 
 
-int	dest6_input __P((struct mbuf **, int *, int));
-int	none_input __P((struct mbuf **, int *, int));
 #endif /* _KERNEL */
 
 #endif /* !_NETINET6_IP6_VAR_H_ */
Index: netinet6/ip6protosw.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ip6protosw.h,v
retrieving revision 1.6
diff -u -r1.6 ip6protosw.h
--- netinet6/ip6protosw.h	2001/06/11 12:39:05	1.6
+++ netinet6/ip6protosw.h	2001/08/12 18:51:39
@@ -128,30 +128,20 @@
 	short	pr_flags;		/* see below */
 
 /* protocol-protocol hooks */
-	int	(*pr_input)		/* input to protocol (from below) */
-			__P((struct mbuf **, int *, int));
-	int	(*pr_output)		/* output to protocol (from above) */
-			__P((struct mbuf *, ...));
-	void	(*pr_ctlinput)		/* control input (from below) */
-			__P((int, struct sockaddr *, void *));
-	int	(*pr_ctloutput)		/* control output (from above) */
-			__P((struct socket *, struct sockopt *));
+	pr_input6_t *pr_input;		/* input to protocol (from below) */
+	pr_output_t *pr_output;		/* output to protocol (from above) */
+	pr_ctlinput_t *pr_ctlinput;	/* control input (from below) */
+	pr_ctloutput_t *pr_ctloutput;	/* control output (from above) */
 
 /* user-protocol hook */
-	int	(*pr_usrreq)		/* user request: see list below */
-			__P((struct socket *, int, struct mbuf *,
-			     struct mbuf *, struct mbuf *, struct proc *));
+	pr_usrreq_t	*pr_usrreq;	/* user request: see list below */
 
 /* utility hooks */
-	void	(*pr_init)		/* initialization hook */
-			__P((void));
+	pr_init_t *pr_init;
+	pr_fasttimo_t *pr_fasttimo;	/* fast timeout (200ms) */
+	pr_slowtimo_t *pr_slowtimo;	/* slow timeout (500ms) */
+	pr_drain_t *pr_drain;		/* flush any excess space possible */
 
-	void	(*pr_fasttimo)		/* fast timeout (200ms) */
-			__P((void));
-	void	(*pr_slowtimo)		/* slow timeout (500ms) */
-			__P((void));
-	void	(*pr_drain)		/* flush any excess space possible */
-			__P((void));
 	struct	pr_usrreqs *pr_usrreqs;	/* supersedes pr_usrreq() */
 	struct	pfil_head	pr_pfh;
 };
Index: netinet6/ipcomp.h
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ipcomp.h,v
retrieving revision 1.2
diff -u -r1.2 ipcomp.h
--- netinet6/ipcomp.h	2001/06/11 12:39:06	1.2
+++ netinet6/ipcomp.h	2001/08/12 18:51:39
@@ -62,9 +62,10 @@
 	size_t minplen;		/* minimum required length for compression */
 };
 
+extern pr_input_t ipcomp4_input;
+
 struct ipsecrequest;
 extern const struct ipcomp_algorithm *ipcomp_algorithm_lookup __P((int));
-extern void ipcomp4_input __P((struct mbuf *, ...));
 extern int ipcomp4_output __P((struct mbuf *, struct ipsecrequest *));
 #endif /*KERNEL*/
 
Index: netinet6/ipcomp_input.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/ipcomp_input.c,v
retrieving revision 1.2
diff -u -r1.2 ipcomp_input.c
--- netinet6/ipcomp_input.c	2001/06/11 12:39:06	1.2
+++ netinet6/ipcomp_input.c	2001/08/12 18:51:40
@@ -83,17 +83,13 @@
 #define IPLEN_FLIPPED
 
 #ifdef INET
-#include <netinet/ipprotosw.h>
-extern struct ipprotosw inetsw[];
+extern struct protosw inetsw[];
 
 void
-#if __STDC__
-ipcomp4_input(struct mbuf *m, ...)
-#else
-ipcomp4_input(m, va_alist)
+ipcomp4_input(m, off, proto)
 	struct mbuf *m;
-	va_dcl
-#endif
+	int off;
+	int proto;
 {
 	struct mbuf *md;
 	struct ip *ip;
@@ -105,13 +101,6 @@
 	int error;
 	size_t newlen, olen;
 	struct secasvar *sav = NULL;
-	int off, proto;
-	va_list ap;
-
-	va_start(ap, m);
-	off = va_arg(ap, int);
-	proto = va_arg(ap, int);
-	va_end(ap);
 
 	if (m->m_pkthdr.len < off + sizeof(struct ipcomp)) {
 		ipseclog((LOG_DEBUG, "IPv4 IPComp input: assumption failed "
Index: netinet6/nd6_nbr.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/nd6_nbr.c,v
retrieving revision 1.10
diff -u -r1.10 nd6_nbr.c
--- netinet6/nd6_nbr.c	2001/06/19 14:48:02	1.10
+++ netinet6/nd6_nbr.c	2001/08/12 18:51:42
@@ -46,6 +46,7 @@
 #include <sys/syslog.h>
 #include <sys/queue.h>
 #include <sys/callout.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_types.h>
Index: netinet6/nd6_rtr.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/nd6_rtr.c,v
retrieving revision 1.8
diff -u -r1.8 nd6_rtr.c
--- netinet6/nd6_rtr.c	2001/06/18 11:37:06	1.8
+++ netinet6/nd6_rtr.c	2001/08/12 18:51:45
@@ -44,6 +44,7 @@
 #include <sys/errno.h>
 #include <sys/syslog.h>
 #include <sys/queue.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 #include <net/if_types.h>
Index: netinet6/raw_ip6.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/raw_ip6.c,v
retrieving revision 1.12
diff -u -r1.12 raw_ip6.c
--- netinet6/raw_ip6.c	2001/07/26 19:19:49	1.12
+++ netinet6/raw_ip6.c	2001/08/12 18:51:47
@@ -286,7 +286,7 @@
 		sa6_src = &sa6_any;
 	}
 
-	(void) in6_pcbnotify(&ripcb, sa, 0, (struct sockaddr *)sa6_src,
+	(void) in6_pcbnotify(&ripcb, sa, 0, (const struct sockaddr *)sa6_src,
 			     0, cmd, notify);
 }
 
@@ -295,16 +295,12 @@
  * Tack on options user may have setup with control call.
  */
 int
-#if __STDC__
-rip6_output(struct mbuf *m, ...)
-#else
-rip6_output(m, va_alist)
+rip6_output(m, so, sockaddr)
 	struct mbuf *m;
-	va_dcl
-#endif
-{
 	struct socket *so;
-	struct sockaddr_in6 *dstsock;
+	struct sockaddr *sockaddr;
+{
+	struct sockaddr_in6 *dstsock = (struct sockaddr_in6 *)sockaddr;
 	struct mbuf *control;
 	struct in6_addr *dst;
 	struct ip6_hdr *ip6;
@@ -315,14 +311,12 @@
 	struct ifnet *oifp = NULL;
 	int type = 0, code = 0;		/* for ICMPv6 output statistics only */
 	int priv = 0;
-	va_list ap;
-
-	va_start(ap, m);
-	so = va_arg(ap, struct socket *);
-	dstsock = va_arg(ap, struct sockaddr_in6 *);
-	control = va_arg(ap, struct mbuf *);
-	va_end(ap);
 
+	if (m->m_type == MT_CONTROL) {
+		control = m;
+		m = m->m_next;
+	} else
+		control = NULL;
 	in6p = sotoin6pcb(so);
 
 	priv = 0;
@@ -718,7 +712,11 @@
 		dst->sin6_scope_id = scope6_addr2default(&dst->sin6_addr);
 	}
 #endif
-	return rip6_output(m, so, dst, control);
+	if (control) {
+		control->m_next = m;
+		m = control;
+	}
+	return rip6_output(m, so, (struct sockaddr *)dst);
 }
 
 struct pr_usrreqs rip6_usrreqs = {
Index: netinet6/route6.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/route6.c,v
retrieving revision 1.4
diff -u -r1.4 route6.c
--- netinet6/route6.c	2001/06/11 12:39:06	1.4
+++ netinet6/route6.c	2001/08/12 18:51:47
@@ -38,6 +38,7 @@
 #include <sys/socket.h>
 #include <sys/systm.h>
 #include <sys/queue.h>
+#include <sys/protosw.h>
 
 #include <net/if.h>
 
Index: netinet6/udp6_usrreq.c
===================================================================
RCS file: /home/ncvs/src/sys/netinet6/udp6_usrreq.c,v
retrieving revision 1.16
diff -u -r1.16 udp6_usrreq.c
--- netinet6/udp6_usrreq.c	2001/07/26 19:19:49	1.16
+++ netinet6/udp6_usrreq.c	2001/08/12 18:51:48
@@ -456,10 +456,11 @@
 		bzero(&uh, sizeof(uh));
 		m_copydata(m, off, sizeof(*uhp), (caddr_t)&uh);
 
-		(void) in6_pcbnotify(&udb, sa, uh.uh_dport, ip6cp->ip6c_src, 
+		(void) in6_pcbnotify(&udb, sa, uh.uh_dport, 
+				(const struct sockaddr *)ip6cp->ip6c_src, 
 				     uh.uh_sport, cmd, notify);
 	} else
-		(void) in6_pcbnotify(&udb, sa, 0, (struct sockaddr *)&sa6_src,
+		(void) in6_pcbnotify(&udb, sa, 0, (const struct sockaddr *)&sa6_src,
 				     0, cmd, notify);
 }
 
Index: netipx/ipx_ip.c
===================================================================
RCS file: /home/ncvs/src/sys/netipx/ipx_ip.c,v
retrieving revision 1.27
diff -u -r1.27 ipx_ip.c
--- netipx/ipx_ip.c	2001/02/04 13:13:10	1.27
+++ netipx/ipx_ip.c	2001/08/12 18:51:48
@@ -162,9 +162,10 @@
 static int ipxip_hold_input;
 
 void
-ipxip_input(m, hlen)
+ipxip_input(m, hlen, proto)
 	register struct mbuf *m;
 	int hlen;
+	int proto; /* ignored */
 {
 	register struct ip *ip;
 	register struct ipx *ipx;
Index: netipx/ipx_ip.h
===================================================================
RCS file: /home/ncvs/src/sys/netipx/ipx_ip.h,v
retrieving revision 1.14
diff -u -r1.14 ipx_ip.h
--- netipx/ipx_ip.h	1999/12/29 04:46:08	1.14
+++ netipx/ipx_ip.h	2001/08/12 18:51:49
@@ -51,8 +51,8 @@
 
 #ifdef _KERNEL
 
-void	ipxip_ctlinput __P((int cmd, struct sockaddr *sa, void *arg));
-void	ipxip_input __P((struct mbuf *m, int hlen));
+pr_ctlinput_t	ipxip_ctlinput;
+pr_input_t	ipxip_input;
 int	ipxip_route __P((struct socket *so, struct sockopt *sopt));
 
 #endif
Index: netkey/keysock.c
===================================================================
RCS file: /home/ncvs/src/sys/netkey/keysock.c,v
retrieving revision 1.6
diff -u -r1.6 keysock.c
--- netkey/keysock.c	2001/06/11 12:39:10	1.6
+++ netkey/keysock.c	2001/08/12 18:51:50
@@ -71,23 +71,14 @@
  * key_output()
  */
 int
-#if __STDC__
-key_output(struct mbuf *m, ...)
-#else
-key_output(m, va_alist)
+key_output(m, so, sockaddr)
 	struct mbuf *m;
-	va_dcl
-#endif
+	struct socket *so;
+	struct sockaddr *sockaddr; /* ignored */
 {
 	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.\n");
Index: netkey/keysock.h
===================================================================
RCS file: /home/ncvs/src/sys/netkey/keysock.h,v
retrieving revision 1.5
diff -u -r1.5 keysock.h
--- netkey/keysock.h	2000/07/04 16:35:14	1.5
+++ netkey/keysock.h	2001/08/12 18:51:50
@@ -71,7 +71,7 @@
 
 extern struct pfkeystat pfkeystat;
 
-extern int key_output __P((struct mbuf *, ...));
+extern pr_output_t key_output;
 extern int key_usrreq __P((struct socket *,
 	int, struct mbuf *, struct mbuf *, struct mbuf *));
 
Index: sys/mbuf.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/mbuf.h,v
retrieving revision 1.83
diff -u -r1.83 mbuf.h
--- sys/mbuf.h	2001/07/26 18:47:40	1.83
+++ sys/mbuf.h	2001/08/12 18:51:52
@@ -434,7 +434,7 @@
 void		 m_extadd(struct mbuf *, caddr_t, u_int,
 		    void (*free)(caddr_t, void *), void *, short, int);
 void		 m_copyback(struct mbuf *, int, int, caddr_t);
-void		 m_copydata(struct mbuf *, int, int, caddr_t);
+void		 m_copydata(const struct mbuf *, int, int, caddr_t);
 struct	mbuf 	*m_copym(struct mbuf *, int, int, int);
 struct	mbuf 	*m_copypacket(struct mbuf *, int);
 struct	mbuf 	*m_devget(char *, int, int, struct ifnet *,
Index: sys/protosw.h
===================================================================
RCS file: /home/ncvs/src/sys/sys/protosw.h,v
retrieving revision 1.34
diff -u -r1.34 protosw.h
--- sys/protosw.h	2001/08/10 23:17:22	1.34
+++ sys/protosw.h	2001/08/12 18:51:53
@@ -73,9 +73,11 @@
  * similar to the vnode VOP interface.
  */
 /* USE THESE FOR YOUR PROTOTYPES ! */
-typedef void	pr_input_t (struct mbuf *, int);
+
+typedef void	pr_input_t (struct mbuf *, int, int);
+typedef int	pr_input6_t (struct mbuf **, int*, int);  /* XXX FIX THIS */
 typedef void	pr_in_input_t (struct mbuf *, int, int); /* XXX FIX THIS */
-typedef int	pr_output_t (struct mbuf *, struct socket *);
+typedef int	pr_output_t (struct mbuf *, struct socket *, struct sockaddr *);
 typedef void	pr_ctlinput_t (int, struct sockaddr *, void *);
 typedef int	pr_ctloutput_t (struct socket *, struct sockopt *);
 typedef	void	pr_init_t (void);
@@ -83,6 +85,9 @@
 typedef	void	pr_slowtimo_t (void);
 typedef	void	pr_drain_t (void);
 
+typedef int	pr_usrreq_t(struct socket *, int, struct mbuf *,
+			     struct mbuf *, struct mbuf *, struct proc *);
+
 
 struct protosw {
 	short	pr_type;		/* socket type used for */
@@ -95,7 +100,7 @@
 	pr_ctlinput_t *pr_ctlinput;	/* control input (from below) */
 	pr_ctloutput_t *pr_ctloutput;	/* control output (from above) */
 /* user-protocol hook */
-	void	*pr_ousrreq;
+	pr_usrreq_t	*pr_ousrreq;
 /* utility hooks */
 	pr_init_t *pr_init;
 	pr_fasttimo_t *pr_fasttimo;	/* fast timeout (200ms) */

--------------368BE1ACB0C8DBFA3CF8FDC2--


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3B76CFD3.4C6D4DDE>