Subject: bnx2 hardware VLAN acceleration and PF_PACKET/tap interfaces

From: John Morrissey <[email-masked]>
Date: Tue, 8 Jul 2008 16:05:08 -0400

I'm struggling with VLAN tags being stripped the bnx2 driver/hardware when
hardware VLAN acceleration is enabled.

I'm trying to (a) tcpdump(8) on the main interface and see tagged traffic
and (b) place the main interface into a bridge group and attach a tap
interface to the bridge to give KVM virtual machines access to that
interface. The VMs would then have their own choice of VLANs without having
to create separate VLAN subints, bridge groups, and tap interfaces on the
KVM host for each VLAN that a VM needs access to.

I've seen these threads, which indicate this is due to the implementation
particulars of hardware VLAN acceleration:

http://marc.info/?l=linux-netdev&m=117269169822297&w=2
http://marc.info/?l=linux-netdev&m=119395331216242&w=2

The adapters are "NetXtreme II BCM5708S Gigabit Ethernet rev 12" in IBM
BladeCenter chassis. I've tried disabling the use of ASF_ENABLE_FLAG in
bnx2, but this doesn't seem to have changed its behavior any. The Broadcom
firmware upgarde utility says ASF isn't supported by this chipset when I try
to 'cfg -asf 0', so perhaps this adapter doesn't support ASF and I'm barking
up the wrong tree?

Flailing around, I tried #defining BCM_VLAN to 0 to disable hardware VLAN
acceleration. This breaks the driver build since there's an unguarded use of
struct bnx2->vlgrp in bnx2_start_xmit().

I'm also seeing some tcpdump(8) behavior that I don't understand. When I
tcpdump the main interface (not the VLAN subint), I see only *outbound*
traffic for the last VLAN configured on the interface, and no other traffic.
Is this some side-effect of the hardware VLAN acceleration?

Is there any hope of having this work? I'm working with 2.6.24 (from Ubuntu
8.04 FWIW) and have glanced at the bnx2 driver in 2.6.25, which seems
essentially the same.

john
-- 
John Morrissey          _o            /\         ----  __o
[email-masked]        _-< \_          /  \       ----  <  \,
www.horde.net/    __(_)/_(_)________/    \_______(_) /_(_)__