diff options
-rw-r--r-- | sys/net/if.c | 8 | ||||
-rw-r--r-- | sys/net/if.h | 9 | ||||
-rw-r--r-- | sys/net/if_faith.c | 6 | ||||
-rw-r--r-- | sys/net/if_loop.c | 6 | ||||
-rw-r--r-- | sys/net/route.c | 132 | ||||
-rw-r--r-- | sys/net/route.h | 8 | ||||
-rw-r--r-- | sys/net/rtsock.c | 33 | ||||
-rw-r--r-- | sys/netccitt/if_x25subr.c | 6 | ||||
-rw-r--r-- | sys/netccitt/pk_extern.h | 5 | ||||
-rw-r--r-- | sys/netccitt/pk_llcsubr.c | 14 | ||||
-rw-r--r-- | sys/netccitt/x25.h | 5 | ||||
-rw-r--r-- | sys/netinet/if_atm.c | 6 | ||||
-rw-r--r-- | sys/netinet/if_atm.h | 4 | ||||
-rw-r--r-- | sys/netinet/if_ether.c | 6 | ||||
-rw-r--r-- | sys/netinet/if_ether.h | 6 | ||||
-rw-r--r-- | sys/netinet6/nd6.c | 10 | ||||
-rw-r--r-- | sys/netinet6/nd6.h | 7 | ||||
-rw-r--r-- | sys/netiso/eonvar.h | 4 | ||||
-rw-r--r-- | sys/netiso/if_eon.c | 9 | ||||
-rw-r--r-- | sys/netiso/iso_snpac.c | 8 | ||||
-rw-r--r-- | sys/netiso/iso_var.h | 4 |
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 *)); |