summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2006-01-31 21:29:41 +0000
committerthompsa <thompsa@FreeBSD.org>2006-01-31 21:29:41 +0000
commitf4270dbad690c784b21a12984681263aa32e3f81 (patch)
tree4856fbde176c60d52913f276ba163e823821573d
parentd32360b9225bbcf4985813a366ad0048f7f3f396 (diff)
downloadFreeBSD-src-f4270dbad690c784b21a12984681263aa32e3f81.zip
FreeBSD-src-f4270dbad690c784b21a12984681263aa32e3f81.tar.gz
Now that the bridge also processes Ethernet frames as itself, two arp replies
will be sent if there is an address on the bridge. Exclude the bridge from the special arp handling. This has been tested with all combinations of addresses on the bridge and members. Pointed out by: Michal Mertl
-rw-r--r--sys/netinet/if_ether.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 28f7d44..2128d70 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -631,7 +631,8 @@ in_arpinput(m)
* XXX: This is really ugly!
*/
LIST_FOREACH(ia, INADDR_HASH(itaddr.s_addr), ia_hash) {
- if ((bridged || (ia->ia_ifp == ifp)) &&
+ if (((bridged && ia->ia_ifp->if_type != IFT_BRIDGE) ||
+ (ia->ia_ifp == ifp)) &&
itaddr.s_addr == ia->ia_addr.sin_addr.s_addr)
goto match;
#ifdef DEV_CARP
@@ -644,7 +645,8 @@ in_arpinput(m)
#endif
}
LIST_FOREACH(ia, INADDR_HASH(isaddr.s_addr), ia_hash)
- if ((bridged || (ia->ia_ifp == ifp)) &&
+ if (((bridged && ia->ia_ifp->if_type != IFT_BRIDGE) ||
+ (ia->ia_ifp == ifp)) &&
isaddr.s_addr == ia->ia_addr.sin_addr.s_addr)
goto match;
/*
OpenPOWER on IntegriCloud