git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
net
/
bridge
/
br_device.c
diff --git
a/net/bridge/br_device.c
b/net/bridge/br_device.c
index
b7e6adc
..
44a9762
100644
(file)
--- a/
net/bridge/br_device.c
+++ b/
net/bridge/br_device.c
@@
-28,43
+28,28
@@
static struct net_device_stats *br_dev_get_stats(struct net_device *dev)
return &br->statistics;
}
return &br->statistics;
}
-
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;
-
unsigned char *dest
;
+ struct net_bridge *br
= netdev_priv(dev)
;
+
const unsigned char *dest = skb->data
;
struct net_bridge_fdb_entry *dst;
struct net_bridge_fdb_entry *dst;
- br = dev->priv;
br->statistics.tx_packets++;
br->statistics.tx_bytes += skb->len;
br->statistics.tx_packets++;
br->statistics.tx_bytes += skb->len;
-
dest =
skb->mac.raw = skb->data;
+ skb->mac.raw = skb->data;
skb_pull(skb, ETH_HLEN);
skb_pull(skb, ETH_HLEN);
- if (dest[0] & 1) {
+ rcu_read_lock();
+ if (dest[0] & 1)
br_flood_deliver(br, skb, 0);
br_flood_deliver(br, skb, 0);
- return 0;
- }
-
- if ((dst = br_fdb_get(br, dest)) != NULL) {
+ else if ((dst = __br_fdb_get(br, dest)) != NULL)
br_deliver(dst->dst, skb);
br_deliver(dst->dst, skb);
- br_fdb_put(dst);
- return 0;
- }
-
- br_flood_deliver(br, skb, 0);
- return 0;
-}
-
-int br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-{
- int ret;
+ else
+ br_flood_deliver(br, skb, 0);
- rcu_read_lock();
- ret = __br_dev_xmit(skb, dev);
rcu_read_unlock();
rcu_read_unlock();
-
- return ret;
+ return 0;
}
static int br_dev_open(struct net_device *dev)
}
static int br_dev_open(struct net_device *dev)
@@
-89,6
+74,15
@@
static int br_dev_stop(struct net_device *dev)
return 0;
}
return 0;
}
+static int br_change_mtu(struct net_device *dev, int new_mtu)
+{
+ if ((new_mtu < 68) || new_mtu > br_min_mtu(dev->priv))
+ return -EINVAL;
+
+ dev->mtu = new_mtu;
+ return 0;
+}
+
static int br_dev_accept_fastpath(struct net_device *dev, struct dst_entry *dst)
{
return -1;
static int br_dev_accept_fastpath(struct net_device *dev, struct dst_entry *dst)
{
return -1;
@@
-105,6
+99,7
@@
void br_dev_setup(struct net_device *dev)
dev->hard_start_xmit = br_dev_xmit;
dev->open = br_dev_open;
dev->set_multicast_list = br_dev_set_multicast_list;
dev->hard_start_xmit = br_dev_xmit;
dev->open = br_dev_open;
dev->set_multicast_list = br_dev_set_multicast_list;
+ dev->change_mtu = br_change_mtu;
dev->destructor = free_netdev;
SET_MODULE_OWNER(dev);
dev->stop = br_dev_stop;
dev->destructor = free_netdev;
SET_MODULE_OWNER(dev);
dev->stop = br_dev_stop;