diff options
author | melifaro <melifaro@FreeBSD.org> | 2014-11-27 23:06:25 +0000 |
---|---|---|
committer | melifaro <melifaro@FreeBSD.org> | 2014-11-27 23:06:25 +0000 |
commit | 95c680b9a37dc9e1e605f6d9ce346203c0d1aac4 (patch) | |
tree | b985650fb7687bf95b809dfda2d768fed6e073d2 /sys/net/if_fwsubr.c | |
parent | 09e88907610d93e098d017e8e705eed832e10d21 (diff) | |
download | FreeBSD-src-95c680b9a37dc9e1e605f6d9ce346203c0d1aac4.zip FreeBSD-src-95c680b9a37dc9e1e605f6d9ce346203c0d1aac4.tar.gz |
Do not return unlocked/unreferenced lle in arpresolve/nd6_storelladdr -
return lle flags IFF needed.
Do not pass rte to arpresolve - pass is_gateway flag instead.
Diffstat (limited to 'sys/net/if_fwsubr.c')
-rw-r--r-- | sys/net/if_fwsubr.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/net/if_fwsubr.c b/sys/net/if_fwsubr.c index 39e9cf9..fd4851e 100644 --- a/sys/net/if_fwsubr.c +++ b/sys/net/if_fwsubr.c @@ -89,9 +89,7 @@ firewire_output(struct ifnet *ifp, struct mbuf *m, const struct sockaddr *dst, struct mbuf *mtail; int unicast, dgl, foff; static int next_dgl; -#if defined(INET) || defined(INET6) - struct llentry *lle; -#endif + int is_gw; #ifdef MAC error = mac_ifnet_check_transmit(ifp, m); @@ -140,7 +138,11 @@ firewire_output(struct ifnet *ifp, struct mbuf *m, const struct sockaddr *dst, * doesn't fit into the arp model. */ if (unicast) { - error = arpresolve(ifp, ro ? ro->ro_rt : NULL, m, dst, (u_char *) destfw, &lle); + is_gw = 0; + if (ro != NULL && ro->ro_rt != NULL && + (ro->ro_rt->rt_flags & RTF_GATEWAY) != 0) + is_gw = 1; + error = arpresolve(ifp, is_gw, m, dst, (u_char *) destfw, NULL); if (error) return (error == EWOULDBLOCK ? 0 : error); } @@ -170,7 +172,7 @@ firewire_output(struct ifnet *ifp, struct mbuf *m, const struct sockaddr *dst, case AF_INET6: if (unicast) { error = nd6_storelladdr(fc->fc_ifp, m, dst, - (u_char *) destfw, &lle); + (u_char *) destfw, NULL); if (error) return (error); } |