* [PATCH 0/4] Bridge patches for 2.6.22
@ 2007-04-25 23:47 Stephen Hemminger
2007-04-25 23:47 ` [PATCH 1/4] bridge: don't change packet type Stephen Hemminger
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Stephen Hemminger @ 2007-04-25 23:47 UTC (permalink / raw)
To: David Miller; +Cc: netdev, bridge
Here are some patches for bridge code in 2.6.22. The user mode RSTP
from Aji is working. Anyone who wants to test it can get it from:
git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/rstp.git
Thanks
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/4] bridge: don't change packet type
2007-04-25 23:47 [PATCH 0/4] Bridge patches for 2.6.22 Stephen Hemminger
@ 2007-04-25 23:47 ` Stephen Hemminger
2007-04-26 5:05 ` David Miller
2007-04-25 23:47 ` [PATCH 2/4] bridge: drop PAUSE frames Stephen Hemminger
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Stephen Hemminger @ 2007-04-25 23:47 UTC (permalink / raw)
To: David Miller; +Cc: netdev, bridge
[-- Attachment #1: bridge-stp-multicast.patch --]
[-- Type: text/plain, Size: 857 bytes --]
The change to forward STP bpdu's (for usermode STP) through normal path,
changed the packet type in the process. Since link local stuff is multicast, it
should stay pkt_type = PACKET_MULTICAST. The code was probably copy/pasted
incorrectly from the bridge pseudo-device receive path.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- bridge-2.6.22.orig/net/bridge/br_input.c
+++ bridge-2.6.22/net/bridge/br_input.c
@@ -131,12 +131,9 @@ struct sk_buff *br_handle_frame(struct n
if (!is_valid_ether_addr(eth_hdr(skb)->h_source))
goto drop;
- if (unlikely(is_link_local(dest))) {
- skb->pkt_type = PACKET_HOST;
-
+ if (unlikely(is_link_local(dest)))
return (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
NULL, br_handle_local_finish) == 0) ? skb : NULL;
- }
switch (p->state) {
case BR_STATE_FORWARDING:
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/4] bridge: drop PAUSE frames
2007-04-25 23:47 [PATCH 0/4] Bridge patches for 2.6.22 Stephen Hemminger
2007-04-25 23:47 ` [PATCH 1/4] bridge: don't change packet type Stephen Hemminger
@ 2007-04-25 23:47 ` Stephen Hemminger
2007-04-26 5:07 ` David Miller
2007-04-25 23:47 ` [PATCH 3/4] bridge: if no STP then forward all BPDUs Stephen Hemminger
2007-04-25 23:47 ` [PATCH 4/4] bridge: missing rtnl Stephen Hemminger
3 siblings, 1 reply; 8+ messages in thread
From: Stephen Hemminger @ 2007-04-25 23:47 UTC (permalink / raw)
To: David Miller; +Cc: netdev, bridge
[-- Attachment #1: bridge-drop-pause.patch --]
[-- Type: text/plain, Size: 1356 bytes --]
Pause frames should never make it out of the network device into
the stack. But if a device was misconfigured, it might happen.
So drop pause frames in bridge.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
--- bridge-2.6.22.orig/include/linux/if_ether.h
+++ bridge-2.6.22/include/linux/if_ether.h
@@ -61,6 +61,7 @@
#define ETH_P_8021Q 0x8100 /* 802.1Q VLAN Extended Header */
#define ETH_P_IPX 0x8137 /* IPX over DIX */
#define ETH_P_IPV6 0x86DD /* IPv6 over bluebook */
+#define ETH_P_PAUSE 0x8808 /* IEEE Pause frames. See 802.3 31B */
#define ETH_P_SLOW 0x8809 /* Slow Protocol. See 802.3ad 43B */
#define ETH_P_WCCP 0x883E /* Web-cache coordination protocol
* defined in draft-wilson-wrec-wccp-v2-00.txt */
--- bridge-2.6.22.orig/net/bridge/br_input.c
+++ bridge-2.6.22/net/bridge/br_input.c
@@ -131,9 +131,14 @@ struct sk_buff *br_handle_frame(struct n
if (!is_valid_ether_addr(eth_hdr(skb)->h_source))
goto drop;
- if (unlikely(is_link_local(dest)))
+ if (unlikely(is_link_local(dest))) {
+ /* Pause frames shouldn't be passed up by driver anyway */
+ if (skb->protocol == htons(ETH_P_PAUSE))
+ goto drop;
+
return (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
NULL, br_handle_local_finish) == 0) ? skb : NULL;
+ }
switch (p->state) {
case BR_STATE_FORWARDING:
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/4] bridge: if no STP then forward all BPDUs
2007-04-25 23:47 [PATCH 0/4] Bridge patches for 2.6.22 Stephen Hemminger
2007-04-25 23:47 ` [PATCH 1/4] bridge: don't change packet type Stephen Hemminger
2007-04-25 23:47 ` [PATCH 2/4] bridge: drop PAUSE frames Stephen Hemminger
@ 2007-04-25 23:47 ` Stephen Hemminger
2007-04-25 23:47 ` [PATCH 4/4] bridge: missing rtnl Stephen Hemminger
3 siblings, 0 replies; 8+ messages in thread
From: Stephen Hemminger @ 2007-04-25 23:47 UTC (permalink / raw)
To: David Miller; +Cc: netdev, bridge
[-- Attachment #1: bridge-no-stp-bpdu.patch --]
[-- Type: text/plain, Size: 1058 bytes --]
If a bridge is not running STP, then it has no way to detect a cycle
in the network. But if it is not running STP and some other machine
or device is running STP, then if STP BPDU's get forwarded to it can
detect the cycle.
This is how the old 2.4 and early 2.6 code worked.
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
---
net/bridge/br_input.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
--- bridge-2.6.22.orig/net/bridge/br_input.c
+++ bridge-2.6.22/net/bridge/br_input.c
@@ -136,8 +136,14 @@ struct sk_buff *br_handle_frame(struct n
if (skb->protocol == htons(ETH_P_PAUSE))
goto drop;
- return (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
- NULL, br_handle_local_finish) == 0) ? skb : NULL;
+ /* Process STP BPDU's through normal netif_receive_skb() path */
+ if (p->br->stp_enabled != BR_NO_STP) {
+ if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
+ NULL, br_handle_local_finish))
+ return NULL;
+ else
+ return skb;
+ }
}
switch (p->state) {
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/4] bridge: missing rtnl
2007-04-25 23:47 [PATCH 0/4] Bridge patches for 2.6.22 Stephen Hemminger
` (2 preceding siblings ...)
2007-04-25 23:47 ` [PATCH 3/4] bridge: if no STP then forward all BPDUs Stephen Hemminger
@ 2007-04-25 23:47 ` Stephen Hemminger
2007-04-26 5:08 ` David Miller
3 siblings, 1 reply; 8+ messages in thread
From: Stephen Hemminger @ 2007-04-25 23:47 UTC (permalink / raw)
To: David Miller; +Cc: netdev, bridge
[-- Attachment #1: br-sysfs-rtnl.patch --]
[-- Type: text/plain, Size: 661 bytes --]
Writing to /sys/class/net/brX/bridge/stp_state causes a warning because
RTNL is not held when call br_stp_if.c
Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
---
net/bridge/br_sysfs_br.c | 2 ++
1 file changed, 2 insertions(+)
--- bridge-2.6.22.orig/net/bridge/br_sysfs_br.c
+++ bridge-2.6.22/net/bridge/br_sysfs_br.c
@@ -149,9 +149,11 @@ static ssize_t show_stp_state(struct dev
static void set_stp_state(struct net_bridge *br, unsigned long val)
{
+ rtnl_lock();
spin_unlock_bh(&br->lock);
br_stp_set_enabled(br, val);
spin_lock_bh(&br->lock);
+ rtnl_unlock();
}
static ssize_t store_stp_state(struct device *d,
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/4] bridge: don't change packet type
2007-04-25 23:47 ` [PATCH 1/4] bridge: don't change packet type Stephen Hemminger
@ 2007-04-26 5:05 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2007-04-26 5:05 UTC (permalink / raw)
To: shemminger; +Cc: netdev, bridge
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Wed, 25 Apr 2007 16:47:38 -0700
> The change to forward STP bpdu's (for usermode STP) through normal path,
> changed the packet type in the process. Since link local stuff is multicast, it
> should stay pkt_type = PACKET_MULTICAST. The code was probably copy/pasted
> incorrectly from the bridge pseudo-device receive path.
>
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Applied.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/4] bridge: drop PAUSE frames
2007-04-25 23:47 ` [PATCH 2/4] bridge: drop PAUSE frames Stephen Hemminger
@ 2007-04-26 5:07 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2007-04-26 5:07 UTC (permalink / raw)
To: shemminger; +Cc: netdev, bridge
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Wed, 25 Apr 2007 16:47:39 -0700
> Pause frames should never make it out of the network device into
> the stack. But if a device was misconfigured, it might happen.
> So drop pause frames in bridge.
>
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
It can happen when in promiscuous mode, but that's the only
legal case I can think of.
But that case shouldn't be hitting this path I don't think.
So this change is borderline and if anything we should put
an assertion somewhere maybe, but applied for now.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 4/4] bridge: missing rtnl
2007-04-25 23:47 ` [PATCH 4/4] bridge: missing rtnl Stephen Hemminger
@ 2007-04-26 5:08 ` David Miller
0 siblings, 0 replies; 8+ messages in thread
From: David Miller @ 2007-04-26 5:08 UTC (permalink / raw)
To: shemminger; +Cc: netdev, bridge
From: Stephen Hemminger <shemminger@linux-foundation.org>
Date: Wed, 25 Apr 2007 16:47:41 -0700
> Writing to /sys/class/net/brX/bridge/stp_state causes a warning because
> RTNL is not held when call br_stp_if.c
>
> Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Applied, thanks Stephen.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-04-26 5:08 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-25 23:47 [PATCH 0/4] Bridge patches for 2.6.22 Stephen Hemminger
2007-04-25 23:47 ` [PATCH 1/4] bridge: don't change packet type Stephen Hemminger
2007-04-26 5:05 ` David Miller
2007-04-25 23:47 ` [PATCH 2/4] bridge: drop PAUSE frames Stephen Hemminger
2007-04-26 5:07 ` David Miller
2007-04-25 23:47 ` [PATCH 3/4] bridge: if no STP then forward all BPDUs Stephen Hemminger
2007-04-25 23:47 ` [PATCH 4/4] bridge: missing rtnl Stephen Hemminger
2007-04-26 5:08 ` David Miller
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).