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