summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/netatm/spans/spans_arp.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/sys/netatm/spans/spans_arp.c b/sys/netatm/spans/spans_arp.c
index 0c445ae..f206b09 100644
--- a/sys/netatm/spans/spans_arp.c
+++ b/sys/netatm/spans/spans_arp.c
@@ -620,17 +620,11 @@ spansarp_input(clp, m)
/*
* Validate source addresses
- * can't be from broadcast
+ * can't be from hardware broadcast
* can't be from me
*/
if (!spans_addr_cmp(&ahp->ah_sha, &spans_bcastaddr))
goto free;
-#if (defined(BSD) && (BSD >= 199306))
- if (in_broadcast(in_src, &inp->inf_nif->nif_if))
-#else
- if (in_broadcast(in_src))
-#endif
- goto free;
if (!spans_addr_cmp(&ahp->ah_sha, spp->sp_addr.address))
goto free;
if (in_src.s_addr == in_me.s_addr) {
@@ -642,6 +636,17 @@ spansarp_input(clp, m)
}
/*
+ * If source IP address is from unspecified or broadcast addresses,
+ * don't bother updating arp table, but answer possible requests
+ */
+#if (defined(BSD) && (BSD >= 199306))
+ if (in_broadcast(in_src, &inp->inf_nif->nif_if))
+#else
+ if (in_broadcast(in_src))
+#endif
+ goto chkop;
+
+ /*
* Update arp table with source address info
*/
s = splnet();
OpenPOWER on IntegriCloud