summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/net/if.c8
-rw-r--r--sys/net/if.h9
-rw-r--r--sys/net/if_faith.c6
-rw-r--r--sys/net/if_loop.c6
-rw-r--r--sys/net/route.c132
-rw-r--r--sys/net/route.h8
-rw-r--r--sys/net/rtsock.c33
-rw-r--r--sys/netccitt/if_x25subr.c6
-rw-r--r--sys/netccitt/pk_extern.h5
-rw-r--r--sys/netccitt/pk_llcsubr.c14
-rw-r--r--sys/netccitt/x25.h5
-rw-r--r--sys/netinet/if_atm.c6
-rw-r--r--sys/netinet/if_atm.h4
-rw-r--r--sys/netinet/if_ether.c6
-rw-r--r--sys/netinet/if_ether.h6
-rw-r--r--sys/netinet6/nd6.c10
-rw-r--r--sys/netinet6/nd6.h7
-rw-r--r--sys/netiso/eonvar.h4
-rw-r--r--sys/netiso/if_eon.c9
-rw-r--r--sys/netiso/iso_snpac.c8
-rw-r--r--sys/netiso/iso_var.h4
21 files changed, 203 insertions, 93 deletions
diff --git a/sys/net/if.c b/sys/net/if.c
index 7e9182f3b7d..1ce48e512ad 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if.c,v 1.39 2001/01/17 04:47:18 fgsch Exp $ */
+/* $OpenBSD: if.c,v 1.40 2001/01/19 06:37:36 itojun Exp $ */
/* $NetBSD: if.c,v 1.35 1996/05/07 05:26:04 thorpej Exp $ */
/*
@@ -547,10 +547,10 @@ ifaof_ifpforaddr(addr, ifp)
* This should be moved to /sys/net/link.c eventually.
*/
void
-link_rtrequest(cmd, rt, sa)
+link_rtrequest(cmd, rt, info)
int cmd;
register struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
register struct ifaddr *ifa;
struct sockaddr *dst;
@@ -564,7 +564,7 @@ link_rtrequest(cmd, rt, sa)
rt->rt_ifa = ifa;
ifa->ifa_refcnt++;
if (ifa->ifa_rtrequest && ifa->ifa_rtrequest != link_rtrequest)
- ifa->ifa_rtrequest(cmd, rt, sa);
+ ifa->ifa_rtrequest(cmd, rt, info);
}
}
diff --git a/sys/net/if.h b/sys/net/if.h
index e3d6b878c83..1c6151b355e 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if.h,v 1.20 2000/09/20 13:07:25 art Exp $ */
+/* $OpenBSD: if.h,v 1.21 2001/01/19 06:37:36 itojun Exp $ */
/* $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $ */
/*
@@ -71,6 +71,7 @@ struct rtentry;
struct socket;
struct ether_header;
struct arpcom;
+struct rt_addrinfo;
/*
* Structure defining statistics and other data kept regarding a network
@@ -255,7 +256,7 @@ struct ifaddr {
struct ifnet *ifa_ifp; /* back-pointer to interface */
TAILQ_ENTRY(ifaddr) ifa_list; /* list of addresses for interface */
void (*ifa_rtrequest) /* check or clean routes (+ or -)'d */
- __P((int, struct rtentry *, struct sockaddr *));
+ __P((int, struct rtentry *, struct rt_addrinfo *));
u_int ifa_flags; /* mostly rt_flags for cloning */
u_int ifa_refcnt; /* count of references */
int ifa_metric; /* cost of going out this interface */
@@ -439,11 +440,11 @@ struct ifaddr *ifa_ifwithroute __P((int, struct sockaddr *,
struct sockaddr *));
struct ifaddr *ifaof_ifpforaddr __P((struct sockaddr *, struct ifnet *));
void ifafree __P((struct ifaddr *));
-void link_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void link_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
int loioctl __P((struct ifnet *, u_long, caddr_t));
void loopattach __P((int));
int looutput __P((struct ifnet *,
struct mbuf *, struct sockaddr *, struct rtentry *));
-void lortrequest __P((int, struct rtentry *, struct sockaddr *));
+void lortrequest __P((int, struct rtentry *, struct rt_addrinfo *));
#endif /* _KERNEL */
diff --git a/sys/net/if_faith.c b/sys/net/if_faith.c
index f2d5d2b8fda..6c582a10e6e 100644
--- a/sys/net/if_faith.c
+++ b/sys/net/if_faith.c
@@ -80,7 +80,7 @@
static int faithioctl __P((struct ifnet *, u_long, caddr_t));
int faithoutput __P((struct ifnet *, register struct mbuf *, struct sockaddr *,
register struct rtentry *));
-static void faithrtrequest __P((int, struct rtentry *, struct sockaddr *));
+static void faithrtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
void faithattach __P((int));
@@ -200,10 +200,10 @@ faithoutput(ifp, m, dst, rt)
/* ARGSUSED */
static void
-faithrtrequest(cmd, rt, sa)
+faithrtrequest(cmd, rt, info)
int cmd;
struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
if (rt) {
rt->rt_rmx.rmx_mtu = rt->rt_ifp->if_mtu; /* for ISO */
diff --git a/sys/net/if_loop.c b/sys/net/if_loop.c
index f947e090ed6..c902c6f6692 100644
--- a/sys/net/if_loop.c
+++ b/sys/net/if_loop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_loop.c,v 1.14 2000/06/18 06:24:45 itojun Exp $ */
+/* $OpenBSD: if_loop.c,v 1.15 2001/01/19 06:37:36 itojun Exp $ */
/* $NetBSD: if_loop.c,v 1.15 1996/05/07 02:40:33 thorpej Exp $ */
/*
@@ -281,10 +281,10 @@ looutput(ifp, m, dst, rt)
/* ARGSUSED */
void
-lortrequest(cmd, rt, sa)
+lortrequest(cmd, rt, info)
int cmd;
struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
if (rt)
diff --git a/sys/net/route.c b/sys/net/route.c
index ad7da3038f0..ce604596ca5 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: route.c,v 1.22 2000/12/11 07:52:06 itojun Exp $ */
+/* $OpenBSD: route.c,v 1.23 2001/01/19 06:37:36 itojun Exp $ */
/* $NetBSD: route.c,v 1.14 1996/02/13 22:00:46 christos Exp $ */
/*
@@ -243,6 +243,17 @@ rtalloc1(dst, report)
msgtype = RTM_RESOLVE;
goto miss;
}
+ /* Inform listeners of the new route */
+ bzero(&info, sizeof(info));
+ info.rti_info[RTAX_DST] = rt_key(rt);
+ info.rti_info[RTAX_NETMASK] = rt_mask(rt);
+ info.rti_info[RTAX_GATEWAY] = rt->rt_gateway;
+ if (rt->rt_ifp != NULL) {
+ info.rti_info[RTAX_IFP] =
+ rt->rt_ifp->if_addrlist.tqh_first->ifa_addr;
+ info.rti_info[RTAX_IFA] = rt->rt_ifa->ifa_addr;
+ }
+ rt_missmsg(RTM_ADD, &info, rt->rt_flags, 0);
} else
rt->rt_refcnt++;
} else {
@@ -315,7 +326,7 @@ rtredirect(dst, gateway, netmask, flags, src, rtp)
int flags;
struct rtentry **rtp;
{
- register struct rtentry *rt;
+ struct rtentry *rt;
int error = 0;
u_int32_t *stat = NULL;
struct rt_addrinfo info;
@@ -360,10 +371,18 @@ rtredirect(dst, gateway, netmask, flags, src, rtp)
* Create new route, rather than smashing route to net.
*/
create:
+ if (rt)
+ rtfree(rt);
flags |= RTF_GATEWAY | RTF_DYNAMIC;
- error = rtrequest((int)RTM_ADD, dst, gateway,
- netmask, flags,
- (struct rtentry **)0);
+ info.rti_info[RTAX_DST] = dst;
+ info.rti_info[RTAX_GATEWAY] = gateway;
+ info.rti_info[RTAX_NETMASK] = netmask;
+ info.rti_ifa = ifa;
+ info.rti_flags = flags;
+ rt = NULL;
+ error = rtrequest1(RTM_ADD, &info, &rt);
+ if (rt != NULL)
+ flags = rt->rt_flags;
stat = &rtstat.rts_dynamic;
} else {
/*
@@ -479,6 +498,70 @@ rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
struct sockaddr *dst, *gateway, *netmask;
struct rtentry **ret_nrt;
{
+ struct rt_addrinfo info;
+
+ bzero(&info, sizeof(info));
+ info.rti_flags = flags;
+ info.rti_info[RTAX_DST] = dst;
+ info.rti_info[RTAX_GATEWAY] = gateway;
+ info.rti_info[RTAX_NETMASK] = netmask;
+ return rtrequest1(req, &info, ret_nrt);
+}
+
+/*
+ * These (questionable) definitions of apparent local variables apply
+ * to the next function. XXXXXX!!!
+ */
+#define dst info->rti_info[RTAX_DST]
+#define gateway info->rti_info[RTAX_GATEWAY]
+#define netmask info->rti_info[RTAX_NETMASK]
+#define ifaaddr info->rti_info[RTAX_IFA]
+#define ifpaddr info->rti_info[RTAX_IFP]
+#define flags info->rti_flags
+
+int
+rt_getifa(info)
+ struct rt_addrinfo *info;
+{
+ struct ifaddr *ifa;
+ int error = 0;
+
+ /*
+ * ifp may be specified by sockaddr_dl when protocol address
+ * is ambiguous
+ */
+ if (info->rti_ifp == NULL && ifpaddr != NULL
+ && ifpaddr->sa_family == AF_LINK &&
+ (ifa = ifa_ifwithnet((struct sockaddr *)ifpaddr)) != NULL)
+ info->rti_ifp = ifa->ifa_ifp;
+ if (info->rti_ifa == NULL && ifaaddr != NULL)
+ info->rti_ifa = ifa_ifwithaddr(ifaaddr);
+ if (info->rti_ifa == NULL) {
+ struct sockaddr *sa;
+
+ sa = ifaaddr != NULL ? ifaaddr :
+ (gateway != NULL ? gateway : dst);
+ if (sa != NULL && info->rti_ifp != NULL)
+ info->rti_ifa = ifaof_ifpforaddr(sa, info->rti_ifp);
+ else if (dst != NULL && gateway != NULL)
+ info->rti_ifa = ifa_ifwithroute(flags, dst, gateway);
+ else if (sa != NULL)
+ info->rti_ifa = ifa_ifwithroute(flags, sa, sa);
+ }
+ if ((ifa = info->rti_ifa) != NULL) {
+ if (info->rti_ifp == NULL)
+ info->rti_ifp = ifa->ifa_ifp;
+ } else
+ error = ENETUNREACH;
+ return (error);
+}
+
+int
+rtrequest1(req, info, ret_nrt)
+ int req;
+ struct rt_addrinfo *info;
+ struct rtentry **ret_nrt;
+{
int s = splsoftnet(); int error = 0;
register struct rtentry *rt;
register struct radix_node *rn;
@@ -504,7 +587,7 @@ rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
}
rt->rt_flags &= ~RTF_UP;
if ((ifa = rt->rt_ifa) && ifa->ifa_rtrequest)
- ifa->ifa_rtrequest(RTM_DELETE, rt, SA(NULL));
+ ifa->ifa_rtrequest(RTM_DELETE, rt, info);
rttrash++;
if (ret_nrt)
*ret_nrt = rt;
@@ -525,8 +608,9 @@ rtrequest(req, dst, gateway, netmask, flags, ret_nrt)
goto makeroute;
case RTM_ADD:
- if ((ifa = ifa_ifwithroute(flags, dst, gateway)) == NULL)
- senderr(ENETUNREACH);
+ if (info->rti_ifa == 0 && (error = rt_getifa(info)))
+ senderr(error);
+ ifa = info->rti_ifa;
makeroute:
R_Malloc(rt, struct rtentry *, sizeof(*rt));
if (rt == NULL)
@@ -567,7 +651,7 @@ if (!rt->rt_rmx.rmx_mtu && !(rt->rt_rmx.rmx_locks & RTV_MTU)) { /* XXX */
rt->rt_parent = *ret_nrt; /* Back ptr. to parent. */
}
if (ifa->ifa_rtrequest)
- ifa->ifa_rtrequest(req, rt, SA(ret_nrt ? *ret_nrt : NULL));
+ ifa->ifa_rtrequest(req, rt, info);
if (ret_nrt) {
*ret_nrt = rt;
rt->rt_refcnt++;
@@ -579,6 +663,13 @@ bad:
return (error);
}
+#undef dst
+#undef gateway
+#undef netmask
+#undef ifaaddr
+#undef ifpaddr
+#undef flags
+
int
rt_setgate(rt0, dst, gate)
struct rtentry *rt0;
@@ -650,6 +741,7 @@ rtinit(ifa, cmd, flags)
struct mbuf *m = NULL;
struct rtentry *nrt = NULL;
int error;
+ struct rt_addrinfo info;
dst = flags & RTF_HOST ? ifa->ifa_dstaddr : ifa->ifa_addr;
if (cmd == RTM_DELETE) {
@@ -671,10 +763,19 @@ rtinit(ifa, cmd, flags)
}
}
}
- error = rtrequest(cmd, dst, ifa->ifa_addr, ifa->ifa_netmask,
- flags | ifa->ifa_flags, &nrt);
- if (m != NULL)
- (void) m_free(m);
+ bzero(&info, sizeof(info));
+ info.rti_ifa = ifa;
+ info.rti_flags = flags | ifa->ifa_flags;
+ info.rti_info[RTAX_DST] = dst;
+ info.rti_info[RTAX_GATEWAY] = ifa->ifa_addr;
+ /*
+ * XXX here, it seems that we are assuming that ifa_netmask is NULL
+ * for RTF_HOST. bsdi4 passes NULL explicitly (via intermediate
+ * variable) when RTF_HOST is 1. still not sure if i can safely
+ * change it to meet bsdi4 behavior.
+ */
+ info.rti_info[RTAX_NETMASK] = ifa->ifa_netmask;
+ error = rtrequest1(cmd, &info, &nrt);
if (cmd == RTM_DELETE && error == 0 && (rt = nrt) != NULL) {
rt_newaddrmsg(cmd, ifa, error, nrt);
if (rt->rt_refcnt <= 0) {
@@ -694,15 +795,14 @@ rtinit(ifa, cmd, flags)
printf("rtinit: wrong ifa (%p) was (%p)\n",
ifa, rt->rt_ifa);
if (rt->rt_ifa->ifa_rtrequest)
- rt->rt_ifa->ifa_rtrequest(RTM_DELETE, rt,
- SA(NULL));
+ rt->rt_ifa->ifa_rtrequest(RTM_DELETE, rt, NULL);
IFAFREE(rt->rt_ifa);
rt->rt_ifa = ifa;
rt->rt_ifp = ifa->ifa_ifp;
rt->rt_rmx.rmx_mtu = ifa->ifa_ifp->if_mtu; /*XXX*/
ifa->ifa_refcnt++;
if (ifa->ifa_rtrequest)
- ifa->ifa_rtrequest(RTM_ADD, rt, SA(NULL));
+ ifa->ifa_rtrequest(RTM_ADD, rt, NULL);
}
rt_newaddrmsg(cmd, ifa, error, nrt);
}
diff --git a/sys/net/route.h b/sys/net/route.h
index 43850470ff3..de946b154c2 100644
--- a/sys/net/route.h
+++ b/sys/net/route.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: route.h,v 1.10 2000/12/09 03:15:25 itojun Exp $ */
+/* $OpenBSD: route.h,v 1.11 2001/01/19 06:37:36 itojun Exp $ */
/* $NetBSD: route.h,v 1.9 1996/02/13 22:00:49 christos Exp $ */
/*
@@ -229,6 +229,10 @@ struct rt_msghdr {
struct rt_addrinfo {
int rti_addrs;
struct sockaddr *rti_info[RTAX_MAX];
+ int rti_flags;
+ struct ifaddr *rti_ifa;
+ struct ifnet *rti_ifp;
+ struct rt_msghdr *rti_rtm;
};
struct route_cb {
@@ -313,6 +317,7 @@ void rtalloc_noclone __P((struct route *, int));
struct rtentry *
rtalloc2 __P((struct sockaddr *, int, int));
void rtfree __P((struct rtentry *));
+int rt_getifa __P((struct rt_addrinfo *));
int rtinit __P((struct ifaddr *, int, int));
int rtioctl __P((u_long, caddr_t, struct proc *));
void rtredirect __P((struct sockaddr *, struct sockaddr *,
@@ -321,4 +326,5 @@ void rtredirect __P((struct sockaddr *, struct sockaddr *,
int rtrequest __P((int, struct sockaddr *,
struct sockaddr *, struct sockaddr *, int,
struct rtentry **));
+int rtrequest1 __P((int, struct rt_addrinfo *, struct rtentry **));
#endif /* _KERNEL */
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 06ed7be19a4..84cf734dd49 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rtsock.c,v 1.12 2000/12/13 21:58:11 provos Exp $ */
+/* $OpenBSD: rtsock.c,v 1.13 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: rtsock.c,v 1.18 1996/03/29 00:32:10 cgd Exp $ */
/*
@@ -201,7 +201,6 @@ route_output(m, va_alist)
so = va_arg(ap, struct socket *);
va_end(ap);
- bzero(&info, sizeof(info));
#define senderr(e) do { error = e; goto flush;} while (0)
if (m == 0 || ((m->m_len < sizeof(int32_t)) &&
(m = m_pullup(m, sizeof(int32_t))) == 0))
@@ -225,9 +224,13 @@ route_output(m, va_alist)
senderr(EPROTONOSUPPORT);
}
rtm->rtm_pid = curproc->p_pid;
+ bzero(&info, sizeof(info));
info.rti_addrs = rtm->rtm_addrs;
rt_xaddrs((caddr_t)(rtm + 1), len + (caddr_t)rtm, &info);
- if (dst == 0)
+ info.rti_flags = rtm->rtm_flags;
+ if (dst == 0 || (dst->sa_family >= AF_MAX))
+ senderr(EINVAL);
+ if (gate != 0 && (gate->sa_family >= AF_MAX))
senderr(EINVAL);
if (genmask) {
struct radix_node *t;
@@ -248,8 +251,7 @@ route_output(m, va_alist)
switch (rtm->rtm_type) {
case RTM_DELETE:
- error = rtrequest(RTM_DELETE, dst, gate, netmask,
- rtm->rtm_flags, &saved_nrt);
+ error = rtrequest1(rtm->rtm_type, &info, &saved_nrt);
if (error == 0) {
(rt = saved_nrt)->rt_refcnt++;
goto report;
@@ -259,8 +261,7 @@ route_output(m, va_alist)
case RTM_ADD:
if (gate == 0)
senderr(EINVAL);
- error = rtrequest(RTM_ADD, dst, gate, netmask,
- rtm->rtm_flags, &saved_nrt);
+ error = rtrequest1(rtm->rtm_type, &info, &saved_nrt);
if (error == 0 && saved_nrt) {
rt_setmetrics(rtm->rtm_inits,
&rtm->rtm_rmx, &saved_nrt->rt_rmx);
@@ -301,7 +302,7 @@ route_output(m, va_alist)
} else {
ifpaddr = 0;
ifaaddr = 0;
- }
+ }
}
len = rt_msg2(rtm->rtm_type, &info, (caddr_t)0,
(struct walkarg *)0);
@@ -321,11 +322,15 @@ route_output(m, va_alist)
break;
case RTM_CHANGE:
+ /*
+ * new gateway could require new ifaddr, ifp;
+ * flags may also be different; ifp may be specified
+ * by ll sockaddr when protocol address is ambiguous
+ */
+ if ((error = rt_getifa(&info)) != 0)
+ senderr(error);
if (gate && rt_setgate(rt, rt_key(rt), gate))
senderr(EDQUOT);
- /* new gateway could require new ifaddr, ifp;
- flags may also be different; ifp may be specified
- by ll sockaddr when protocol address is ambiguous */
if (ifpaddr && (ifa = ifa_ifwithnet(ifpaddr)) &&
(ifp = ifa->ifa_ifp) && (ifaaddr || gate))
ifa = ifaof_ifpforaddr(ifaaddr ? ifaaddr : gate,
@@ -338,8 +343,8 @@ route_output(m, va_alist)
register struct ifaddr *oifa = rt->rt_ifa;
if (oifa != ifa) {
if (oifa && oifa->ifa_rtrequest)
- oifa->ifa_rtrequest(RTM_DELETE,
- rt, gate);
+ oifa->ifa_rtrequest(RTM_DELETE, rt,
+ &info);
IFAFREE(rt->rt_ifa);
rt->rt_ifa = ifa;
ifa->ifa_refcnt++;
@@ -349,7 +354,7 @@ route_output(m, va_alist)
rt_setmetrics(rtm->rtm_inits, &rtm->rtm_rmx,
&rt->rt_rmx);
if (rt->rt_ifa && rt->rt_ifa->ifa_rtrequest)
- rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, gate);
+ rt->rt_ifa->ifa_rtrequest(RTM_ADD, rt, &info);
if (genmask)
rt->rt_genmask = genmask;
/*
diff --git a/sys/netccitt/if_x25subr.c b/sys/netccitt/if_x25subr.c
index 1fc7118691f..ee98166ec74 100644
--- a/sys/netccitt/if_x25subr.c
+++ b/sys/netccitt/if_x25subr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_x25subr.c,v 1.4 1999/12/08 06:50:18 itojun Exp $ */
+/* $OpenBSD: if_x25subr.c,v 1.5 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: if_x25subr.c,v 1.13 1996/05/09 22:29:25 scottr Exp $ */
/*
@@ -442,10 +442,10 @@ x25_iftimeout(ifp)
* or deletions of old ones.
*/
void
-x25_rtrequest(cmd, rt, dst)
+x25_rtrequest(cmd, rt, info)
int cmd;
register struct rtentry *rt;
- struct sockaddr *dst;
+ struct rt_addrinfo *info;
{
register struct llinfo_x25 *lx = (struct llinfo_x25 *) rt->rt_llinfo;
register struct pklcd *lcp;
diff --git a/sys/netccitt/pk_extern.h b/sys/netccitt/pk_extern.h
index 42c13c6260e..4de391d3a66 100644
--- a/sys/netccitt/pk_extern.h
+++ b/sys/netccitt/pk_extern.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: pk_extern.h,v 1.2 1996/04/19 16:10:07 niklas Exp $ */
+/* $OpenBSD: pk_extern.h,v 1.3 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: pk_extern.h,v 1.1 1996/02/13 22:05:17 christos Exp $ */
/*
@@ -39,6 +39,7 @@ struct x25_packet;
struct llc_linkcb;
struct bcdinfo;
struct sockaddr_dl;
+struct rt_addrinfo;
/* pk_acct.c */
int pk_accton __P((char *));
@@ -64,7 +65,7 @@ void pk_call_accepted __P((struct pklcd *, struct mbuf *));
void pk_parse_facilities __P((octet *, struct sockaddr_x25 *));
/* pk_llcsubr.c */
-void cons_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void cons_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
struct rtentry *npaidb_enter __P((struct sockaddr_dl *, struct sockaddr *,
struct rtentry *, struct llc_linkcb *));
struct rtentry *npaidb_enrich __P((short, caddr_t, struct sockaddr_dl *));
diff --git a/sys/netccitt/pk_llcsubr.c b/sys/netccitt/pk_llcsubr.c
index 8ff6bdb9cf8..2becb73d7fc 100644
--- a/sys/netccitt/pk_llcsubr.c
+++ b/sys/netccitt/pk_llcsubr.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: pk_llcsubr.c,v 1.3 1996/04/19 16:10:09 niklas Exp $ */
+/* $OpenBSD: pk_llcsubr.c,v 1.4 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: pk_llcsubr.c,v 1.4 1996/02/13 22:05:26 christos Exp $ */
/*
@@ -127,27 +127,27 @@
#define SA(s) ((struct sockaddr *)s)
static int cons_rtrequest_internal __P((int, struct rtentry *,
- struct sockaddr *));
+ struct rt_addrinfo *));
/*
* ifa_rtrequest currently does not check the error from the rtrequest call
* so we use a void version of the cons_rtrequest routine.
*/
void
-cons_rtrequest(cmd, rt, dst)
+cons_rtrequest(cmd, rt, info)
int cmd;
struct rtentry *rt;
- struct sockaddr *dst;
+ struct rt_addrinfo *info;
{
- cons_rtrequest_internal(cmd, rt, dst);
+ cons_rtrequest_internal(cmd, rt, info);
}
static int
-cons_rtrequest_internal(cmd, rt, dst)
+cons_rtrequest_internal(cmd, rt, info)
int cmd;
struct rtentry *rt;
- struct sockaddr *dst;
+ struct rt_addrinfo *info;
{
register struct pkcb *pkp;
register char one_to_one;
diff --git a/sys/netccitt/x25.h b/sys/netccitt/x25.h
index b1aa563b7ab..99b2518823b 100644
--- a/sys/netccitt/x25.h
+++ b/sys/netccitt/x25.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: x25.h,v 1.2 1996/03/04 07:36:49 niklas Exp $ */
+/* $OpenBSD: x25.h,v 1.3 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: x25.h,v 1.7 1996/02/13 22:05:51 christos Exp $ */
/*
@@ -166,6 +166,7 @@ struct sockaddr_in;
struct x25_ifaddr;
struct ifnet;
struct rtentry;
+struct rt_addrinfo;
void x25_lxfree __P((struct llinfo_x25 *));
int x25_ifinput __P((struct mbuf *, void *));
@@ -173,7 +174,7 @@ int x25_connect_callback __P((struct mbuf *, void *));
int x25_dgram_incoming __P((struct mbuf *, void *));
int x25_ifoutput __P((struct ifnet *, struct mbuf *, struct sockaddr *, struct rtentry *));
void x25_iftimeout __P((struct ifnet *));
-void x25_rtrequest __P((int , struct rtentry *, struct sockaddr *));
+void x25_rtrequest __P((int , struct rtentry *, struct rt_addrinfo *));
void x25_rtinvert __P((int , struct sockaddr *, struct rtentry *));
void x25_ddnip_to_ccitt __P((struct sockaddr *, struct rtentry *));
void x25_dg_rtinit __P((struct sockaddr_x25 *, struct x25_ifaddr *, int ));
diff --git a/sys/netinet/if_atm.c b/sys/netinet/if_atm.c
index a8022fabcf0..aec9db09c58 100644
--- a/sys/netinet/if_atm.c
+++ b/sys/netinet/if_atm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_atm.c,v 1.7 1999/12/08 06:50:18 itojun Exp $ */
+/* $OpenBSD: if_atm.c,v 1.8 2001/01/19 06:37:37 itojun Exp $ */
/*
*
@@ -76,10 +76,10 @@
*/
void
-atm_rtrequest(req, rt, sa)
+atm_rtrequest(req, rt, info)
int req;
register struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
register struct sockaddr *gate = rt->rt_gateway;
struct atm_pseudoioctl api;
diff --git a/sys/netinet/if_atm.h b/sys/netinet/if_atm.h
index d725e44b098..15f1e41938e 100644
--- a/sys/netinet/if_atm.h
+++ b/sys/netinet/if_atm.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_atm.h,v 1.3 1996/07/03 17:14:32 chuck Exp $ */
+/* $OpenBSD: if_atm.h,v 1.4 2001/01/19 06:37:37 itojun Exp $ */
/*
*
@@ -36,6 +36,6 @@
* if_atm.h
*/
-void atm_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void atm_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
int atmresolve __P((struct rtentry *, struct mbuf *, struct sockaddr *,
struct atm_pseudohdr *));
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index e6ed1fce0d8..cf7f2246a23 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ether.c,v 1.25 2000/12/28 23:56:47 mickey Exp $ */
+/* $OpenBSD: if_ether.c,v 1.26 2001/01/19 06:37:37 itojun Exp $ */
/* $NetBSD: if_ether.c,v 1.31 1996/05/11 12:59:58 mycroft Exp $ */
/*
@@ -138,10 +138,10 @@ arptimer(arg)
* Parallel to llc_rtrequest.
*/
void
-arp_rtrequest(req, rt, sa)
+arp_rtrequest(req, rt, info)
int req;
register struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
register struct sockaddr *gate = rt->rt_gateway;
register struct llinfo_arp *la = (struct llinfo_arp *)rt->rt_llinfo;
diff --git a/sys/netinet/if_ether.h b/sys/netinet/if_ether.h
index e6189417ad1..428aebb2db1 100644
--- a/sys/netinet/if_ether.h
+++ b/sys/netinet/if_ether.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ether.h,v 1.13 2000/12/28 23:56:47 mickey Exp $ */
+/* $OpenBSD: if_ether.h,v 1.14 2001/01/19 06:37:38 itojun Exp $ */
/* $NetBSD: if_ether.h,v 1.22 1996/05/11 13:00:00 mycroft Exp $ */
/*
@@ -199,7 +199,7 @@ void arpintr __P((void));
int arpresolve __P((struct arpcom *,
struct rtentry *, struct mbuf *, struct sockaddr *, u_char *));
void arp_ifinit __P((struct arpcom *, struct ifaddr *));
-void arp_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void arp_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
int ether_addmulti __P((struct ifreq *, struct arpcom *));
int ether_delmulti __P((struct ifreq *, struct arpcom *));
@@ -275,7 +275,7 @@ struct ether_multistep {
extern struct ifnet *myip_ifp;
-void arp_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void arp_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
int arpresolve __P((struct arpcom *, struct rtentry *, struct mbuf *,
struct sockaddr *, u_char *));
void arpintr __P((void));
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index bef280d7480..1ea4937f690 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: nd6.c,v 1.19 2000/10/15 15:55:03 itojun Exp $ */
+/* $OpenBSD: nd6.c,v 1.20 2001/01/19 06:37:38 itojun Exp $ */
/* $KAME: nd6.c,v 1.75 2000/10/15 15:23:11 itojun Exp $ */
/*
@@ -1013,10 +1013,10 @@ nd6_resolve(ifp, rt, m, dst, desten)
#endif /* OLDIP6OUTPUT */
void
-nd6_rtrequest(req, rt, sa)
+nd6_rtrequest(req, rt, info)
int req;
struct rtentry *rt;
- struct sockaddr *sa; /* xxx unused */
+ struct rt_addrinfo *info; /* xxx unused */
{
struct sockaddr *gate = rt->rt_gateway;
struct llinfo_nd6 *ln = (struct llinfo_nd6 *)rt->rt_llinfo;
@@ -1235,10 +1235,10 @@ nd6_rtrequest(req, rt, sa)
}
void
-nd6_p2p_rtrequest(req, rt, sa)
+nd6_p2p_rtrequest(req, rt, info)
int req;
struct rtentry *rt;
- struct sockaddr *sa; /* xxx unused */
+ struct rt_addrinfo *info; /* xxx unused */
{
struct sockaddr *gate = rt->rt_gateway;
static struct sockaddr_dl null_sdl = {sizeof(null_sdl), AF_LINK};
diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h
index 340f4c3f50e..3e44d94db02 100644
--- a/sys/netinet6/nd6.h
+++ b/sys/netinet6/nd6.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: nd6.h,v 1.8 2000/07/06 10:11:26 itojun Exp $ */
+/* $OpenBSD: nd6.h,v 1.9 2001/01/19 06:37:38 itojun Exp $ */
/* $KAME: nd6.h,v 1.23 2000/06/04 12:54:57 itojun Exp $ */
/*
@@ -282,13 +282,8 @@ void nd6_free __P((struct rtentry *));
void nd6_nud_hint __P((struct rtentry *, struct in6_addr *, int));
int nd6_resolve __P((struct ifnet *, struct rtentry *,
struct mbuf *, struct sockaddr *, u_char *));
-#if defined(__bsdi__) && _BSDI_VERSION >= 199802
void nd6_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
void nd6_p2p_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
-#else
-void nd6_rtrequest __P((int, struct rtentry *, struct sockaddr *));
-void nd6_p2p_rtrequest __P((int, struct rtentry *, struct sockaddr *));
-#endif
int nd6_ioctl __P((u_long, caddr_t, struct ifnet *));
struct rtentry *nd6_cache_lladdr __P((struct ifnet *, struct in6_addr *,
char *, int, int, int));
diff --git a/sys/netiso/eonvar.h b/sys/netiso/eonvar.h
index 2d0aadd4745..412d9180629 100644
--- a/sys/netiso/eonvar.h
+++ b/sys/netiso/eonvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: eonvar.h,v 1.2 1996/03/04 10:35:13 mickey Exp $ */
+/* $OpenBSD: eonvar.h,v 1.3 2001/01/19 06:37:38 itojun Exp $ */
/* $NetBSD: eonvar.h,v 1.6 1996/02/13 22:09:18 christos Exp $ */
/*-
@@ -178,7 +178,7 @@ void eonprotoinit __P((void));
void eonattach __P((void));
int eonioctl __P((struct ifnet *, u_long, caddr_t));
void eoniphdr __P((struct eon_iphdr *, caddr_t, struct route *, int, int));
-void eonrtrequest __P((int, struct rtentry *, struct sockaddr *));
+void eonrtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
int eonoutput __P((struct ifnet *, struct mbuf *, struct sockaddr *,
struct rtentry *));
void eoninput __P((struct mbuf *, ...));
diff --git a/sys/netiso/if_eon.c b/sys/netiso/if_eon.c
index 62093ae1a35..1d6a16a1fde 100644
--- a/sys/netiso/if_eon.c
+++ b/sys/netiso/if_eon.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_eon.c,v 1.7 1999/12/08 06:50:24 itojun Exp $ */
+/* $OpenBSD: if_eon.c,v 1.8 2001/01/19 06:37:38 itojun Exp $ */
/* $NetBSD: if_eon.c,v 1.15 1996/05/09 22:29:37 scottr Exp $ */
/*-
@@ -273,14 +273,15 @@ eoniphdr(hdr, loc, ro, class, zero)
* RETURNS: nothing
*/
void
-eonrtrequest(cmd, rt, gate)
+eonrtrequest(cmd, rt, info)
int cmd;
register struct rtentry *rt;
- register struct sockaddr *gate;
+ register struct rt_addrinfo *info;
{
unsigned long zerodst = 0;
caddr_t ipaddrloc = (caddr_t) & zerodst;
register struct eon_llinfo *el = (struct eon_llinfo *) rt->rt_llinfo;
+ struct sockaddr *gate;
/*
* Common Housekeeping
@@ -308,7 +309,7 @@ eonrtrequest(cmd, rt, gate)
el->el_rt = rt;
break;
}
- if (gate || (gate = rt->rt_gateway))
+ if (info || (gate = info->rti_info[RTAX_GATEWAY])) /*XXX*/
switch (gate->sa_family) {
case AF_LINK:
#define SDL(x) ((struct sockaddr_dl *)x)
diff --git a/sys/netiso/iso_snpac.c b/sys/netiso/iso_snpac.c
index 09cb450df73..ce97a40a6bd 100644
--- a/sys/netiso/iso_snpac.c
+++ b/sys/netiso/iso_snpac.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: iso_snpac.c,v 1.5 1998/04/04 02:55:55 don Exp $ */
+/* $OpenBSD: iso_snpac.c,v 1.6 2001/01/19 06:37:38 itojun Exp $ */
/* $NetBSD: iso_snpac.c,v 1.13 1996/05/07 02:45:16 thorpej Exp $ */
/*-
@@ -162,10 +162,10 @@ union sockunion {
* NOTES: This does a lot of obscure magic;
*/
void
-llc_rtrequest(req, rt, sa)
+llc_rtrequest(req, rt, info)
int req;
register struct rtentry *rt;
- struct sockaddr *sa;
+ struct rt_addrinfo *info;
{
register union sockunion *gate = (union sockunion *) rt->rt_gateway;
register struct llinfo_llc *lc = (struct llinfo_llc *) rt->rt_llinfo;
@@ -175,7 +175,7 @@ llc_rtrequest(req, rt, sa)
#ifdef ARGO_DEBUG
if (argo_debug[D_SNPA]) {
- printf("llc_rtrequest(%d, %p, %p)\n", req, rt, sa);
+ printf("llc_rtrequest(%d, %p, %p)\n", req, rt, info);
}
#endif
if (rt->rt_flags & RTF_GATEWAY)
diff --git a/sys/netiso/iso_var.h b/sys/netiso/iso_var.h
index fe533687f6b..22bd2ef39fc 100644
--- a/sys/netiso/iso_var.h
+++ b/sys/netiso/iso_var.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: iso_var.h,v 1.2 1996/03/04 10:35:43 mickey Exp $ */
+/* $OpenBSD: iso_var.h,v 1.3 2001/01/19 06:37:38 itojun Exp $ */
/* $NetBSD: iso_var.h,v 1.8 1996/02/13 22:10:32 christos Exp $ */
/*-
@@ -160,7 +160,7 @@ int m_datalen __P((struct mbuf *));
int m_compress __P((struct mbuf *, struct mbuf **));
/* iso_snpac.c */
-void llc_rtrequest __P((int, struct rtentry *, struct sockaddr *));
+void llc_rtrequest __P((int, struct rtentry *, struct rt_addrinfo *));
void iso_setmcasts __P((struct ifnet *, int));
int iso_snparesolve __P((struct ifnet *, struct sockaddr_iso *,
caddr_t, int *));