aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'net/bridge/br_private.h')
-rw-r--r--net/bridge/br_private.h50
1 files changed, 33 insertions, 17 deletions
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 75c90edaf7db..54578f274d85 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -64,7 +64,8 @@ struct net_bridge_fdb_entry
64 struct net_bridge_port *dst; 64 struct net_bridge_port *dst;
65 65
66 struct rcu_head rcu; 66 struct rcu_head rcu;
67 unsigned long ageing_timer; 67 unsigned long updated;
68 unsigned long used;
68 mac_addr addr; 69 mac_addr addr;
69 unsigned char is_local; 70 unsigned char is_local;
70 unsigned char is_static; 71 unsigned char is_static;
@@ -72,7 +73,7 @@ struct net_bridge_fdb_entry
72 73
73struct net_bridge_port_group { 74struct net_bridge_port_group {
74 struct net_bridge_port *port; 75 struct net_bridge_port *port;
75 struct net_bridge_port_group *next; 76 struct net_bridge_port_group __rcu *next;
76 struct hlist_node mglist; 77 struct hlist_node mglist;
77 struct rcu_head rcu; 78 struct rcu_head rcu;
78 struct timer_list timer; 79 struct timer_list timer;
@@ -84,13 +85,13 @@ struct net_bridge_port_group {
84struct net_bridge_mdb_entry 85struct net_bridge_mdb_entry
85{ 86{
86 struct hlist_node hlist[2]; 87 struct hlist_node hlist[2];
87 struct hlist_node mglist;
88 struct net_bridge *br; 88 struct net_bridge *br;
89 struct net_bridge_port_group *ports; 89 struct net_bridge_port_group __rcu *ports;
90 struct rcu_head rcu; 90 struct rcu_head rcu;
91 struct timer_list timer; 91 struct timer_list timer;
92 struct timer_list query_timer; 92 struct timer_list query_timer;
93 struct br_ip addr; 93 struct br_ip addr;
94 bool mglist;
94 u32 queries_sent; 95 u32 queries_sent;
95}; 96};
96 97
@@ -151,11 +152,20 @@ struct net_bridge_port
151#endif 152#endif
152}; 153};
153 154
154#define br_port_get_rcu(dev) \
155 ((struct net_bridge_port *) rcu_dereference(dev->rx_handler_data))
156#define br_port_get(dev) ((struct net_bridge_port *) dev->rx_handler_data)
157#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT) 155#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT)
158 156
157static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
158{
159 struct net_bridge_port *port = rcu_dereference(dev->rx_handler_data);
160 return br_port_exists(dev) ? port : NULL;
161}
162
163static inline struct net_bridge_port *br_port_get_rtnl(struct net_device *dev)
164{
165 return br_port_exists(dev) ?
166 rtnl_dereference(dev->rx_handler_data) : NULL;
167}
168
159struct br_cpu_netstats { 169struct br_cpu_netstats {
160 u64 rx_packets; 170 u64 rx_packets;
161 u64 rx_bytes; 171 u64 rx_bytes;
@@ -173,7 +183,6 @@ struct net_bridge
173 struct br_cpu_netstats __percpu *stats; 183 struct br_cpu_netstats __percpu *stats;
174 spinlock_t hash_lock; 184 spinlock_t hash_lock;
175 struct hlist_head hash[BR_HASH_SIZE]; 185 struct hlist_head hash[BR_HASH_SIZE];
176 unsigned long feature_mask;
177#ifdef CONFIG_BRIDGE_NETFILTER 186#ifdef CONFIG_BRIDGE_NETFILTER
178 struct rtable fake_rtable; 187 struct rtable fake_rtable;
179 bool nf_call_iptables; 188 bool nf_call_iptables;
@@ -227,9 +236,8 @@ struct net_bridge
227 unsigned long multicast_startup_query_interval; 236 unsigned long multicast_startup_query_interval;
228 237
229 spinlock_t multicast_lock; 238 spinlock_t multicast_lock;
230 struct net_bridge_mdb_htable *mdb; 239 struct net_bridge_mdb_htable __rcu *mdb;
231 struct hlist_head router_list; 240 struct hlist_head router_list;
232 struct hlist_head mglist;
233 241
234 struct timer_list multicast_router_timer; 242 struct timer_list multicast_router_timer;
235 struct timer_list multicast_querier_timer; 243 struct timer_list multicast_querier_timer;
@@ -345,6 +353,9 @@ extern int br_fdb_insert(struct net_bridge *br,
345extern void br_fdb_update(struct net_bridge *br, 353extern void br_fdb_update(struct net_bridge *br,
346 struct net_bridge_port *source, 354 struct net_bridge_port *source,
347 const unsigned char *addr); 355 const unsigned char *addr);
356extern int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb);
357extern int br_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg);
358extern int br_fdb_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg);
348 359
349/* br_forward.c */ 360/* br_forward.c */
350extern void br_deliver(const struct net_bridge_port *to, 361extern void br_deliver(const struct net_bridge_port *to,
@@ -367,11 +378,11 @@ extern int br_add_if(struct net_bridge *br,
367extern int br_del_if(struct net_bridge *br, 378extern int br_del_if(struct net_bridge *br,
368 struct net_device *dev); 379 struct net_device *dev);
369extern int br_min_mtu(const struct net_bridge *br); 380extern int br_min_mtu(const struct net_bridge *br);
370extern void br_features_recompute(struct net_bridge *br); 381extern u32 br_features_recompute(struct net_bridge *br, u32 features);
371 382
372/* br_input.c */ 383/* br_input.c */
373extern int br_handle_frame_finish(struct sk_buff *skb); 384extern int br_handle_frame_finish(struct sk_buff *skb);
374extern struct sk_buff *br_handle_frame(struct sk_buff *skb); 385extern rx_handler_result_t br_handle_frame(struct sk_buff **pskb);
375 386
376/* br_ioctl.c */ 387/* br_ioctl.c */
377extern int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); 388extern int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
@@ -483,20 +494,25 @@ extern struct net_bridge_port *br_get_port(struct net_bridge *br,
483extern void br_init_port(struct net_bridge_port *p); 494extern void br_init_port(struct net_bridge_port *p);
484extern void br_become_designated_port(struct net_bridge_port *p); 495extern void br_become_designated_port(struct net_bridge_port *p);
485 496
497extern int br_set_forward_delay(struct net_bridge *br, unsigned long x);
498extern int br_set_hello_time(struct net_bridge *br, unsigned long x);
499extern int br_set_max_age(struct net_bridge *br, unsigned long x);
500
501
486/* br_stp_if.c */ 502/* br_stp_if.c */
487extern void br_stp_enable_bridge(struct net_bridge *br); 503extern void br_stp_enable_bridge(struct net_bridge *br);
488extern void br_stp_disable_bridge(struct net_bridge *br); 504extern void br_stp_disable_bridge(struct net_bridge *br);
489extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val); 505extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val);
490extern void br_stp_enable_port(struct net_bridge_port *p); 506extern void br_stp_enable_port(struct net_bridge_port *p);
491extern void br_stp_disable_port(struct net_bridge_port *p); 507extern void br_stp_disable_port(struct net_bridge_port *p);
492extern void br_stp_recalculate_bridge_id(struct net_bridge *br); 508extern bool br_stp_recalculate_bridge_id(struct net_bridge *br);
493extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); 509extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
494extern void br_stp_set_bridge_priority(struct net_bridge *br, 510extern void br_stp_set_bridge_priority(struct net_bridge *br,
495 u16 newprio); 511 u16 newprio);
496extern void br_stp_set_port_priority(struct net_bridge_port *p, 512extern int br_stp_set_port_priority(struct net_bridge_port *p,
497 u8 newprio); 513 unsigned long newprio);
498extern void br_stp_set_path_cost(struct net_bridge_port *p, 514extern int br_stp_set_path_cost(struct net_bridge_port *p,
499 u32 path_cost); 515 unsigned long path_cost);
500extern ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id); 516extern ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
501 517
502/* br_stp_bpdu.c */ 518/* br_stp_bpdu.c */