diff options
author | davem <davem> | 2001-12-24 00:59:55 +0000 |
---|---|---|
committer | davem <davem> | 2001-12-24 00:59:55 +0000 |
commit | 5b15431c54ce9a6d8c7bc733c5835fd4d62d3b11 (patch) | |
tree | ebc989e5af8cfd906e378f7de672f33bc16b70d4 | |
parent | 8e415ed15437f6c879fd3c04b3d3b1bbdbb3b5da (diff) | |
download | netdev-vger-cvs-5b15431c54ce9a6d8c7bc733c5835fd4d62d3b11.tar.gz |
Do not allow enslavement of a bridge device to
another bridge device, causes recursion and does not
make any sense anyways.
From Lennert Buytenhek.
-rw-r--r-- | net/bridge/br_device.c | 4 | ||||
-rw-r--r-- | net/bridge/br_if.c | 5 | ||||
-rw-r--r-- | net/bridge/br_private.h | 3 |
3 files changed, 8 insertions, 4 deletions
diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c index 42e69ed56..e9dde42cc 100644 --- a/net/bridge/br_device.c +++ b/net/bridge/br_device.c @@ -5,7 +5,7 @@ * Authors: * Lennert Buytenhek <buytenh@gnu.org> * - * $Id: br_device.c,v 1.5 2001-08-14 22:05:57 davem Exp $ + * $Id: br_device.c,v 1.6 2001-12-24 00:59:55 davem Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -71,7 +71,7 @@ static int __br_dev_xmit(struct sk_buff *skb, struct net_device *dev) 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; diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 0c52e6500..7bb9a9fae 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -5,7 +5,7 @@ * Authors: * Lennert Buytenhek <buytenh@gnu.org> * - * $Id: br_if.c,v 1.6 2001-11-24 17:51:03 davem Exp $ + * $Id: br_if.c,v 1.7 2001-12-24 00:59:55 davem Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -226,6 +226,9 @@ int br_add_if(struct net_bridge *br, struct net_device *dev) 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) { diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 4930b19fb..4420bbf09 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -4,7 +4,7 @@ * Authors: * Lennert Buytenhek <buytenh@gnu.org> * - * $Id: br_private.h,v 1.6 2001-06-01 09:28:28 davem Exp $ + * $Id: br_private.h,v 1.7 2001-12-24 00:59:55 davem Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -121,6 +121,7 @@ extern void br_inc_use_count(void); /* br_device.c */ extern void br_dev_setup(struct net_device *dev); +extern int br_dev_xmit(struct sk_buff *skb, struct net_device *dev); /* br_fdb.c */ extern void br_fdb_changeaddr(struct net_bridge_port *p, |