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.
--
next prev parent reply other threads:[~2010-01-19 21:40 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).