summaryrefslogtreecommitdiff
path: root/sys/net/rtsock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/net/rtsock.c')
-rw-r--r--sys/net/rtsock.c74
1 files changed, 48 insertions, 26 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 79e6921cb5e..09e1969ffd6 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1,4 +1,5 @@
-/* $NetBSD: rtsock.c,v 1.16 1995/08/19 07:48:14 cgd Exp $ */
+/* $OpenBSD: rtsock.c,v 1.2 1996/03/03 21:07:21 niklas Exp $ */
+/* $NetBSD: rtsock.c,v 1.17 1996/02/13 22:00:52 christos Exp $ */
/*
* Copyright (c) 1988, 1991, 1993
@@ -44,10 +45,15 @@
#include <sys/domain.h>
#include <sys/protosw.h>
+#include <vm/vm.h>
+#include <sys/sysctl.h>
+
#include <net/if.h>
#include <net/route.h>
#include <net/raw_cb.h>
+#include <machine/stdarg.h>
+
struct sockaddr route_dst = { 2, PF_ROUTE, };
struct sockaddr route_src = { 2, PF_ROUTE, };
struct sockproto route_proto = { PF_ROUTE, };
@@ -85,8 +91,8 @@ route_usrreq(so, req, m, nam, control)
if (req == PRU_ATTACH) {
MALLOC(rp, struct rawcb *, sizeof(*rp), M_PCB, M_WAITOK);
- if (so->so_pcb = rp)
- bzero((caddr_t)so->so_pcb, sizeof(*rp));
+ if ((so->so_pcb = rp) != NULL)
+ bzero(so->so_pcb, sizeof(*rp));
}
if (req == PRU_DETACH && rp) {
@@ -126,9 +132,13 @@ route_usrreq(so, req, m, nam, control)
/*ARGSUSED*/
int
-route_output(m, so)
- register struct mbuf *m;
- struct socket *so;
+#if __STDC__
+route_output(struct mbuf *m, ...)
+#else
+route_output(m, va_alist)
+ struct mbuf *m;
+ va_dcl
+#endif
{
register struct rt_msghdr *rtm = 0;
register struct rtentry *rt = 0;
@@ -138,6 +148,13 @@ route_output(m, so)
int len, error = 0;
struct ifnet *ifp = 0;
struct ifaddr *ifa = 0;
+ struct socket *so;
+ va_list ap;
+
+ va_start(ap, m);
+ so = va_arg(ap, struct socket *);
+ va_end(ap);
+
#define senderr(e) { error = e; goto flush;}
if (m == 0 || ((m->m_len < sizeof(int32_t)) &&
@@ -203,8 +220,8 @@ route_output(m, so)
case RTM_LOCK:
if ((rnh = rt_tables[dst->sa_family]) == 0) {
senderr(EAFNOSUPPORT);
- } else if (rt = (struct rtentry *)
- rnh->rnh_lookup(dst, netmask, rnh))
+ } else if ((rt = (struct rtentry *)
+ rnh->rnh_lookup(dst, netmask, rnh)) != NULL)
rt->rt_refcnt++;
else
senderr(ESRCH);
@@ -217,7 +234,7 @@ route_output(m, so)
netmask = rt_mask(rt);
genmask = rt->rt_genmask;
if (rtm->rtm_addrs & (RTA_IFP | RTA_IFA)) {
- if (ifp = rt->rt_ifp) {
+ if ((ifp = rt->rt_ifp) != NULL) {
ifpaddr = ifp->if_addrlist.tqh_first->ifa_addr;
ifaaddr = rt->rt_ifa->ifa_addr;
if (ifp->if_flags & IFF_POINTOPOINT)
@@ -503,7 +520,7 @@ again:
default:
len = sizeof(struct rt_msghdr);
}
- if (cp0 = cp)
+ if ((cp0 = cp) != NULL)
cp += len;
for (i = 0; i < RTAX_MAX; i++) {
register struct sockaddr *sa;
@@ -526,8 +543,9 @@ again:
if (rw->w_tmemsize < len) {
if (rw->w_tmem)
free(rw->w_tmem, M_RTABLE);
- if (rw->w_tmem = (caddr_t)
- malloc(len, M_RTABLE, M_NOWAIT))
+ rw->w_tmem = (caddr_t) malloc(len, M_RTABLE,
+ M_NOWAIT);
+ if (rw->w_tmem)
rw->w_tmemsize = len;
}
if (rw->w_tmem) {
@@ -618,9 +636,9 @@ rt_newaddrmsg(cmd, ifa, error, rt)
register struct rtentry *rt;
{
struct rt_addrinfo info;
- struct sockaddr *sa;
+ struct sockaddr *sa = NULL;
int pass;
- struct mbuf *m;
+ struct mbuf *m = NULL;
struct ifnet *ifp = ifa->ifa_ifp;
if (route_cb.any_count == 0)
@@ -670,10 +688,11 @@ rt_newaddrmsg(cmd, ifa, error, rt)
* This is used in dumping the kernel table via sysctl().
*/
int
-sysctl_dumpentry(rn, w)
+sysctl_dumpentry(rn, v)
struct radix_node *rn;
- register struct walkarg *w;
+ register void *v;
{
+ register struct walkarg *w = v;
register struct rtentry *rt = (struct rtentry *)rn;
int error = 0, size;
struct rt_addrinfo info;
@@ -701,7 +720,7 @@ sysctl_dumpentry(rn, w)
rtm->rtm_index = rt->rt_ifp->if_index;
rtm->rtm_errno = rtm->rtm_pid = rtm->rtm_seq = 0;
rtm->rtm_addrs = info.rti_addrs;
- if (error = copyout((caddr_t)rtm, w->w_where, size))
+ if ((error = copyout((caddr_t)rtm, w->w_where, size)) != 0)
w->w_where = NULL;
else
w->w_where += size;
@@ -735,11 +754,12 @@ sysctl_iflist(af, w)
ifm->ifm_flags = ifp->if_flags;
ifm->ifm_data = ifp->if_data;
ifm->ifm_addrs = info.rti_addrs;
- if (error = copyout((caddr_t)ifm, w->w_where, len))
+ error = copyout((caddr_t)ifm, w->w_where, len);
+ if (error)
return (error);
w->w_where += len;
}
- while (ifa = ifa->ifa_list.tqe_next) {
+ while ((ifa = ifa->ifa_list.tqe_next) != NULL) {
if (af && af != ifa->ifa_addr->sa_family)
continue;
ifaaddr = ifa->ifa_addr;
@@ -754,7 +774,8 @@ sysctl_iflist(af, w)
ifam->ifam_flags = ifa->ifa_flags;
ifam->ifam_metric = ifa->ifa_metric;
ifam->ifam_addrs = info.rti_addrs;
- if (error = copyout(w->w_tmem, w->w_where, len))
+ error = copyout(w->w_tmem, w->w_where, len);
+ if (error)
return (error);
w->w_where += len;
}
@@ -767,10 +788,10 @@ sysctl_iflist(af, w)
int
sysctl_rtable(name, namelen, where, given, new, newlen)
int *name;
- int namelen;
- caddr_t where;
+ u_int namelen;
+ void *where;
size_t *given;
- caddr_t *new;
+ void *new;
size_t newlen;
{
register struct radix_node_head *rnh;
@@ -797,8 +818,9 @@ sysctl_rtable(name, namelen, where, given, new, newlen)
case NET_RT_FLAGS:
for (i = 1; i <= AF_MAX; i++)
if ((rnh = rt_tables[i]) && (af == 0 || af == i) &&
- (error = rnh->rnh_walktree(rnh,
- sysctl_dumpentry, &w)))
+ (error = (*rnh->rnh_walktree)(rnh,
+ sysctl_dumpentry,
+ &w)))
break;
break;
@@ -810,7 +832,7 @@ sysctl_rtable(name, namelen, where, given, new, newlen)
free(w.w_tmem, M_RTABLE);
w.w_needed += w.w_given;
if (where) {
- *given = w.w_where - where;
+ *given = w.w_where - (caddr_t) where;
if (*given < w.w_needed)
return (ENOMEM);
} else {