diff options
| author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-04-23 08:04:20 +0000 |
|---|---|---|
| committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2020-04-23 08:04:20 +0000 |
| commit | aaad3c4fcaa558ec3b2c7db9bb26f2843585a122 (patch) | |
| tree | 3e7477aad71b6fe5569c4af1c7b4e4a5dec00cc0 /sys/netinet6 | |
| parent | 9e88f47c8f402b87fb36bdea673ad80a988b7d9d (diff) | |
Notes
Diffstat (limited to 'sys/netinet6')
| -rw-r--r-- | sys/netinet6/nd6.c | 15 | ||||
| -rw-r--r-- | sys/netinet6/nd6.h | 5 | ||||
| -rw-r--r-- | sys/netinet6/nd6_rtr.c | 10 |
3 files changed, 14 insertions, 16 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index 12f61a853af2..f79c7febd7f1 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -1565,29 +1565,26 @@ nd6_rtrequest(int req, struct rtentry *rt, struct rt_addrinfo *info) { struct sockaddr_in6 *gateway; struct nd_defrouter *dr; - struct ifnet *ifp; + struct nhop_object *nh; - gateway = (struct sockaddr_in6 *)rt->rt_gateway; - ifp = rt->rt_ifp; + nh = rt->rt_nhop; + gateway = &nh->gw6_sa; switch (req) { case RTM_ADD: break; case RTM_DELETE: - if (!ifp) - return; /* * Only indirect routes are interesting. */ - if ((rt->rt_flags & RTF_GATEWAY) == 0) + if ((nh->nh_flags & NHF_GATEWAY) == 0) return; /* * check for default route */ - if (IN6_ARE_ADDR_EQUAL(&in6addr_any, - &SIN6(rt_key(rt))->sin6_addr)) { - dr = defrouter_lookup(&gateway->sin6_addr, ifp); + if (nh->nh_flags & NHF_DEFAULT) { + dr = defrouter_lookup(&gateway->sin6_addr, nh->nh_ifp); if (dr != NULL) { dr->installed = 0; defrouter_rele(dr); diff --git a/sys/netinet6/nd6.h b/sys/netinet6/nd6.h index 857657f6e205..b9f763ca17b8 100644 --- a/sys/netinet6/nd6.h +++ b/sys/netinet6/nd6.h @@ -401,8 +401,9 @@ void nd6_dad_stop(struct ifaddr *); void nd6_rs_input(struct mbuf *, int, int); void nd6_ra_input(struct mbuf *, int, int); void nd6_ifnet_link_event(void *, struct ifnet *, int); -struct nd_defrouter *defrouter_lookup(struct in6_addr *, struct ifnet *); -struct nd_defrouter *defrouter_lookup_locked(struct in6_addr *, struct ifnet *); +struct nd_defrouter *defrouter_lookup(const struct in6_addr *, struct ifnet *); +struct nd_defrouter *defrouter_lookup_locked(const struct in6_addr *, + struct ifnet *); void defrouter_reset(void); void defrouter_select_fib(int fibnum); void defrouter_rele(struct nd_defrouter *); diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c index 89aa1eedd38a..6824015f0477 100644 --- a/sys/netinet6/nd6_rtr.c +++ b/sys/netinet6/nd6_rtr.c @@ -784,7 +784,7 @@ defrouter_del(struct nd_defrouter *dr) struct nd_defrouter * -defrouter_lookup_locked(struct in6_addr *addr, struct ifnet *ifp) +defrouter_lookup_locked(const struct in6_addr *addr, struct ifnet *ifp) { struct nd_defrouter *dr; @@ -798,7 +798,7 @@ defrouter_lookup_locked(struct in6_addr *addr, struct ifnet *ifp) } struct nd_defrouter * -defrouter_lookup(struct in6_addr *addr, struct ifnet *ifp) +defrouter_lookup(const struct in6_addr *addr, struct ifnet *ifp) { struct nd_defrouter *dr; @@ -2006,7 +2006,7 @@ restart: static int nd6_prefix_onlink_rtrequest(struct nd_prefix *pr, struct ifaddr *ifa) { - struct sockaddr_dl sdl; + struct sockaddr_dl_short sdl; struct rtentry *rt; struct sockaddr_in6 mask6; u_long rtflags; @@ -2021,8 +2021,8 @@ nd6_prefix_onlink_rtrequest(struct nd_prefix *pr, struct ifaddr *ifa) mask6.sin6_addr = pr->ndpr_mask; rtflags = (ifa->ifa_flags & ~IFA_RTSELF) | RTF_UP; - bzero(&sdl, sizeof(struct sockaddr_dl)); - sdl.sdl_len = sizeof(struct sockaddr_dl); + bzero(&sdl, sizeof(struct sockaddr_dl_short)); + sdl.sdl_len = sizeof(struct sockaddr_dl_short); sdl.sdl_family = AF_LINK; sdl.sdl_type = ifa->ifa_ifp->if_type; sdl.sdl_index = ifa->ifa_ifp->if_index; |
