openap-cvs
[Top][All Lists]
Advanced

[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))




reply via email to

[Prev in Thread] Current Thread [Next in Thread]