* [PATCH 0/3] Bridge patches for 2.6.27
@ 2008-06-17 16:52 Stephen Hemminger
2008-06-17 16:52 ` [PATCH 1/3] bridge: handle process all link-local frames Stephen Hemminger
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Stephen Hemminger @ 2008-06-17 16:52 UTC (permalink / raw)
To: David Miller; +Cc: netdev
--
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/3] bridge: handle process all link-local frames
2008-06-17 16:52 [PATCH 0/3] Bridge patches for 2.6.27 Stephen Hemminger
@ 2008-06-17 16:52 ` Stephen Hemminger
2008-06-17 23:11 ` David Miller
2008-06-17 16:52 ` [PATCH 2/3] bridge: make bridge address settings sticky Stephen Hemminger
2008-06-17 16:52 ` [PATCH 3/3] bridge: use statistics in net_device Stephen Hemminger
2 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2008-06-17 16:52 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: br-link-local-pdu.patch --]
[-- Type: text/plain, Size: 1028 bytes --]
Any frame addressed to link-local addresses should be processed by local
receive path. The earlier code would process them only if STP was enabled.
Since there are other frames like LACP for bonding, we should always
process them.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
--- a/net/bridge/br_input.c 2008-06-17 09:10:52.000000000 -0700
+++ b/net/bridge/br_input.c 2008-06-17 09:11:23.000000000 -0700
@@ -136,14 +136,11 @@ struct sk_buff *br_handle_frame(struct n
if (skb->protocol == htons(ETH_P_PAUSE))
goto drop;
- /* 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;
- }
+ if (NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
+ NULL, br_handle_local_finish))
+ return NULL; /* frame consumed by filter */
+ else
+ return skb; /* continue processing */
}
switch (p->state) {
--
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/3] bridge: make bridge address settings sticky
2008-06-17 16:52 [PATCH 0/3] Bridge patches for 2.6.27 Stephen Hemminger
2008-06-17 16:52 ` [PATCH 1/3] bridge: handle process all link-local frames Stephen Hemminger
@ 2008-06-17 16:52 ` Stephen Hemminger
2008-06-17 23:11 ` David Miller
2008-06-17 16:52 ` [PATCH 3/3] bridge: use statistics in net_device Stephen Hemminger
2 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2008-06-17 16:52 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: br-sticky-mac.patch --]
[-- Type: text/plain, Size: 1517 bytes --]
Normally, the bridge just chooses the smallest mac address as the
bridge id and mac address of bridge device. But if the administrator
has explictly set the interface address then don't change it.
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
--- a/net/bridge/br_device.c 2008-06-17 09:18:02.000000000 -0700
+++ b/net/bridge/br_device.c 2008-06-17 09:18:16.000000000 -0700
@@ -95,6 +95,7 @@ static int br_set_mac_address(struct net
spin_lock_bh(&br->lock);
memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
br_stp_change_bridge_id(br, addr->sa_data);
+ br->flags |= BR_SET_MAC_ADDR;
spin_unlock_bh(&br->lock);
return 0;
--- a/net/bridge/br_private.h 2008-06-17 09:14:42.000000000 -0700
+++ b/net/bridge/br_private.h 2008-06-17 09:21:10.000000000 -0700
@@ -95,6 +95,8 @@ struct net_bridge
struct hlist_head hash[BR_HASH_SIZE];
struct list_head age_list;
unsigned long feature_mask;
+ unsigned long flags;
+#define BR_SET_MAC_ADDR 0x00000001
/* STP */
bridge_id designated_root;
--- a/net/bridge/br_stp_if.c 2008-06-17 09:20:06.000000000 -0700
+++ b/net/bridge/br_stp_if.c 2008-06-17 09:21:00.000000000 -0700
@@ -216,6 +216,10 @@ void br_stp_recalculate_bridge_id(struct
const unsigned char *addr = br_mac_zero;
struct net_bridge_port *p;
+ /* user has chosen a value so keep it */
+ if (br->flags & BR_SET_MAC_ADDR)
+ return;
+
list_for_each_entry(p, &br->port_list, list) {
if (addr == br_mac_zero ||
memcmp(p->dev->dev_addr, addr, ETH_ALEN) < 0)
--
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 3/3] bridge: use statistics in net_device
2008-06-17 16:52 [PATCH 0/3] Bridge patches for 2.6.27 Stephen Hemminger
2008-06-17 16:52 ` [PATCH 1/3] bridge: handle process all link-local frames Stephen Hemminger
2008-06-17 16:52 ` [PATCH 2/3] bridge: make bridge address settings sticky Stephen Hemminger
@ 2008-06-17 16:52 ` Stephen Hemminger
2008-06-17 23:14 ` David Miller
2 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2008-06-17 16:52 UTC (permalink / raw)
To: David Miller; +Cc: netdev
[-- Attachment #1: br-stats.patch --]
[-- Type: text/plain, Size: 2969 bytes --]
Move statistics to net_device structure. Also, update last_rx on bridge
device (even though only bonding seems to use it).
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
--- a/net/bridge/br_device.c 2008-06-17 09:31:24.000000000 -0700
+++ b/net/bridge/br_device.c 2008-06-17 09:34:01.000000000 -0700
@@ -21,12 +21,6 @@
#include <asm/uaccess.h>
#include "br_private.h"
-static struct net_device_stats *br_dev_get_stats(struct net_device *dev)
-{
- struct net_bridge *br = netdev_priv(dev);
- return &br->statistics;
-}
-
/* net device transmit always called with no BH (preempt_disabled) */
int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
{
@@ -34,8 +28,8 @@ int br_dev_xmit(struct sk_buff *skb, str
const unsigned char *dest = skb->data;
struct net_bridge_fdb_entry *dst;
- br->statistics.tx_packets++;
- br->statistics.tx_bytes += skb->len;
+ dev->stats.tx_packets++;
+ dev->stats.tx_bytes += skb->len;
skb_reset_mac_header(skb);
skb_pull(skb, ETH_HLEN);
@@ -162,7 +156,6 @@ void br_dev_setup(struct net_device *dev
ether_setup(dev);
dev->do_ioctl = br_dev_ioctl;
- dev->get_stats = br_dev_get_stats;
dev->hard_start_xmit = br_dev_xmit;
dev->open = br_dev_open;
dev->set_multicast_list = br_dev_set_multicast_list;
--- a/net/bridge/br_forward.c 2008-06-17 09:32:32.000000000 -0700
+++ b/net/bridge/br_forward.c 2008-06-17 09:34:37.000000000 -0700
@@ -115,7 +115,7 @@ static void br_flood(struct net_bridge *
struct sk_buff *skb2;
if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL) {
- br->statistics.tx_dropped++;
+ br->dev->stats.tx_dropped++;
kfree_skb(skb);
return;
}
--- a/net/bridge/br_input.c 2008-06-17 09:32:52.000000000 -0700
+++ b/net/bridge/br_input.c 2008-06-17 09:35:49.000000000 -0700
@@ -24,13 +24,15 @@ const u8 br_group_address[ETH_ALEN] = {
static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb)
{
+ struct net_device *brdev = br->dev;
struct net_device *indev;
- br->statistics.rx_packets++;
- br->statistics.rx_bytes += skb->len;
+ brdev->stats.rx_packets++;
+ brdev->stats.rx_bytes += skb->len;
+ brdev->last_rx = jiffies;
indev = skb->dev;
- skb->dev = br->dev;
+ skb->dev = brdev;
NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL,
netif_receive_skb);
@@ -64,7 +66,7 @@ int br_handle_frame_finish(struct sk_buf
dst = NULL;
if (is_multicast_ether_addr(dest)) {
- br->statistics.multicast++;
+ br->dev->stats.multicast++;
skb2 = skb;
} else if ((dst = __br_fdb_get(br, dest)) && dst->is_local) {
skb2 = skb;
--- a/net/bridge/br_private.h 2008-06-17 09:21:43.000000000 -0700
+++ b/net/bridge/br_private.h 2008-06-17 09:21:58.000000000 -0700
@@ -90,7 +90,7 @@ struct net_bridge
spinlock_t lock;
struct list_head port_list;
struct net_device *dev;
- struct net_device_stats statistics;
+
spinlock_t hash_lock;
struct hlist_head hash[BR_HASH_SIZE];
struct list_head age_list;
--
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/3] bridge: handle process all link-local frames
2008-06-17 16:52 ` [PATCH 1/3] bridge: handle process all link-local frames Stephen Hemminger
@ 2008-06-17 23:11 ` David Miller
0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2008-06-17 23:11 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Tue, 17 Jun 2008 09:52:12 -0700
> Any frame addressed to link-local addresses should be processed by local
> receive path. The earlier code would process them only if STP was enabled.
> Since there are other frames like LACP for bonding, we should always
> process them.
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Applied.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 2/3] bridge: make bridge address settings sticky
2008-06-17 16:52 ` [PATCH 2/3] bridge: make bridge address settings sticky Stephen Hemminger
@ 2008-06-17 23:11 ` David Miller
0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2008-06-17 23:11 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Tue, 17 Jun 2008 09:52:13 -0700
> Normally, the bridge just chooses the smallest mac address as the
> bridge id and mac address of bridge device. But if the administrator
> has explictly set the interface address then don't change it.
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Applied.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] bridge: use statistics in net_device
2008-06-17 16:52 ` [PATCH 3/3] bridge: use statistics in net_device Stephen Hemminger
@ 2008-06-17 23:14 ` David Miller
2008-06-17 23:35 ` Stephen Hemminger
0 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2008-06-17 23:14 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Tue, 17 Jun 2008 09:52:14 -0700
> Move statistics to net_device structure. Also, update last_rx on bridge
> device (even though only bonding seems to use it).
>
> Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
This patch doesn't apply even remotely to anything I have in my tree.
What did you generate this against?
For example:
> --- a/net/bridge/br_device.c 2008-06-17 09:31:24.000000000 -0700
> +++ b/net/bridge/br_device.c 2008-06-17 09:34:01.000000000 -0700
> @@ -21,12 +21,6 @@
> #include <asm/uaccess.h>
> #include "br_private.h"
>
> -static struct net_device_stats *br_dev_get_stats(struct net_device *dev)
> -{
> - struct net_bridge *br = netdev_priv(dev);
> - return &br->statistics;
> -}
> -
> /* net device transmit always called with no BH (preempt_disabled) */
> int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
> {
In my tree that function does not exist.
I see, Pavel already made this conversion already. Stephen, please
actually generate your patches against the tree you claim they should
be applied to, thanks :-)
commit a339f1c881fdb8092ef9b118610307e10e885fc8
Author: Pavel Emelyanov <xemul@openvz.org>
Date: Wed May 21 14:13:47 2008 -0700
bridge: Use on-device stats instead of private ones.
Even though bridges require 6 fields from struct net_device_stats,
the on-device stats are always there, so we may just use them.
The br_dev_get_stats is no longer required after this.
Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
index bf77873..626c779 100644
--- a/net/bridge/br_device.c
+++ b/net/bridge/br_device.c
@@ -21,12 +21,6 @@
#include <asm/uaccess.h>
#include "br_private.h"
-static struct net_device_stats *br_dev_get_stats(struct net_device *dev)
-{
- struct net_bridge *br = netdev_priv(dev);
- return &br->statistics;
-}
-
/* net device transmit always called with no BH (preempt_disabled) */
int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
{
@@ -34,8 +28,8 @@ int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
const unsigned char *dest = skb->data;
struct net_bridge_fdb_entry *dst;
- br->statistics.tx_packets++;
- br->statistics.tx_bytes += skb->len;
+ dev->stats.tx_packets++;
+ dev->stats.tx_bytes += skb->len;
skb_reset_mac_header(skb);
skb_pull(skb, ETH_HLEN);
@@ -161,7 +155,6 @@ void br_dev_setup(struct net_device *dev)
ether_setup(dev);
dev->do_ioctl = br_dev_ioctl;
- dev->get_stats = br_dev_get_stats;
dev->hard_start_xmit = br_dev_xmit;
dev->open = br_dev_open;
dev->set_multicast_list = br_dev_set_multicast_list;
diff --git a/net/bridge/br_forward.c b/net/bridge/br_forward.c
index bdd7c35..a471167 100644
--- a/net/bridge/br_forward.c
+++ b/net/bridge/br_forward.c
@@ -115,7 +115,7 @@ static void br_flood(struct net_bridge *br, struct sk_buff *skb,
struct sk_buff *skb2;
if ((skb2 = skb_clone(skb, GFP_ATOMIC)) == NULL) {
- br->statistics.tx_dropped++;
+ br->dev->stats.tx_dropped++;
kfree_skb(skb);
return;
}
diff --git a/net/bridge/br_input.c b/net/bridge/br_input.c
index 255c00f..fa0f571 100644
--- a/net/bridge/br_input.c
+++ b/net/bridge/br_input.c
@@ -24,13 +24,13 @@ const u8 br_group_address[ETH_ALEN] = { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 };
static void br_pass_frame_up(struct net_bridge *br, struct sk_buff *skb)
{
- struct net_device *indev;
+ struct net_device *indev, *brdev = br->dev;
- br->statistics.rx_packets++;
- br->statistics.rx_bytes += skb->len;
+ brdev->stats.rx_packets++;
+ brdev->stats.rx_bytes += skb->len;
indev = skb->dev;
- skb->dev = br->dev;
+ skb->dev = brdev;
NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, indev, NULL,
netif_receive_skb);
@@ -64,7 +64,7 @@ int br_handle_frame_finish(struct sk_buff *skb)
dst = NULL;
if (is_multicast_ether_addr(dest)) {
- br->statistics.multicast++;
+ br->dev->stats.multicast++;
skb2 = skb;
} else if ((dst = __br_fdb_get(br, dest)) && dst->is_local) {
skb2 = skb;
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index c11b554..0243cb4 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -90,7 +90,6 @@ struct net_bridge
spinlock_t lock;
struct list_head port_list;
struct net_device *dev;
- struct net_device_stats statistics;
spinlock_t hash_lock;
struct hlist_head hash[BR_HASH_SIZE];
struct list_head age_list;
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] bridge: use statistics in net_device
2008-06-17 23:14 ` David Miller
@ 2008-06-17 23:35 ` Stephen Hemminger
2008-06-17 23:50 ` David Miller
0 siblings, 1 reply; 9+ messages in thread
From: Stephen Hemminger @ 2008-06-17 23:35 UTC (permalink / raw)
To: David Miller; +Cc: netdev
On Tue, 17 Jun 2008 16:14:09 -0700 (PDT)
David Miller <davem@davemloft.net> wrote:
> From: Stephen Hemminger <shemminger@vyatta.com>
> Date: Tue, 17 Jun 2008 09:52:14 -0700
>
> > Move statistics to net_device structure. Also, update last_rx on bridge
> > device (even though only bonding seems to use it).
> >
> > Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
>
> This patch doesn't apply even remotely to anything I have in my tree.
> What did you generate this against?
Patch was against 2.6.26-rc6
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 3/3] bridge: use statistics in net_device
2008-06-17 23:35 ` Stephen Hemminger
@ 2008-06-17 23:50 ` David Miller
0 siblings, 0 replies; 9+ messages in thread
From: David Miller @ 2008-06-17 23:50 UTC (permalink / raw)
To: shemminger; +Cc: netdev
From: Stephen Hemminger <shemminger@vyatta.com>
Date: Tue, 17 Jun 2008 16:35:27 -0700
> On Tue, 17 Jun 2008 16:14:09 -0700 (PDT)
> David Miller <davem@davemloft.net> wrote:
>
> > From: Stephen Hemminger <shemminger@vyatta.com>
> > Date: Tue, 17 Jun 2008 09:52:14 -0700
> >
> > > Move statistics to net_device structure. Also, update last_rx on bridge
> > > device (even though only bonding seems to use it).
> > >
> > > Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
> >
> > This patch doesn't apply even remotely to anything I have in my tree.
> > What did you generate this against?
>
>
> Patch was against 2.6.26-rc6
Yet claimed for "2.6.27" :-)
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-06-17 23:50 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-17 16:52 [PATCH 0/3] Bridge patches for 2.6.27 Stephen Hemminger
2008-06-17 16:52 ` [PATCH 1/3] bridge: handle process all link-local frames Stephen Hemminger
2008-06-17 23:11 ` David Miller
2008-06-17 16:52 ` [PATCH 2/3] bridge: make bridge address settings sticky Stephen Hemminger
2008-06-17 23:11 ` David Miller
2008-06-17 16:52 ` [PATCH 3/3] bridge: use statistics in net_device Stephen Hemminger
2008-06-17 23:14 ` David Miller
2008-06-17 23:35 ` Stephen Hemminger
2008-06-17 23:50 ` 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).