All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Hemminger <shemminger@vyatta.com>
To: "Ha, Tristram" <Tristram.Ha@Micrel.Com>
Cc: "David Miller" <davem@davemloft.net>, <netdev@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2.6.33 1/3] net: Micrel KSZ8841/2 PCI Ethernet driver
Date: Tue, 19 Jan 2010 13:40:59 -0800	[thread overview]
Message-ID: <20100119134059.63b355e4@nehalam> (raw)
In-Reply-To: <14385191E87B904DBD836449AA30269D580A76@MORGANITE.micrel.com>

On Tue, 19 Jan 2010 12:03:20 -0800
"Ha, Tristram" <Tristram.Ha@Micrel.Com> wrote:

> David Miller wrote:
> > From: "Ha, Tristram" <Tristram.Ha@Micrel.Com>
> > Date: Fri, 15 Jan 2010 18:57:59 -0800
> > 
> >> The KSZ8842 has a switch with lots of hardware configurations.  The =
> >> driver uses the proc system to allow users to configure the switch.
> >> If = this is not desired the whole thing can be removed by not
> calling the =
> >> init_proc() function.
> > 
> > I think there needs to be a serious discussion about how this driver
> uses bridge layer internals
> > by doing things like: 
> > 
> > +/* Needed for STP support. */
> > +#ifdef CONFIG_KSZ8842_STP
> > +#include <../net/bridge/br_private.h>
> > +#endif
> > 
> > and uses procfs to configure the ports.
> > 
> > Stephen please look this over and make suggestions for better ways to
> support and configure
> > these kinds of devices. 
> > 
> > Thanks.
> 
> I like to explain a little bit about this Spanning Tree Protocol
> support.
> 
> Micrel KSZ8842's 3-port switch and Micrel's other 5-port switches have
> port controls to enable/disable tx and rx and stop MAC address learning.
> They are supposed to help run STP more efficiently, but somebody needs
> to control those ports.
> 
> From my observation of how the brctl application controls the network
> devices when running STP, I know the kernel bridge puts all the devices
> under it in promiscuous mode and declares the state of each bridge port
> associated with the device blocked or forwarding depending on the BPDU
> frames received.  When the port is blocked, the device is still active
> and passes all frames to the host.  The bridge only looks at BPDU frames
> and drops all other frames.  It is better to just shut off the port.

Ok.

> From the time when the KSZ8842 driver was developed for the Linux 2.4
> kernel I looked for a kernel API to tell the bridge port's state so the
> device driver can shut off the port if necessary.  I could not find one
> and so I came up with this hack to look at the bridge port's structure
> directly.  It looks dangerous but is quite safe.  The driver only looks
> at the bridge port state variable and finds out the MAC address
> associated with the bridge device.  It can get the state definitions
> from the if_bridge header.  The private bridge structure may change in
> the future and break the code, but as kernel network interfaces are
> changing all the time, the driver just needs to be modified for the new
> version.  To avoid this situation, the kernel may need to export two
> functions to tell the bridge port state and bridge device address and
> put the prototypes in the if_bridge header.

There was one added for user level RSTP support.
RSTP is where Linux STP is headed, so adding more hooks into
existing STP is going backwards.

> Now for the driver implementation for STP support.  I programmed the
> switch's static MAC table to always pass the following frames to the
> host: BPDU frames with specific multicast address, broadcast frames,
> unicast frames with the device bridge's MAC address, and multicast
> frames with ICMPv6 multicast address.  All other frames are not passed
> to the host and are handled by the switch, forwarding each frame with
> its standard forwarding logic.  The port can be shut off if it is
> blocked and those frames will not pass through that port.  The host gets
> BPDU frames so that the bridge can determine each port's state.  The
> other broadcast, unicast, and multicast frames passed to the host are
> necessary if some other network devices want to communicate with the
> host.  As the forwarding is done by hardware rather than software,
> overall performance does increase.

What about LACP needed by bridging?

> I did verify the driver disables or enables the port appropriately when
> the bridge port state changes, but as I do not have the experience of
> running a full-scale Spanning Tree, I do not know if this hardware
> implementation behaves the same as the software one provided by the
> kernel and brctl.  I also did not try using VLAN.


-- 

  reply	other threads:[~2010-01-19 21:41 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-16  2:57 [PATCH 2.6.33 1/3] net: Micrel KSZ8841/2 PCI Ethernet driver Ha, Tristram
2010-01-16  9:20 ` David Miller
2010-01-19 20:03   ` Ha, Tristram
2010-01-19 21:40     ` Stephen Hemminger [this message]
2010-01-19 23:48       ` Ha, Tristram
2010-01-20  0:11         ` Stephen Hemminger
2010-01-20  0:34           ` Ha, Tristram
2010-01-20  0:50             ` Stephen Hemminger
2010-01-16 14:50 ` Alan Cox
2010-01-19 21:22   ` Ha, Tristram
2010-01-19 21:32     ` Alan Cox
2010-01-20  0:12       ` Ha, Tristram
2010-01-16 16:00 ` Michał Mirosław
2010-01-16 16:16   ` Felix Fietkau
2010-01-19 21:51     ` Ha, Tristram
2010-01-19 22:11       ` Felix Fietkau
  -- strict thread matches above, loose matches on Subject: below --
2010-01-25 18:14 Jens Rottmann
2010-02-08 21:36 Ha, Tristram

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100119134059.63b355e4@nehalam \
    --to=shemminger@vyatta.com \
    --cc=Tristram.Ha@Micrel.Com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.