diff options
Diffstat (limited to 'sys/net/if.c')
| -rw-r--r-- | sys/net/if.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/net/if.c b/sys/net/if.c index 42e3c577acdf..6cf88521b422 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -831,8 +831,7 @@ if_clone_list(ifcr) return (error); } -#define equal(a1, a2) \ - (bcmp((caddr_t)(a1), (caddr_t)(a2), ((struct sockaddr *)(a1))->sa_len) == 0) +#define equal(a1, a2) (bcmp((a1), (a2), ((a1))->sa_len) == 0) /* * Locate an interface based on a complete address. @@ -912,7 +911,7 @@ ifa_ifwithnet(addr) * so do that if we can. */ if (af == AF_LINK) { - register struct sockaddr_dl *sdl = (struct sockaddr_dl *)addr; + struct sockaddr_dl *sdl = (struct sockaddr_dl *)addr; if (sdl->sdl_index && sdl->sdl_index <= if_index) return (ifaddr_byindex(sdl->sdl_index)); } @@ -1049,18 +1048,21 @@ link_rtrequest(cmd, rt, info) register struct rtentry *rt; struct rt_addrinfo *info; { - register struct ifaddr *ifa; + register struct ifaddr *ifa, *oifa; struct sockaddr *dst; struct ifnet *ifp; + RT_LOCK_ASSERT(rt); + if (cmd != RTM_ADD || ((ifa = rt->rt_ifa) == 0) || ((ifp = ifa->ifa_ifp) == 0) || ((dst = rt_key(rt)) == 0)) return; ifa = ifaof_ifpforaddr(dst, ifp); if (ifa) { - IFAFREE(rt->rt_ifa); IFAREF(ifa); /* XXX */ + oifa = rt->rt_ifa; rt->rt_ifa = ifa; + IFAFREE(oifa); if (ifa->ifa_rtrequest && ifa->ifa_rtrequest != link_rtrequest) ifa->ifa_rtrequest(cmd, rt, info); } |
