git: kernel - More if_bridge work + misc fixes
dillon at crater.dragonflybsd.org
Mon Feb 21 16:17:44 PST 2011
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Mon Feb 21 16:02:30 2011 -0800
kernel - More if_bridge work + misc fixes
* When bridging packets sent from one of our own MACs we always override
the ether_shost in the output packet so it comes from the actual
interface the packet is being sent out on.
* LINK0 will still nominally keep the ether_shost intact when forwarding
across a bridge, except in the above case. That is, any foreign MAC
set as the source coming in on one interface will be retained as the
source when being thrown out on another interface. But any local MAC
will be replaced with the MAC of the outgoing interface.
* When receiving a unicast frame on one interface which is targetted to
another interface, retain the original rcvif for any vlan or arp
processing. Otherwise (for example) if this were an ARP reply the ARP
code would associate the reply with the wrong interface. We would want
the ARP entry to be associated with the first interface, not the second,
because the first interface is the one the reply actually came in on.
* Adjust the ARP code in if_ether.c to use rcvif and not ifp, and don't
log if non-matching interfaces are part of the same bridge (unless
log_arp_wrong_iface is set to 2).
* Augment the ether_reinput_cpu() API to pass additional flags in,
allowing the caller to specify that m->m_pkthdr.rcvif not be
overwritten. Used to support the above features.
* Clear M_HASH in a few more cases in pf.c
Summary of changes:
sys/net/bridge/if_bridge.c | 114 +++++++++++++++++++++++++++-----------------
sys/net/ethernet.h | 4 +-
sys/net/if_ethersubr.c | 18 +++++--
sys/net/if_var.h | 4 ++
sys/net/pf/pf.c | 2 +
sys/net/vlan/if_vlan.c | 2 +-
sys/netinet/if_ether.c | 9 ++++
7 files changed, 103 insertions(+), 50 deletions(-)
DragonFly BSD source repository
More information about the Commits