From deffea2eb0959b4d6b616d3898426528a2d1f22e Mon Sep 17 00:00:00 2001 From: Joerg Sonnenberger Date: Thu, 3 Jun 2004 15:04:52 +0000 Subject: [PATCH] Change pr_output's signature to take two fixed arguments and possible additional varidic arguments. Change the various protocols accordingly. This is not the signature NetBSD uses (only struct mbuf * + variadic), but since all protocols use the socket argument (beside NS), it is more reasonable to keep that static as well. While at it, fix the pr_soport in ip6protosw to match the protosw. --- sys/net/rtsock.c | 15 +++++++++++---- sys/netinet/ip_var.h | 4 ++-- sys/netinet/ipprotosw.h | 4 ++-- sys/netinet/raw_ip.c | 12 ++++++++++-- sys/netinet6/in6_gif.c | 4 ++-- sys/netinet6/ip6_var.h | 4 ++-- sys/netinet6/ip6protosw.h | 8 +++++--- sys/netinet6/raw_ip6.c | 8 +++----- sys/netproto/atalk/at_extern.h | 4 ++-- sys/netproto/atalk/ddp_output.c | 4 ++-- sys/netproto/key/keysock.c | 10 ++-------- sys/netproto/key/keysock.h | 6 +++--- sys/sys/protosw.h | 5 ++--- 13 files changed, 48 insertions(+), 40 deletions(-) diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 3b8aa9a110..3c7b07f697 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -32,7 +32,7 @@ * * @(#)rtsock.c 8.7 (Berkeley) 10/12/95 * $FreeBSD: src/sys/net/rtsock.c,v 1.44.2.11 2002/12/04 14:05:41 ru Exp $ - * $DragonFly: src/sys/net/rtsock.c,v 1.13 2004/06/02 14:42:57 eirikn Exp $ + * $DragonFly: src/sys/net/rtsock.c,v 1.14 2004/06/03 15:04:51 joerg Exp $ */ @@ -48,6 +48,8 @@ #include #include +#include + #include #include #include @@ -72,8 +74,7 @@ static int rt_msg2 (int, struct rt_addrinfo *, caddr_t, struct walkarg *); static int rt_xaddrs (caddr_t, caddr_t, struct rt_addrinfo *); static int sysctl_dumpentry (struct radix_node *rn, void *vw); static int sysctl_iflist (int af, struct walkarg *w); -static int route_output (struct mbuf *, struct socket *, - struct pr_output_info *); +static int route_output(struct mbuf *, struct socket *, ...); static void rt_setmetrics (u_long, struct rt_metrics *, struct rt_metrics *); @@ -272,7 +273,7 @@ static struct pr_usrreqs route_usrreqs = { /*ARGSUSED*/ static int -route_output(struct mbuf *m, struct socket *so, struct pr_output_info *oi) +route_output(struct mbuf *m, struct socket *so, ...) { struct rt_msghdr *rtm = 0; struct rtentry *rt = 0; @@ -282,6 +283,12 @@ route_output(struct mbuf *m, struct socket *so, struct pr_output_info *oi) int len, error = 0; struct ifnet *ifp = 0; struct ifaddr *ifa = 0; + struct pr_output_info *oi; + __va_list ap; + + __va_start(ap, so); + oi = __va_arg(ap, struct pr_output_info *); + __va_end(ap); #define senderr(e) { error = e; goto flush;} if (m == 0 || ((m->m_len < sizeof(long)) && diff --git a/sys/netinet/ip_var.h b/sys/netinet/ip_var.h index 6cf58fe494..1a87689ad8 100644 --- a/sys/netinet/ip_var.h +++ b/sys/netinet/ip_var.h @@ -32,7 +32,7 @@ * * @(#)ip_var.h 8.2 (Berkeley) 1/9/95 * $FreeBSD: src/sys/netinet/ip_var.h,v 1.50.2.13 2003/08/24 08:24:38 hsu Exp $ - * $DragonFly: src/sys/netinet/ip_var.h,v 1.7 2004/05/03 15:18:25 hmp Exp $ + * $DragonFly: src/sys/netinet/ip_var.h,v 1.8 2004/06/03 15:04:51 joerg Exp $ */ #ifndef _NETINET_IP_VAR_H_ @@ -203,7 +203,7 @@ int rip_ctloutput(struct socket *, struct sockopt *); void rip_ctlinput(int, struct sockaddr *, void *); void rip_init(void); void rip_input(struct mbuf *, int, int); -int rip_output(struct mbuf *, struct socket *, u_long); +int rip_output(struct mbuf *, struct socket *, ...); extern void (*ipip_input)(struct mbuf *, int, int); void rsvp_input(struct mbuf *, int, int); int ip_rsvp_init(struct socket *); diff --git a/sys/netinet/ipprotosw.h b/sys/netinet/ipprotosw.h index 0e9ca761d3..fdb226315e 100644 --- a/sys/netinet/ipprotosw.h +++ b/sys/netinet/ipprotosw.h @@ -61,7 +61,7 @@ * * @(#)protosw.h 8.1 (Berkeley) 6/2/93 * $FreeBSD: src/sys/netinet/ipprotosw.h,v 1.1 1999/12/22 19:13:23 shin Exp $ - * $DragonFly: src/sys/netinet/Attic/ipprotosw.h,v 1.3 2003/08/23 11:18:00 rob Exp $ + * $DragonFly: src/sys/netinet/Attic/ipprotosw.h,v 1.4 2004/06/03 15:04:51 joerg Exp $ */ #ifndef _NETINET_IPPROTOSW_H_ @@ -82,7 +82,7 @@ struct ipprotosw { /* protocol-protocol hooks */ void (*pr_input) (struct mbuf *, int off, int proto); /* input to protocol (from below) */ - int (*pr_output) (struct mbuf *m, struct socket *so); + int (*pr_output) (struct mbuf *m, struct socket *so, ...); /* output to protocol (from above) */ void (*pr_ctlinput)(int, struct sockaddr *, void *); /* control input (from below) */ diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 9057ea3de6..2d284dc149 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -32,7 +32,7 @@ * * @(#)raw_ip.c 8.7 (Berkeley) 5/15/95 * $FreeBSD: src/sys/netinet/raw_ip.c,v 1.64.2.16 2003/08/24 08:24:38 hsu Exp $ - * $DragonFly: src/sys/netinet/raw_ip.c,v 1.13 2004/06/02 14:43:01 eirikn Exp $ + * $DragonFly: src/sys/netinet/raw_ip.c,v 1.14 2004/06/03 15:04:51 joerg Exp $ */ #include "opt_inet6.h" @@ -50,6 +50,8 @@ #include #include +#include + #include #include @@ -242,11 +244,17 @@ rip_input(struct mbuf *m, int off, int proto) * Tack on options user may have setup with control call. */ int -rip_output(struct mbuf *m, struct socket *so, u_long dst) +rip_output(struct mbuf *m, struct socket *so, ...) { struct ip *ip; struct inpcb *inp = sotoinpcb(so); + __va_list ap; int flags = (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST; + u_long dst; + + __va_start(ap, so); + dst = __va_arg(ap, u_long); + __va_end(ap); /* * If the user handed us a complete IP packet, use it. diff --git a/sys/netinet6/in6_gif.c b/sys/netinet6/in6_gif.c index d6f5728775..8af7e31f26 100644 --- a/sys/netinet6/in6_gif.c +++ b/sys/netinet6/in6_gif.c @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/netinet6/in6_gif.c,v 1.2.2.7 2003/01/23 21:06:47 sam Exp $ */ -/* $DragonFly: src/sys/netinet6/in6_gif.c,v 1.7 2004/06/02 14:43:01 eirikn Exp $ */ +/* $DragonFly: src/sys/netinet6/in6_gif.c,v 1.8 2004/06/03 15:04:51 joerg Exp $ */ /* $KAME: in6_gif.c,v 1.49 2001/05/14 14:02:17 itojun Exp $ */ /* @@ -74,7 +74,7 @@ static int gif_validate6(const struct ip6_hdr *, struct gif_softc *, struct ifnet *); -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, diff --git a/sys/netinet6/ip6_var.h b/sys/netinet6/ip6_var.h index d3485b0f09..9ffe3d18a1 100644 --- a/sys/netinet6/ip6_var.h +++ b/sys/netinet6/ip6_var.h @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/netinet6/ip6_var.h,v 1.2.2.4 2003/01/23 21:06:47 sam Exp $ */ -/* $DragonFly: src/sys/netinet6/ip6_var.h,v 1.6 2004/04/21 18:13:57 dillon Exp $ */ +/* $DragonFly: src/sys/netinet6/ip6_var.h,v 1.7 2004/06/03 15:04:51 joerg Exp $ */ /* $KAME: ip6_var.h,v 1.62 2001/05/03 14:51:48 itojun Exp $ */ /* @@ -348,7 +348,7 @@ void rip6_init (void); int rip6_input (struct mbuf **mp, int *offp, int proto); void rip6_ctlinput (int, struct sockaddr *, void *); int rip6_ctloutput (struct socket *so, struct sockopt *sopt); -int rip6_output (struct mbuf *, ...); +int rip6_output (struct mbuf *, struct socket *, ...); int rip6_usrreq (struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *); diff --git a/sys/netinet6/ip6protosw.h b/sys/netinet6/ip6protosw.h index a1b2c2d177..65a909b070 100644 --- a/sys/netinet6/ip6protosw.h +++ b/sys/netinet6/ip6protosw.h @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/netinet6/ip6protosw.h,v 1.2.2.4 2002/04/28 05:40:27 suz Exp $ */ -/* $DragonFly: src/sys/netinet6/ip6protosw.h,v 1.4 2004/03/06 01:58:56 hsu Exp $ */ +/* $DragonFly: src/sys/netinet6/ip6protosw.h,v 1.5 2004/06/03 15:04:51 joerg Exp $ */ /* $KAME: ip6protosw.h,v 1.25 2001/09/26 06:13:03 keiichi Exp $ */ /* @@ -129,13 +129,15 @@ struct ip6protosw { int (*pr_input) /* input to protocol (from below) */ (struct mbuf **, int *, int); int (*pr_output) /* output to protocol (from above) */ - (struct mbuf *, ...); + (struct mbuf *, struct socket *, ...); void (*pr_ctlinput) /* control input (from below) */ (int, struct sockaddr *, void *); int (*pr_ctloutput) /* control output (from above) */ (struct socket *, struct sockopt *); - struct lwkt_port *(*pr_soport) (struct socket *, struct sockaddr *); +/* user-protocol hook */ + struct lwkt_port *(*pr_soport) + (struct socket *, struct sockaddr *, int); /* utility hooks */ void (*pr_init) /* initialization hook */ diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index ff0daa98b3..9df17b4064 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * $FreeBSD: src/sys/netinet6/raw_ip6.c,v 1.7.2.7 2003/01/24 05:11:35 sam Exp $ - * $DragonFly: src/sys/netinet6/raw_ip6.c,v 1.13 2004/06/02 14:43:01 eirikn Exp $ + * $DragonFly: src/sys/netinet6/raw_ip6.c,v 1.14 2004/06/03 15:04:51 joerg Exp $ */ /* @@ -308,9 +308,8 @@ rip6_ctlinput(int cmd, struct sockaddr *sa, void *d) * Tack on options user may have setup with control call. */ int -rip6_output(struct mbuf *m, ...) +rip6_output(struct mbuf *m, struct socket *so, ...) { - struct socket *so; struct sockaddr_in6 *dstsock; struct mbuf *control; struct in6_addr *dst; @@ -324,8 +323,7 @@ rip6_output(struct mbuf *m, ...) int priv = 0; __va_list ap; - __va_start(ap, m); - so = __va_arg(ap, struct socket *); + __va_start(ap, so); dstsock = __va_arg(ap, struct sockaddr_in6 *); control = __va_arg(ap, struct mbuf *); __va_end(ap); diff --git a/sys/netproto/atalk/at_extern.h b/sys/netproto/atalk/at_extern.h index 10c6102299..6812460cf4 100644 --- a/sys/netproto/atalk/at_extern.h +++ b/sys/netproto/atalk/at_extern.h @@ -1,5 +1,5 @@ /* - * $DragonFly: src/sys/netproto/atalk/at_extern.h,v 1.6 2004/04/21 18:13:59 dillon Exp $ + * $DragonFly: src/sys/netproto/atalk/at_extern.h,v 1.7 2004/06/03 15:04:51 joerg Exp $ */ struct mbuf; struct sockaddr_at; @@ -35,7 +35,7 @@ extern u_short at_cksum ( struct mbuf *m, int skip); extern void ddp_init (void ); extern struct at_ifaddr *at_ifawithnet (struct sockaddr_at *); #ifdef _NETATALK_DDP_VAR_H_ -extern int ddp_output (struct mbuf *m, struct socket *so); +extern int ddp_output(struct mbuf *m, struct socket *so, ...); #endif #if defined (_NETATALK_DDP_VAR_H_) && defined(_NETATALK_AT_VAR_H_) diff --git a/sys/netproto/atalk/ddp_output.c b/sys/netproto/atalk/ddp_output.c index 8e38f37cb1..30e092b320 100644 --- a/sys/netproto/atalk/ddp_output.c +++ b/sys/netproto/atalk/ddp_output.c @@ -22,7 +22,7 @@ */ /* $FreeBSD: src/sys/netatalk/ddp_output.c,v 1.13.6.1 2000/06/02 22:39:07 archie Exp $ */ -/* $DragonFly: src/sys/netproto/atalk/ddp_output.c,v 1.6 2004/06/02 14:43:02 eirikn Exp $ */ +/* $DragonFly: src/sys/netproto/atalk/ddp_output.c,v 1.7 2004/06/03 15:04:51 joerg Exp $ */ #include #include @@ -44,7 +44,7 @@ int ddp_cksum = 1; int -ddp_output( struct mbuf *m, struct socket *so) +ddp_output(struct mbuf *m, struct socket *so, ...) { struct ddpehdr *deh; struct ddpcb *ddp = sotoddpcb( so ); diff --git a/sys/netproto/key/keysock.c b/sys/netproto/key/keysock.c index 8c7335dc53..dff19baeb1 100644 --- a/sys/netproto/key/keysock.c +++ b/sys/netproto/key/keysock.c @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/netkey/keysock.c,v 1.1.2.4 2003/01/11 19:10:59 ume Exp $ */ -/* $DragonFly: src/sys/netproto/key/keysock.c,v 1.10 2004/06/02 14:43:03 eirikn Exp $ */ +/* $DragonFly: src/sys/netproto/key/keysock.c,v 1.11 2004/06/03 15:04:51 joerg Exp $ */ /* $KAME: keysock.c,v 1.25 2001/08/13 20:07:41 itojun Exp $ */ /* @@ -73,17 +73,11 @@ struct pfkeystat pfkeystat; * key_output() */ int -key_output(struct mbuf *m, ...) +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.\n"); diff --git a/sys/netproto/key/keysock.h b/sys/netproto/key/keysock.h index f2fa1f2fbd..19d79bd3c8 100644 --- a/sys/netproto/key/keysock.h +++ b/sys/netproto/key/keysock.h @@ -1,5 +1,5 @@ /* $FreeBSD: src/sys/netkey/keysock.h,v 1.4.2.1 2000/07/15 07:14:42 kris Exp $ */ -/* $DragonFly: src/sys/netproto/key/keysock.h,v 1.3 2003/08/23 10:06:24 rob Exp $ */ +/* $DragonFly: src/sys/netproto/key/keysock.h,v 1.4 2004/06/03 15:04:51 joerg Exp $ */ /* $KAME: keysock.h,v 1.8 2000/03/27 05:11:06 sumikawa Exp $ */ /* @@ -72,11 +72,11 @@ struct keycb { extern struct pfkeystat pfkeystat; -extern int key_output (struct mbuf *, ...); +extern int key_output (struct mbuf *, struct socket *so, ...); extern int key_usrreq (struct socket *, int, struct mbuf *, struct mbuf *, struct mbuf *); -extern int key_sendup (struct socket *, struct sadb_msg *, u_int, int); +extern int key_sendup(struct socket *, struct sadb_msg *, u_int, int); extern int key_sendup_mbuf (struct socket *, struct mbuf *, int); #endif /* _KERNEL */ diff --git a/sys/sys/protosw.h b/sys/sys/protosw.h index 201322ffbd..5089aecee2 100644 --- a/sys/sys/protosw.h +++ b/sys/sys/protosw.h @@ -32,7 +32,7 @@ * * @(#)protosw.h 8.1 (Berkeley) 6/2/93 * $FreeBSD: src/sys/sys/protosw.h,v 1.28.2.2 2001/07/03 11:02:01 ume Exp $ - * $DragonFly: src/sys/sys/protosw.h,v 1.9 2004/04/23 10:21:08 hsu Exp $ + * $DragonFly: src/sys/sys/protosw.h,v 1.10 2004/06/03 15:04:52 joerg Exp $ */ #ifndef _SYS_PROTOSW_H_ @@ -80,8 +80,7 @@ struct protosw { /* protocol-protocol hooks */ void (*pr_input) (struct mbuf *, int); /* input to protocol (from below) */ - int (*pr_output) (struct mbuf *, struct socket *, - struct pr_output_info *); + int (*pr_output) (struct mbuf *, struct socket *, ...); /* output to protocol (from above) */ void (*pr_ctlinput)(int, struct sockaddr *, void *); /* control input (from below) */ -- 2.41.0