aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2015-12-16 09:16:06 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2015-12-16 09:16:06 +0000
commit942e4b4b794a5cb5622d45896d373619ba8722b7 (patch)
treeeb07fb6f1f3971ee33ac94c88b36ca5f55e6e1c2 /sys/netinet
parent4dc607e7f22e34f9cc82da2ed606c31e496733d8 (diff)
Notes
Diffstat (limited to 'sys/netinet')
-rw-r--r--sys/netinet/if_ether.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 221454223b73..ce1487fad2d6 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -855,12 +855,20 @@ match:
arp_check_update_lle(ah, isaddr, ifp, bridged, la);
else if (itaddr.s_addr == myaddr.s_addr) {
/*
- * Reply to our address, but no lle exists yet.
- * do we really have to create an entry?
+ * Request/reply to our address, but no lle exists yet.
+ * Try to create new llentry.
*/
la = lltable_alloc_entry(LLTABLE(ifp), 0, dst);
- if (la == NULL)
- goto drop;
+ if (la == NULL) {
+
+ /*
+ * lle creation may fail if source address belongs
+ * to non-directly connected subnet. However, we
+ * will try to answer the request instead of dropping
+ * frame.
+ */
+ goto reply;
+ }
lltable_set_entry_addr(ifp, la, ar_sha(ah));
IF_AFDATA_WLOCK(ifp);