[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[openap-cvs] : linux/net/bridge br.c,1.1.1.1,1.2 br_device.c,1.1.1.1,1.2
From: |
David C Wang <address@hidden> |
Subject: |
[openap-cvs] : linux/net/bridge br.c,1.1.1.1,1.2 br_device.c,1.1.1.1,1.2 br_if.c,1.1.1.1,1.2 br_input.c,1.1.1.1,1.2 br_private.h,1.1.1.1,1.2 br_stp.c,1.1.1.1,1.2 br_stp_timer.c,1.1.1.1,1.2 |
Date: |
Tue, 14 May 2002 15:53:34 -0400 |
Update of /cvsroot/openap/linux/net/bridge
In directory subversions:/tmp/cvs-serv5742/net/bridge
Modified Files:
br.c br_device.c br_if.c br_input.c br_private.h br_stp.c
br_stp_timer.c
Log Message:
updated linux kernel pristine sources to openap release 1.1
Index: br.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br.c 14 May 2002 18:13:31 -0000 1.1.1.1
+++ br.c 14 May 2002 19:53:31 -0000 1.2
@@ -43,9 +43,7 @@
printk(KERN_INFO "NET4: Ethernet Bridge 008 for NET4.0\n");
br_handle_frame_hook = br_handle_frame;
-#ifdef CONFIG_INET
br_ioctl_hook = br_ioctl_deviceless_stub;
-#endif
#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
br_fdb_get_hook = br_fdb_get;
br_fdb_put_hook = br_fdb_put;
@@ -62,9 +60,7 @@
static void __br_clear_ioctl_hook(void)
{
-#ifdef CONFIG_INET
br_ioctl_hook = NULL;
-#endif
}
static void __exit br_deinit(void)
Index: br_device.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_device.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_device.c 14 May 2002 18:13:31 -0000 1.1.1.1
+++ br_device.c 14 May 2002 19:53:31 -0000 1.2
@@ -71,7 +71,7 @@
return 0;
}
-static int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
+int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct net_bridge *br;
int ret;
Index: br_if.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_if.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_if.c 14 May 2002 18:13:32 -0000 1.1.1.1
+++ br_if.c 14 May 2002 19:53:31 -0000 1.2
@@ -226,6 +226,9 @@
if (dev->flags & IFF_LOOPBACK || dev->type != ARPHRD_ETHER)
return -EINVAL;
+ if (dev->hard_start_xmit == br_dev_xmit)
+ return -ELOOP;
+
dev_hold(dev);
write_lock_bh(&br->lock);
if ((p = new_nbp(br, dev)) == NULL) {
Index: br_input.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_input.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_input.c 14 May 2002 18:13:31 -0000 1.1.1.1
+++ br_input.c 14 May 2002 19:53:31 -0000 1.2
@@ -46,7 +46,7 @@
br_pass_frame_up_finish);
}
-static void __br_handle_frame(struct sk_buff *skb)
+static int br_handle_frame_finish(struct sk_buff *skb)
{
struct net_bridge *br;
unsigned char *dest;
@@ -57,103 +57,112 @@
dest = skb->mac.ethernet->h_dest;
p = skb->dev->br_port;
- br = p->br;
- passedup = 0;
+ if (p == NULL)
+ goto err_nolock;
- if (!(br->dev.flags & IFF_UP) ||
- p->state == BR_STATE_DISABLED)
- goto freeandout;
+ br = p->br;
+ read_lock(&br->lock);
+ if (skb->dev->br_port == NULL)
+ goto err;
+ passedup = 0;
if (br->dev.flags & IFF_PROMISC) {
struct sk_buff *skb2;
skb2 = skb_clone(skb, GFP_ATOMIC);
- if (skb2) {
+ if (skb2 != NULL) {
passedup = 1;
br_pass_frame_up(br, skb2);
}
}
- if (skb->mac.ethernet->h_source[0] & 1)
- goto freeandout;
-
- if (!passedup &&
- (dest[0] & 1) &&
- (br->dev.flags & IFF_ALLMULTI || br->dev.mc_list != NULL)) {
- struct sk_buff *skb2;
-
- skb2 = skb_clone(skb, GFP_ATOMIC);
- if (skb2) {
- passedup = 1;
- br_pass_frame_up(br, skb2);
- }
- }
-
- if (br->stp_enabled &&
- !memcmp(dest, bridge_ula, 5) &&
- !(dest[5] & 0xF0))
- goto handle_special_frame;
-
- if (p->state == BR_STATE_LEARNING ||
- p->state == BR_STATE_FORWARDING)
- br_fdb_insert(br, p, skb->mac.ethernet->h_source, 0);
-
- if (p->state != BR_STATE_FORWARDING)
- goto freeandout;
-
if (dest[0] & 1) {
- br_flood_forward(br, skb, 1);
+ br_flood_forward(br, skb, !passedup);
if (!passedup)
br_pass_frame_up(br, skb);
- else
- kfree_skb(skb);
- return;
+ goto out;
}
dst = br_fdb_get(br, dest);
-
if (dst != NULL && dst->is_local) {
if (!passedup)
br_pass_frame_up(br, skb);
else
kfree_skb(skb);
br_fdb_put(dst);
- return;
+ goto out;
}
if (dst != NULL) {
br_forward(dst->dst, skb);
br_fdb_put(dst);
- return;
+ goto out;
}
br_flood_forward(br, skb, 0);
- return;
- handle_special_frame:
- if (!dest[5]) {
- br_stp_handle_bpdu(skb);
- return;
- }
+out:
+ read_unlock(&br->lock);
+ return 0;
- freeandout:
+err:
+ read_unlock(&br->lock);
+err_nolock:
kfree_skb(skb);
+ return 0;
}
-static int br_handle_frame_finish(struct sk_buff *skb)
+void br_handle_frame(struct sk_buff *skb)
{
struct net_bridge *br;
+ unsigned char *dest;
+ struct net_bridge_port *p;
- br = skb->dev->br_port->br;
+ dest = skb->mac.ethernet->h_dest;
+
+ p = skb->dev->br_port;
+ if (p == NULL)
+ goto err_nolock;
+
+ br = p->br;
read_lock(&br->lock);
- __br_handle_frame(skb);
- read_unlock(&br->lock);
+ if (skb->dev->br_port == NULL)
+ goto err;
- return 0;
-}
+ if (!(br->dev.flags & IFF_UP) ||
+ p->state == BR_STATE_DISABLED)
+ goto err;
-void br_handle_frame(struct sk_buff *skb)
-{
- NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
+ if (skb->mac.ethernet->h_source[0] & 1)
+ goto err;
+
+ if (p->state == BR_STATE_LEARNING ||
+ p->state == BR_STATE_FORWARDING)
+ br_fdb_insert(br, p, skb->mac.ethernet->h_source, 0);
+
+ if (br->stp_enabled &&
+ !memcmp(dest, bridge_ula, 5) &&
+ !(dest[5] & 0xF0))
+ goto handle_special_frame;
+
+ if (p->state == BR_STATE_FORWARDING) {
+ NF_HOOK(PF_BRIDGE, NF_BR_PRE_ROUTING, skb, skb->dev, NULL,
br_handle_frame_finish);
+ read_unlock(&br->lock);
+ return;
+ }
+
+err:
+ read_unlock(&br->lock);
+err_nolock:
+ kfree_skb(skb);
+ return;
+
+handle_special_frame:
+ if (!dest[5]) {
+ br_stp_handle_bpdu(skb);
+ return;
+ }
+
+ kfree_skb(skb);
}
Index: br_private.h
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_private.h,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_private.h 14 May 2002 18:13:32 -0000 1.1.1.1
+++ br_private.h 14 May 2002 19:53:31 -0000 1.2
@@ -120,6 +120,7 @@
extern void br_inc_use_count(void);
/* br_device.c */
+extern int br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
extern void br_dev_setup(struct net_device *dev);
/* br_fdb.c */
Index: br_stp.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_stp.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_stp.c 14 May 2002 18:13:31 -0000 1.1.1.1
+++ br_stp.c 14 May 2002 19:53:31 -0000 1.2
@@ -371,7 +371,7 @@
if (p->state == BR_STATE_BLOCKING) {
printk(KERN_INFO "%s: port %i(%s) entering %s state\n",
p->br->dev.name, p->port_no, p->dev->name, "listening");
-
+
p->state = BR_STATE_LISTENING;
br_timer_set(&p->forward_delay_timer, jiffies);
}
Index: br_stp_timer.c
===================================================================
RCS file: /cvsroot/openap/linux/net/bridge/br_stp_timer.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
diff -u -r1.1.1.1 -r1.2
--- br_stp_timer.c 14 May 2002 18:13:31 -0000 1.1.1.1
+++ br_stp_timer.c 14 May 2002 19:53:31 -0000 1.2
@@ -17,6 +17,7 @@
#include <linux/if_bridge.h>
#include <linux/smp_lock.h>
#include <asm/uaccess.h>
+#include <asm/wl11000.h>
#include "br_private.h"
#include "br_private_stp.h"
@@ -83,12 +84,16 @@
if (p->state == BR_STATE_LISTENING) {
printk(KERN_INFO "%s: port %i(%s) entering %s state\n",
p->br->dev.name, p->port_no, p->dev->name, "learning");
+
+ wl11000_set_led(WL11000_LED_BR_BLINK);
p->state = BR_STATE_LEARNING;
br_timer_set(&p->forward_delay_timer, jiffies);
} else if (p->state == BR_STATE_LEARNING) {
printk(KERN_INFO "%s: port %i(%s) entering %s state\n",
p->br->dev.name, p->port_no, p->dev->name, "forwarding");
+
+ wl11000_set_led(WL11000_LED_BR_ON);
p->state = BR_STATE_FORWARDING;
if (br_is_designated_for_some_port(p->br))
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [openap-cvs] : linux/net/bridge br.c,1.1.1.1,1.2 br_device.c,1.1.1.1,1.2 br_if.c,1.1.1.1,1.2 br_input.c,1.1.1.1,1.2 br_private.h,1.1.1.1,1.2 br_stp.c,1.1.1.1,1.2 br_stp_timer.c,1.1.1.1,1.2,
David C Wang <address@hidden> <=
- Prev by Date:
[openap-cvs] : linux/arch/i386 Makefile,1.1.1.1,1.2 config.in,1.1.1.1,1.2 vmlinux.lds,1.1.1.1,1.2
- Next by Date:
[openap-cvs] : linux/include/asm-i386 timex.h,1.1.1.1,1.2
- Previous by thread:
[openap-cvs] : linux/arch/i386 Makefile,1.1.1.1,1.2 config.in,1.1.1.1,1.2 vmlinux.lds,1.1.1.1,1.2
- Next by thread:
[openap-cvs] : linux/include/asm-i386 timex.h,1.1.1.1,1.2
- Index(es):