aboutsummaryrefslogtreecommitdiffstats
path: root/net/bridge/br_private.h
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /net/bridge/br_private.h
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'net/bridge/br_private.h')
-rw-r--r--net/bridge/br_private.h96
1 files changed, 18 insertions, 78 deletions
diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h
index 711094aed41..857a021deea 100644
--- a/net/bridge/br_private.h
+++ b/net/bridge/br_private.h
@@ -29,11 +29,6 @@
29 29
30#define BR_VERSION "2.3" 30#define BR_VERSION "2.3"
31 31
32/* Control of forwarding link local multicast */
33#define BR_GROUPFWD_DEFAULT 0
34/* Don't allow forwarding control protocols like STP and LLDP */
35#define BR_GROUPFWD_RESTRICTED 0x4007u
36
37/* Path to usermode spanning tree program */ 32/* Path to usermode spanning tree program */
38#define BR_STP_PROG "/sbin/bridge-stp" 33#define BR_STP_PROG "/sbin/bridge-stp"
39 34
@@ -56,7 +51,7 @@ struct br_ip
56{ 51{
57 union { 52 union {
58 __be32 ip4; 53 __be32 ip4;
59#if IS_ENABLED(CONFIG_IPV6) 54#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
60 struct in6_addr ip6; 55 struct in6_addr ip6;
61#endif 56#endif
62 } u; 57 } u;
@@ -82,8 +77,9 @@ struct net_bridge_port_group {
82 struct hlist_node mglist; 77 struct hlist_node mglist;
83 struct rcu_head rcu; 78 struct rcu_head rcu;
84 struct timer_list timer; 79 struct timer_list timer;
80 struct timer_list query_timer;
85 struct br_ip addr; 81 struct br_ip addr;
86 unsigned char state; 82 u32 queries_sent;
87}; 83};
88 84
89struct net_bridge_mdb_entry 85struct net_bridge_mdb_entry
@@ -93,8 +89,10 @@ struct net_bridge_mdb_entry
93 struct net_bridge_port_group __rcu *ports; 89 struct net_bridge_port_group __rcu *ports;
94 struct rcu_head rcu; 90 struct rcu_head rcu;
95 struct timer_list timer; 91 struct timer_list timer;
92 struct timer_list query_timer;
96 struct br_ip addr; 93 struct br_ip addr;
97 bool mglist; 94 bool mglist;
95 u32 queries_sent;
98}; 96};
99 97
100struct net_bridge_mdb_htable 98struct net_bridge_mdb_htable
@@ -136,9 +134,6 @@ struct net_bridge_port
136 134
137 unsigned long flags; 135 unsigned long flags;
138#define BR_HAIRPIN_MODE 0x00000001 136#define BR_HAIRPIN_MODE 0x00000001
139#define BR_BPDU_GUARD 0x00000002
140#define BR_ROOT_BLOCK 0x00000004
141#define BR_MULTICAST_FAST_LEAVE 0x00000008
142 137
143#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 138#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
144 u32 multicast_startup_queries_sent; 139 u32 multicast_startup_queries_sent;
@@ -162,9 +157,7 @@ struct net_bridge_port
162 157
163static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev) 158static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
164{ 159{
165 struct net_bridge_port *port = 160 struct net_bridge_port *port = rcu_dereference(dev->rx_handler_data);
166 rcu_dereference_rtnl(dev->rx_handler_data);
167
168 return br_port_exists(dev) ? port : NULL; 161 return br_port_exists(dev) ? port : NULL;
169} 162}
170 163
@@ -200,8 +193,6 @@ struct net_bridge
200 unsigned long flags; 193 unsigned long flags;
201#define BR_SET_MAC_ADDR 0x00000001 194#define BR_SET_MAC_ADDR 0x00000001
202 195
203 u16 group_fwd_mask;
204
205 /* STP */ 196 /* STP */
206 bridge_id designated_root; 197 bridge_id designated_root;
207 bridge_id bridge_id; 198 bridge_id bridge_id;
@@ -230,7 +221,6 @@ struct net_bridge
230 unsigned char multicast_router; 221 unsigned char multicast_router;
231 222
232 u8 multicast_disabled:1; 223 u8 multicast_disabled:1;
233 u8 multicast_querier:1;
234 224
235 u32 hash_elasticity; 225 u32 hash_elasticity;
236 u32 hash_max; 226 u32 hash_max;
@@ -294,6 +284,7 @@ struct br_input_skb_cb {
294 pr_debug("%s: " format, (br)->dev->name, ##args) 284 pr_debug("%s: " format, (br)->dev->name, ##args)
295 285
296extern struct notifier_block br_device_notifier; 286extern struct notifier_block br_device_notifier;
287extern const u8 br_group_address[ETH_ALEN];
297 288
298/* called under bridge lock */ 289/* called under bridge lock */
299static inline int br_is_root_bridge(const struct net_bridge *br) 290static inline int br_is_root_bridge(const struct net_bridge *br)
@@ -321,7 +312,7 @@ static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
321 netpoll_send_skb(np, skb); 312 netpoll_send_skb(np, skb);
322} 313}
323 314
324extern int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp); 315extern int br_netpoll_enable(struct net_bridge_port *p);
325extern void br_netpoll_disable(struct net_bridge_port *p); 316extern void br_netpoll_disable(struct net_bridge_port *p);
326#else 317#else
327static inline struct netpoll_info *br_netpoll_info(struct net_bridge *br) 318static inline struct netpoll_info *br_netpoll_info(struct net_bridge *br)
@@ -334,7 +325,7 @@ static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
334{ 325{
335} 326}
336 327
337static inline int br_netpoll_enable(struct net_bridge_port *p, gfp_t gfp) 328static inline int br_netpoll_enable(struct net_bridge_port *p)
338{ 329{
339 return 0; 330 return 0;
340} 331}
@@ -350,7 +341,6 @@ extern void br_fdb_fini(void);
350extern void br_fdb_flush(struct net_bridge *br); 341extern void br_fdb_flush(struct net_bridge *br);
351extern void br_fdb_changeaddr(struct net_bridge_port *p, 342extern void br_fdb_changeaddr(struct net_bridge_port *p,
352 const unsigned char *newaddr); 343 const unsigned char *newaddr);
353extern void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
354extern void br_fdb_cleanup(unsigned long arg); 344extern void br_fdb_cleanup(unsigned long arg);
355extern void br_fdb_delete_by_port(struct net_bridge *br, 345extern void br_fdb_delete_by_port(struct net_bridge *br,
356 const struct net_bridge_port *p, int do_all); 346 const struct net_bridge_port *p, int do_all);
@@ -365,18 +355,9 @@ extern int br_fdb_insert(struct net_bridge *br,
365extern void br_fdb_update(struct net_bridge *br, 355extern void br_fdb_update(struct net_bridge *br,
366 struct net_bridge_port *source, 356 struct net_bridge_port *source,
367 const unsigned char *addr); 357 const unsigned char *addr);
368 358extern int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb);
369extern int br_fdb_delete(struct ndmsg *ndm, 359extern int br_fdb_add(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg);
370 struct net_device *dev, 360extern int br_fdb_delete(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg);
371 const unsigned char *addr);
372extern int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[],
373 struct net_device *dev,
374 const unsigned char *addr,
375 u16 nlh_flags);
376extern int br_fdb_dump(struct sk_buff *skb,
377 struct netlink_callback *cb,
378 struct net_device *dev,
379 int idx);
380 361
381/* br_forward.c */ 362/* br_forward.c */
382extern void br_deliver(const struct net_bridge_port *to, 363extern void br_deliver(const struct net_bridge_port *to,
@@ -399,8 +380,7 @@ extern int br_add_if(struct net_bridge *br,
399extern int br_del_if(struct net_bridge *br, 380extern int br_del_if(struct net_bridge *br,
400 struct net_device *dev); 381 struct net_device *dev);
401extern int br_min_mtu(const struct net_bridge *br); 382extern int br_min_mtu(const struct net_bridge *br);
402extern netdev_features_t br_features_recompute(struct net_bridge *br, 383extern u32 br_features_recompute(struct net_bridge *br, u32 features);
403 netdev_features_t features);
404 384
405/* br_input.c */ 385/* br_input.c */
406extern int br_handle_frame_finish(struct sk_buff *skb); 386extern int br_handle_frame_finish(struct sk_buff *skb);
@@ -412,7 +392,6 @@ extern int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __us
412 392
413/* br_multicast.c */ 393/* br_multicast.c */
414#ifdef CONFIG_BRIDGE_IGMP_SNOOPING 394#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
415extern unsigned int br_mdb_rehash_seq;
416extern int br_multicast_rcv(struct net_bridge *br, 395extern int br_multicast_rcv(struct net_bridge *br,
417 struct net_bridge_port *port, 396 struct net_bridge_port *port,
418 struct sk_buff *skb); 397 struct sk_buff *skb);
@@ -433,36 +412,7 @@ extern int br_multicast_set_router(struct net_bridge *br, unsigned long val);
433extern int br_multicast_set_port_router(struct net_bridge_port *p, 412extern int br_multicast_set_port_router(struct net_bridge_port *p,
434 unsigned long val); 413 unsigned long val);
435extern int br_multicast_toggle(struct net_bridge *br, unsigned long val); 414extern int br_multicast_toggle(struct net_bridge *br, unsigned long val);
436extern int br_multicast_set_querier(struct net_bridge *br, unsigned long val);
437extern int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val); 415extern int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val);
438extern struct net_bridge_mdb_entry *br_mdb_ip_get(
439 struct net_bridge_mdb_htable *mdb,
440 struct br_ip *dst);
441extern struct net_bridge_mdb_entry *br_multicast_new_group(struct net_bridge *br,
442 struct net_bridge_port *port, struct br_ip *group);
443extern void br_multicast_free_pg(struct rcu_head *head);
444extern struct net_bridge_port_group *br_multicast_new_port_group(
445 struct net_bridge_port *port,
446 struct br_ip *group,
447 struct net_bridge_port_group *next,
448 unsigned char state);
449extern void br_mdb_init(void);
450extern void br_mdb_uninit(void);
451extern void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
452 struct br_ip *group, int type);
453
454#define mlock_dereference(X, br) \
455 rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
456
457#if IS_ENABLED(CONFIG_IPV6)
458#include <net/addrconf.h>
459static inline int ipv6_is_transient_multicast(const struct in6_addr *addr)
460{
461 if (ipv6_addr_is_multicast(addr) && IPV6_ADDR_MC_FLAG_TRANSIENT(addr))
462 return 1;
463 return 0;
464}
465#endif
466 416
467static inline bool br_multicast_is_router(struct net_bridge *br) 417static inline bool br_multicast_is_router(struct net_bridge *br)
468{ 418{
@@ -526,12 +476,6 @@ static inline bool br_multicast_is_router(struct net_bridge *br)
526{ 476{
527 return 0; 477 return 0;
528} 478}
529static inline void br_mdb_init(void)
530{
531}
532static inline void br_mdb_uninit(void)
533{
534}
535#endif 479#endif
536 480
537/* br_netfilter.c */ 481/* br_netfilter.c */
@@ -584,18 +528,14 @@ extern void br_stp_port_timer_init(struct net_bridge_port *p);
584extern unsigned long br_timer_value(const struct timer_list *timer); 528extern unsigned long br_timer_value(const struct timer_list *timer);
585 529
586/* br.c */ 530/* br.c */
587#if IS_ENABLED(CONFIG_ATM_LANE) 531#if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
588extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr); 532extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
589#endif 533#endif
590 534
591/* br_netlink.c */ 535/* br_netlink.c */
592extern struct rtnl_link_ops br_link_ops;
593extern int br_netlink_init(void); 536extern int br_netlink_init(void);
594extern void br_netlink_fini(void); 537extern void br_netlink_fini(void);
595extern void br_ifinfo_notify(int event, struct net_bridge_port *port); 538extern void br_ifinfo_notify(int event, struct net_bridge_port *port);
596extern int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg);
597extern int br_getlink(struct sk_buff *skb, u32 pid, u32 seq,
598 struct net_device *dev);
599 539
600#ifdef CONFIG_SYSFS 540#ifdef CONFIG_SYSFS
601/* br_sysfs_if.c */ 541/* br_sysfs_if.c */
@@ -609,10 +549,10 @@ extern void br_sysfs_delbr(struct net_device *dev);
609 549
610#else 550#else
611 551
612static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; } 552#define br_sysfs_addif(p) (0)
613static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; } 553#define br_sysfs_renameif(p) (0)
614static inline int br_sysfs_addbr(struct net_device *dev) { return 0; } 554#define br_sysfs_addbr(dev) (0)
615static inline void br_sysfs_delbr(struct net_device *dev) { return; } 555#define br_sysfs_delbr(dev) do { } while(0)
616#endif /* CONFIG_SYSFS */ 556#endif /* CONFIG_SYSFS */
617 557
618#endif 558#endif