summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorthompsa <thompsa@FreeBSD.org>2005-10-13 09:43:30 +0000
committerthompsa <thompsa@FreeBSD.org>2005-10-13 09:43:30 +0000
commite085cf5c30f71fc8321aa4c804d45119bcda1fad (patch)
tree6e2d31668170780f98cc29be1a0e90f85f72b79f /sys/net
parent8fe74b285e545ff5d761214a40bf9ec18221b427 (diff)
downloadFreeBSD-src-e085cf5c30f71fc8321aa4c804d45119bcda1fad.zip
FreeBSD-src-e085cf5c30f71fc8321aa4c804d45119bcda1fad.tar.gz
Clean up the if_bridge hooks a bit in if_ethersubr.c and ng_ether.c, move
the broadcast/multicast test to bridge_input(). Requested by: glebius
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/if_bridge.c11
-rw-r--r--sys/net/if_ethersubr.c13
2 files changed, 10 insertions, 14 deletions
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index 8e41e0d..85afcfd 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -333,6 +333,9 @@ const struct bridge_control bridge_control_table[] = {
const int bridge_control_table_size =
sizeof(bridge_control_table) / sizeof(bridge_control_table[0]);
+static const u_char etherbroadcastaddr[ETHER_ADDR_LEN] =
+ { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
+
LIST_HEAD(, bridge_softc) bridge_list;
IFC_SIMPLE_DECLARE(bridge, 0);
@@ -1698,7 +1701,7 @@ bridge_input(struct ifnet *ifp, struct mbuf *m)
return (m);
}
- if (m->m_flags & (M_BCAST|M_MCAST)) {
+ if (ETHER_IS_MULTICAST(eh->ether_dhost)) {
/* Tap off 802.1D packets; they do not get forwarded. */
if (memcmp(eh->ether_dhost, bstp_etheraddr,
ETHER_ADDR_LEN) == 0) {
@@ -1719,6 +1722,12 @@ bridge_input(struct ifnet *ifp, struct mbuf *m)
}
}
+ if (bcmp(etherbroadcastaddr, eh->ether_dhost,
+ sizeof(etherbroadcastaddr)) == 0)
+ m->m_flags |= M_BCAST;
+ else
+ m->m_flags |= M_MCAST;
+
/*
* Make a deep copy of the packet and enqueue the copy
* for bridge processing; return the original packet for
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 6971c51..627f2a3 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -592,19 +592,6 @@ ether_input(struct ifnet *ifp, struct mbuf *m)
KASSERT(bridge_input_p != NULL,
("%s: if_bridge not loaded!", __func__));
- /* Mark the packet as broadcast or multicast. This is also set
- * further down the code in ether_demux() but since the bridge
- * input routine rarely returns a mbuf for further processing,
- * it is an acceptable duplication.
- */
- if (ETHER_IS_MULTICAST(eh->ether_dhost)) {
- if (bcmp(etherbroadcastaddr, eh->ether_dhost,
- sizeof(etherbroadcastaddr)) == 0)
- m->m_flags |= M_BCAST;
- else
- m->m_flags |= M_MCAST;
- }
-
m = (*bridge_input_p)(ifp, m);
if (m == NULL)
return;
OpenPOWER on IntegriCloud