[Bridge] [PATCH] bridge: avoid ptype_all packet handling
Ben Greear
greearb at candelatech.com
Wed Feb 28 20:05:10 PST 2007
Stephen Hemminger wrote:
> On Wed, 28 Feb 2007 17:28:09 -0800
> Ben Greear <greearb at candelatech.com> wrote:
>
>
>> Stephen Hemminger wrote:
>>
>>> I was measuring bridging/routing performance and noticed this.
>>>
>>> The current code runs the "all packet" type handlers before calling
>>> the bridge hook. If an application (like some DHCP clients) is
>>> using AF_PACKET, this means that each received packet gets run
>>> through the Berkeley Packet Filter code in sk_run_filter (slow).
>>>
>>> By moving the bridging hook to run first, the packets flowing
>>> through the bridge get filtered out there. This results in a 14%
>>> improvement in performance, but it does mean that some snooping
>>> applications would miss packets if being used on a bridge. The
>>> correct way to see all packets on a bridge is to set the bridge
>>> pseudo-device to promiscuous mode.
>>>
>> Seems it would be better to fix these clients to be more selective as
>> to where they bind.
>>
>
> The problem is any use of BPF is a lose, if it has to be done to all
> traffic.
>
Right, but couldn't you have the dhcp client bind to eth0, eth7, and br0
(ie, skipping the eth1-6 that comprise the bridge group?)
The only difficulty I see is having the client know when new devices
come and go, but there are probably
ways to know that without keeping a whole lot of state or probing the
/proc/net/dev (like my own bloated app does :))
I envision the client args to be something like --skip-devices "eth1
eth2 eth3 ..."
I know you can bind raw packet sockets to individual devices, though I
don't know much about BPF, so it's
possible I'm wrong...
>> This breaks the case where you want to see packets on a particular
>> interface, not just the entire bridge, right?
>>
>
> It might be possible to use promisc counter to handle this.
>
Not really, it's perfectly valid to sniff a port in non-promiscuous mode...
Ben
> -
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Ben Greear <greearb at candelatech.com>
Candela Technologies Inc http://www.candelatech.com
More information about the Bridge
mailing list