summaryrefslogtreecommitdiffstats
path: root/sys/net/if_fwsubr.c
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2014-11-27 23:06:25 +0000
committermelifaro <melifaro@FreeBSD.org>2014-11-27 23:06:25 +0000
commit95c680b9a37dc9e1e605f6d9ce346203c0d1aac4 (patch)
treeb985650fb7687bf95b809dfda2d768fed6e073d2 /sys/net/if_fwsubr.c
parent09e88907610d93e098d017e8e705eed832e10d21 (diff)
downloadFreeBSD-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.c12
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);
}
OpenPOWER on IntegriCloud