diff options
| author | Luigi Rizzo <luigi@FreeBSD.org> | 2004-04-25 09:24:52 +0000 |
|---|---|---|
| committer | Luigi Rizzo <luigi@FreeBSD.org> | 2004-04-25 09:24:52 +0000 |
| commit | cd46a114fcb92154fdcee571daa45037a2aaf36f (patch) | |
| tree | b64da6798f0d544a1f0a0369b5c8f192b6c31e34 /sys/netinet6 | |
| parent | 8cd65c072e75ffa813dd84cf610cc0b8d095e5d4 (diff) | |
Notes
Diffstat (limited to 'sys/netinet6')
| -rw-r--r-- | sys/netinet6/nd6.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c index d90750587ee3f..4523f53f56369 100644 --- a/sys/netinet6/nd6.c +++ b/sys/netinet6/nd6.c @@ -2032,15 +2032,16 @@ nd6_need_cache(ifp) } int -nd6_storelladdr(ifp, rt, m, dst, desten) +nd6_storelladdr(ifp, rt0, m, dst, desten) struct ifnet *ifp; - struct rtentry *rt; + struct rtentry *rt0; struct mbuf *m; struct sockaddr *dst; u_char *desten; { int i; struct sockaddr_dl *sdl; + struct rtentry *rt; if (m->m_flags & M_MCAST) { switch (ifp->if_type) { @@ -2073,26 +2074,32 @@ nd6_storelladdr(ifp, rt, m, dst, desten) } } + i = rt_check(&rt, &rt0, dst); + if (i) { + m_freem(m); + return i; + } + if (rt == NULL) { /* this could happen, if we could not allocate memory */ m_freem(m); - return (0); + return (ENOMEM); } if (rt->rt_gateway->sa_family != AF_LINK) { printf("nd6_storelladdr: something odd happens\n"); m_freem(m); - return (0); + return (EINVAL); } sdl = SDL(rt->rt_gateway); if (sdl->sdl_alen == 0) { /* this should be impossible, but we bark here for debugging */ printf("nd6_storelladdr: sdl_alen == 0\n"); m_freem(m); - return (0); + return (EINVAL); } bcopy(LLADDR(sdl), desten, sdl->sdl_alen); - return (1); + return (0); } static int nd6_sysctl_drlist(SYSCTL_HANDLER_ARGS); |
