diff options
Diffstat (limited to 'net/bridge/br_private.h')
-rw-r--r-- | net/bridge/br_private.h | 50 |
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 | ||
73 | struct net_bridge_port_group { | 74 | struct 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 { | |||
84 | struct net_bridge_mdb_entry | 85 | struct 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 | ||
157 | static 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 | |||
163 | static 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 | |||
159 | struct br_cpu_netstats { | 169 | struct 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, | |||
345 | extern void br_fdb_update(struct net_bridge *br, | 353 | extern 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); |
356 | extern int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb); | ||
357 | extern int br_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg); | ||
358 | extern int br_fdb_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg); | ||
348 | 359 | ||
349 | /* br_forward.c */ | 360 | /* br_forward.c */ |
350 | extern void br_deliver(const struct net_bridge_port *to, | 361 | extern void br_deliver(const struct net_bridge_port *to, |
@@ -367,11 +378,11 @@ extern int br_add_if(struct net_bridge *br, | |||
367 | extern int br_del_if(struct net_bridge *br, | 378 | extern int br_del_if(struct net_bridge *br, |
368 | struct net_device *dev); | 379 | struct net_device *dev); |
369 | extern int br_min_mtu(const struct net_bridge *br); | 380 | extern int br_min_mtu(const struct net_bridge *br); |
370 | extern void br_features_recompute(struct net_bridge *br); | 381 | extern u32 br_features_recompute(struct net_bridge *br, u32 features); |
371 | 382 | ||
372 | /* br_input.c */ | 383 | /* br_input.c */ |
373 | extern int br_handle_frame_finish(struct sk_buff *skb); | 384 | extern int br_handle_frame_finish(struct sk_buff *skb); |
374 | extern struct sk_buff *br_handle_frame(struct sk_buff *skb); | 385 | extern rx_handler_result_t br_handle_frame(struct sk_buff **pskb); |
375 | 386 | ||
376 | /* br_ioctl.c */ | 387 | /* br_ioctl.c */ |
377 | extern int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); | 388 | extern 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, | |||
483 | extern void br_init_port(struct net_bridge_port *p); | 494 | extern void br_init_port(struct net_bridge_port *p); |
484 | extern void br_become_designated_port(struct net_bridge_port *p); | 495 | extern void br_become_designated_port(struct net_bridge_port *p); |
485 | 496 | ||
497 | extern int br_set_forward_delay(struct net_bridge *br, unsigned long x); | ||
498 | extern int br_set_hello_time(struct net_bridge *br, unsigned long x); | ||
499 | extern int br_set_max_age(struct net_bridge *br, unsigned long x); | ||
500 | |||
501 | |||
486 | /* br_stp_if.c */ | 502 | /* br_stp_if.c */ |
487 | extern void br_stp_enable_bridge(struct net_bridge *br); | 503 | extern void br_stp_enable_bridge(struct net_bridge *br); |
488 | extern void br_stp_disable_bridge(struct net_bridge *br); | 504 | extern void br_stp_disable_bridge(struct net_bridge *br); |
489 | extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val); | 505 | extern void br_stp_set_enabled(struct net_bridge *br, unsigned long val); |
490 | extern void br_stp_enable_port(struct net_bridge_port *p); | 506 | extern void br_stp_enable_port(struct net_bridge_port *p); |
491 | extern void br_stp_disable_port(struct net_bridge_port *p); | 507 | extern void br_stp_disable_port(struct net_bridge_port *p); |
492 | extern void br_stp_recalculate_bridge_id(struct net_bridge *br); | 508 | extern bool br_stp_recalculate_bridge_id(struct net_bridge *br); |
493 | extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); | 509 | extern void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); |
494 | extern void br_stp_set_bridge_priority(struct net_bridge *br, | 510 | extern void br_stp_set_bridge_priority(struct net_bridge *br, |
495 | u16 newprio); | 511 | u16 newprio); |
496 | extern void br_stp_set_port_priority(struct net_bridge_port *p, | 512 | extern int br_stp_set_port_priority(struct net_bridge_port *p, |
497 | u8 newprio); | 513 | unsigned long newprio); |
498 | extern void br_stp_set_path_cost(struct net_bridge_port *p, | 514 | extern int br_stp_set_path_cost(struct net_bridge_port *p, |
499 | u32 path_cost); | 515 | unsigned long path_cost); |
500 | extern ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id); | 516 | extern 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 */ |