Much easier to read as well.  OK

On Fri, Mar 03, 2017 at 03:49:08PM +0100, Alexander Bluhm wrote:
> 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