]> Pileus Git - ~andy/linux/blobdiff - net/bridge/br_private.h
bridge: Add vlan support to static neighbors
[~andy/linux] / net / bridge / br_private.h
index 1ae6395a036986724095466632898ef052ac7588..799dbb37e5a2353ed35f21b68f102fdb60590261 100644 (file)
@@ -63,6 +63,7 @@ struct br_ip
 #endif
        } u;
        __be16          proto;
+       __u16           vid;
 };
 
 struct net_port_vlans {
@@ -88,6 +89,7 @@ struct net_bridge_fdb_entry
        mac_addr                        addr;
        unsigned char                   is_local;
        unsigned char                   is_static;
+       __u16                           vlan_id;
 };
 
 struct net_bridge_port_group {
@@ -373,7 +375,8 @@ extern void br_fdb_cleanup(unsigned long arg);
 extern void br_fdb_delete_by_port(struct net_bridge *br,
                                  const struct net_bridge_port *p, int do_all);
 extern struct net_bridge_fdb_entry *__br_fdb_get(struct net_bridge *br,
-                                                const unsigned char *addr);
+                                                const unsigned char *addr,
+                                                __u16 vid);
 extern int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
 extern int br_fdb_fillbuf(struct net_bridge *br, void *buf,
                          unsigned long count, unsigned long off);
@@ -382,9 +385,10 @@ extern int br_fdb_insert(struct net_bridge *br,
                         const unsigned char *addr);
 extern void br_fdb_update(struct net_bridge *br,
                          struct net_bridge_port *source,
-                         const unsigned char *addr);
+                         const unsigned char *addr,
+                         u16 vid);
 
-extern int br_fdb_delete(struct ndmsg *ndm,
+extern int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
                         struct net_device *dev,
                         const unsigned char *addr);
 extern int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[],
@@ -573,13 +577,13 @@ extern void nbp_vlan_flush(struct net_bridge_port *port);
 static inline struct net_port_vlans *br_get_vlan_info(
                                                const struct net_bridge *br)
 {
-       return rcu_dereference(br->vlan_info);
+       return rcu_dereference_rtnl(br->vlan_info);
 }
 
 static inline struct net_port_vlans *nbp_get_vlan_info(
                                                const struct net_bridge_port *p)
 {
-       return rcu_dereference(p->vlan_info);
+       return rcu_dereference_rtnl(p->vlan_info);
 }
 
 /* Since bridge now depends on 8021Q module, but the time bridge sees the