Hi,

I prefer compiler checks over variable argument lists.
So lets convert the pr_output functions.

ok?

bluhm

Index: net/pfkey.c
===================================================================
RCS file: /cvs/src/sys/net/pfkey.c,v
retrieving revision 1.38
diff -u -p -r1.38 pfkey.c
--- net/pfkey.c 2 Mar 2017 08:58:24 -0000       1.38
+++ net/pfkey.c 3 Mar 2017 14:45:48 -0000
@@ -90,10 +90,10 @@ static struct pfkey_version *pfkey_versi
 
 struct sockaddr pfkey_addr = { 2, PF_KEY, };
 
-/* static struct domain pfkeydomain; */
-static int pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
-    struct mbuf *nam, struct mbuf *control, struct proc *);
-static int pfkey_output(struct mbuf *mbuf, struct socket *socket);
+int pfkey_usrreq(struct socket *, int , struct mbuf *, struct mbuf *,
+    struct mbuf *, struct proc *);
+int pfkey_output(struct mbuf *, struct socket *, struct sockaddr *,
+    struct mbuf *);
 
 void pfkey_init(void);
 int pfkey_buildprotosw(void);
@@ -154,8 +154,9 @@ pfkey_sendup(struct socket *socket, stru
        return (0);
 }
 
-static int
-pfkey_output(struct mbuf *mbuf, struct socket *socket)
+int
+pfkey_output(struct mbuf *mbuf, struct socket *socket, struct sockaddr 
*dstaddr,
+    struct mbuf *control)
 {
        void *message;
        int error = 0;
@@ -230,7 +231,7 @@ pfkey_detach(struct socket *socket, stru
        return (rval);
 }
 
-static int
+int
 pfkey_usrreq(struct socket *socket, int req, struct mbuf *mbuf,
     struct mbuf *nam, struct mbuf *control, struct proc *p)
 {
@@ -266,7 +267,7 @@ static struct protosw pfkey_protosw_temp
   .pr_domain   = &pfkeydomain,
   .pr_protocol = -1,
   .pr_flags    = PR_ATOMIC | PR_ADDR,
-  .pr_output   = (void *) pfkey_output,
+  .pr_output   = pfkey_output,
   .pr_usrreq   = pfkey_usrreq
 };
 
Index: net/raw_usrreq.c
===================================================================
RCS file: /cvs/src/sys/net/raw_usrreq.c,v
retrieving revision 1.28
diff -u -p -r1.28 raw_usrreq.c
--- net/raw_usrreq.c    23 Jan 2017 16:31:24 -0000      1.28
+++ net/raw_usrreq.c    3 Mar 2017 14:45:48 -0000
@@ -139,7 +139,7 @@ raw_usrreq(struct socket *so, int req, s
                        error = ENOTCONN;
                        break;
                }
-               error = (*so->so_proto->pr_output)(m, so);
+               error = (*so->so_proto->pr_output)(m, so, NULL, NULL);
                m = NULL;
                if (nam)
                        rp->rcb_faddr = 0;
Index: net/route.h
===================================================================
RCS file: /cvs/src/sys/net/route.h,v
retrieving revision 1.157
diff -u -p -r1.157 route.h
--- net/route.h 2 Mar 2017 17:09:21 -0000       1.157
+++ net/route.h 3 Mar 2017 14:45:49 -0000
@@ -417,7 +417,8 @@ struct sockaddr_in6;
 struct bfd_config;
 
 void    route_init(void);
-int     route_output(struct mbuf *, ...);
+int     route_output(struct mbuf *, struct socket *, struct sockaddr *,
+           struct mbuf *);
 int     route_usrreq(struct socket *, int, struct mbuf *,
                           struct mbuf *, struct mbuf *, struct proc *);
 void    rt_ifmsg(struct ifnet *);
Index: net/rtsock.c
===================================================================
RCS file: /cvs/src/sys/net/rtsock.c,v
retrieving revision 1.227
diff -u -p -r1.227 rtsock.c
--- net/rtsock.c        3 Mar 2017 14:22:40 -0000       1.227
+++ net/rtsock.c        3 Mar 2017 14:45:49 -0000
@@ -528,7 +528,8 @@ rt_report(struct rtentry *rt, u_char typ
 }
 
 int
-route_output(struct mbuf *m, ...)
+route_output(struct mbuf *m, struct socket *so, struct sockaddr *dstaddr,
+    struct mbuf *control)
 {
        struct rt_msghdr        *rtm = NULL;
        struct rtentry          *rt = NULL;
@@ -536,19 +537,13 @@ route_output(struct mbuf *m, ...)
        int                      plen, len, seq, newgate = 0, error = 0;
        struct ifnet            *ifp = NULL;
        struct ifaddr           *ifa = NULL;
-       struct socket           *so;
        struct rawcb            *rp = NULL;
 #ifdef MPLS
        struct sockaddr_mpls    *psa_mpls;
 #endif
-       va_list                  ap;
        u_int                    tableid;
        u_int8_t                 prio;
        u_char                   vers, type;
-
-       va_start(ap, m);
-       so = va_arg(ap, struct socket *);
-       va_end(ap);
 
        if (m == NULL || ((m->m_len < sizeof(int32_t)) &&
            (m = m_pullup(m, sizeof(int32_t))) == 0))
Index: netinet/ip_var.h
===================================================================
RCS file: /cvs/src/sys/netinet/ip_var.h,v
retrieving revision 1.68
diff -u -p -r1.68 ip_var.h
--- netinet/ip_var.h    1 Feb 2017 20:59:47 -0000       1.68
+++ netinet/ip_var.h    3 Mar 2017 14:45:49 -0000
@@ -253,7 +253,8 @@ void         ip_forward(struct mbuf *, struct i
 int     rip_ctloutput(int, struct socket *, int, int, struct mbuf *);
 void    rip_init(void);
 int     rip_input(struct mbuf **, int *, int);
-int     rip_output(struct mbuf *, ...);
+int     rip_output(struct mbuf *, struct socket *, struct sockaddr *,
+           struct mbuf *);
 int     rip_usrreq(struct socket *,
            int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *);
 
Index: netinet/raw_ip.c
===================================================================
RCS file: /cvs/src/sys/netinet/raw_ip.c,v
retrieving revision 1.95
diff -u -p -r1.95 raw_ip.c
--- netinet/raw_ip.c    1 Feb 2017 20:59:47 -0000       1.95
+++ netinet/raw_ip.c    3 Mar 2017 14:45:49 -0000
@@ -207,19 +207,12 @@ rip_input(struct mbuf **mp, int *offp, i
  * Tack on options user may have setup with control call.
  */
 int
-rip_output(struct mbuf *m, ...)
+rip_output(struct mbuf *m, struct socket *so, struct sockaddr *dstaddr,
+    struct mbuf *control)
 {
-       struct socket *so;
-       u_long dst;
        struct ip *ip;
        struct inpcb *inp;
        int flags, error;
-       va_list ap;
-
-       va_start(ap, m);
-       so = va_arg(ap, struct socket *);
-       dst = va_arg(ap, u_long);
-       va_end(ap);
 
        inp = sotoinpcb(so);
        flags = IP_ALLOWBROADCAST;
@@ -242,7 +235,7 @@ rip_output(struct mbuf *m, ...)
                ip->ip_p = inp->inp_ip.ip_p;
                ip->ip_len = htons(m->m_pkthdr.len);
                ip->ip_src = inp->inp_laddr;
-               ip->ip_dst.s_addr = dst;
+               ip->ip_dst = satosin(dstaddr)->sin_addr;
                ip->ip_ttl = inp->inp_ip.ip_ttl ? inp->inp_ip.ip_ttl : MAXTTL;
        } else {
                if (m->m_pkthdr.len > IP_MAXPACKET) {
@@ -512,25 +505,29 @@ rip_usrreq(struct socket *so, int req, s
         */
        case PRU_SEND:
            {
-               u_int32_t dst;
+               struct sockaddr_in dst;
 
+               memset(&dst, 0, sizeof(dst));
+               dst.sin_family = AF_INET;
+               dst.sin_len = sizeof(dst);
                if (so->so_state & SS_ISCONNECTED) {
                        if (nam) {
                                error = EISCONN;
                                break;
                        }
-                       dst = inp->inp_faddr.s_addr;
+                       dst.sin_addr = inp->inp_faddr;
                } else {
                        if (nam == NULL) {
                                error = ENOTCONN;
                                break;
                        }
-                       dst = mtod(nam, struct sockaddr_in *)->sin_addr.s_addr;
+                       dst.sin_addr =
+                           mtod(nam, struct sockaddr_in *)->sin_addr;
                }
 #ifdef IPSEC
                /* XXX Find an IPsec TDB */
 #endif
-               error = rip_output(m, so, dst);
+               error = rip_output(m, so, sintosa(&dst), NULL);
                m = NULL;
                break;
            }
Index: netinet6/ip6_var.h
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_var.h,v
retrieving revision 1.69
diff -u -p -r1.69 ip6_var.h
--- netinet6/ip6_var.h  28 Feb 2017 09:59:34 -0000      1.69
+++ netinet6/ip6_var.h  3 Mar 2017 14:45:49 -0000
@@ -345,7 +345,8 @@ void        rip6_init(void);
 int    rip6_input(struct mbuf **mp, int *offp, int proto);
 void   rip6_ctlinput(int, struct sockaddr *, u_int, void *);
 int    rip6_ctloutput(int, struct socket *, int, int, struct mbuf *);
-int    rip6_output(struct mbuf *, ...);
+int    rip6_output(struct mbuf *, struct socket *, struct sockaddr *,
+           struct mbuf *);
 int    rip6_usrreq(struct socket *,
            int, struct mbuf *, struct mbuf *, struct mbuf *, struct proc *);
 int    rip6_sysctl(int *, u_int, void *, size_t *, void *, size_t);
Index: netinet6/raw_ip6.c
===================================================================
RCS file: /cvs/src/sys/netinet6/raw_ip6.c,v
retrieving revision 1.106
diff -u -p -r1.106 raw_ip6.c
--- netinet6/raw_ip6.c  9 Feb 2017 15:23:35 -0000       1.106
+++ netinet6/raw_ip6.c  3 Mar 2017 14:45:50 -0000
@@ -317,11 +317,9 @@ rip6_ctlinput(int cmd, struct sockaddr *
  * 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 sockaddr *dstaddr,
+    struct mbuf *control)
 {
-       struct socket *so;
-       struct sockaddr_in6 *dstsock;
-       struct mbuf *control;
        struct in6_addr *dst;
        struct ip6_hdr *ip6;
        struct inpcb *in6p;
@@ -330,21 +328,14 @@ rip6_output(struct mbuf *m, ...)
        struct ip6_pktopts opt, *optp = NULL, *origoptp;
        int type;               /* for ICMPv6 output statistics only */
        int priv = 0;
-       va_list ap;
        int flags;
 
-       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);
-
        in6p = sotoinpcb(so);
 
        priv = 0;
        if ((so->so_state & SS_PRIV) != 0)
                priv = 1;
-       dst = &dstsock->sin6_addr;
+       dst = &satosin6(dstaddr)->sin6_addr;
        if (control) {
                if ((error = ip6_setpktopts(control, &opt,
                    in6p->inp_outputopts6,
@@ -384,7 +375,7 @@ rip6_output(struct mbuf *m, ...)
        /* KAME hack: embed scopeid */
        origoptp = in6p->inp_outputopts6;
        in6p->inp_outputopts6 = optp;
-       if (in6_embedscope(&ip6->ip6_dst, dstsock, in6p) != 0) {
+       if (in6_embedscope(&ip6->ip6_dst, satosin6(dstaddr), in6p) != 0) {
                error = EINVAL;
                goto bad;
        }
@@ -396,7 +387,7 @@ rip6_output(struct mbuf *m, ...)
        {
                struct in6_addr *in6a;
 
-               error = in6_pcbselsrc(&in6a, dstsock, in6p, optp);
+               error = in6_pcbselsrc(&in6a, satosin6(dstaddr), in6p, optp);
                if (error)
                        goto bad;
 
@@ -732,7 +723,7 @@ rip6_usrreq(struct socket *so, int req, 
                                break;
                        }
                }
-               error = rip6_output(m, so, dst, control);
+               error = rip6_output(m, so, sin6tosa(dst), control);
                m = NULL;
                break;
        }
Index: sys/protosw.h
===================================================================
RCS file: /cvs/src/sys/sys/protosw.h,v
retrieving revision 1.22
diff -u -p -r1.22 protosw.h
--- sys/protosw.h       1 Feb 2017 20:59:47 -0000       1.22
+++ sys/protosw.h       3 Mar 2017 14:45:50 -0000
@@ -71,7 +71,8 @@ struct protosw {
                                        /* input to protocol (from below) */
        int     (*pr_input)(struct mbuf **, int *, int);
                                        /* output to protocol (from above) */
-       int     (*pr_output)(struct mbuf *, ...);
+       int     (*pr_output)(struct mbuf *, struct socket *, struct sockaddr *,
+                   struct mbuf *);
                                        /* control input (from below) */
        void    (*pr_ctlinput)(int, struct sockaddr *, u_int, void *);
                                        /* control output (from above) */

Reply via email to