diff options
author | thompsa <thompsa@FreeBSD.org> | 2005-10-13 09:43:30 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2005-10-13 09:43:30 +0000 |
commit | e085cf5c30f71fc8321aa4c804d45119bcda1fad (patch) | |
tree | 6e2d31668170780f98cc29be1a0e90f85f72b79f /sys/net | |
parent | 8fe74b285e545ff5d761214a40bf9ec18221b427 (diff) | |
download | FreeBSD-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.c | 11 | ||||
-rw-r--r-- | sys/net/if_ethersubr.c | 13 |
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; |