Blame view
net/bridge/br_private.h
31 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 3 4 5 6 |
/* * Linux ethernet bridge * * Authors: * Lennert Buytenhek <buytenh@gnu.org> * |
1da177e4c Linux-2.6.12-rc2 |
7 8 9 10 11 12 13 14 15 16 |
* This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version * 2 of the License, or (at your option) any later version. */ #ifndef _BR_PRIVATE_H #define _BR_PRIVATE_H #include <linux/netdevice.h> |
1da177e4c Linux-2.6.12-rc2 |
17 |
#include <linux/if_bridge.h> |
91d2c34a4 bridge: Fix netpo... |
18 |
#include <linux/netpoll.h> |
406818ff3 bridge: 64bit rx/... |
19 |
#include <linux/u64_stats_sync.h> |
4adf0af68 bridge: send corr... |
20 |
#include <net/route.h> |
efb6de9b4 netfilter: bridge... |
21 |
#include <net/ip6_fib.h> |
243a2e63f bridge: Add vlan ... |
22 |
#include <linux/if_vlan.h> |
2594e9064 bridge: vlan: add... |
23 |
#include <linux/rhashtable.h> |
251277598 net, bridge: conv... |
24 |
#include <linux/refcount.h> |
1da177e4c Linux-2.6.12-rc2 |
25 26 27 28 29 30 31 32 |
#define BR_HASH_BITS 8 #define BR_HASH_SIZE (1 << BR_HASH_BITS) #define BR_HOLD_TIME (1*HZ) #define BR_PORT_BITS 10 #define BR_MAX_PORTS (1<<BR_PORT_BITS) |
9cde07087 bridge: add suppo... |
33 |
#define BR_VERSION "2.3" |
515853cce bridge: allow for... |
34 35 |
/* Control of forwarding link local multicast */ #define BR_GROUPFWD_DEFAULT 0 |
784b58a32 bridge: change BR... |
36 37 |
/* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */ #define BR_GROUPFWD_RESTRICTED 0x0007u |
f2808d226 bridge: Prepare f... |
38 39 |
/* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */ #define BR_GROUPFWD_8021AD 0xB801u |
515853cce bridge: allow for... |
40 |
|
9cde07087 bridge: add suppo... |
41 42 |
/* Path to usermode spanning tree program */ #define BR_STP_PROG "/sbin/bridge-stp" |
8cbb512e5 [BRIDGE]: add ver... |
43 |
|
1da177e4c Linux-2.6.12-rc2 |
44 45 46 47 48 49 50 |
typedef struct bridge_id bridge_id; typedef struct mac_addr mac_addr; typedef __u16 port_id; struct bridge_id { unsigned char prio[2]; |
e5a727f66 bridge: Use ether... |
51 |
unsigned char addr[ETH_ALEN]; |
1da177e4c Linux-2.6.12-rc2 |
52 53 54 55 |
}; struct mac_addr { |
e5a727f66 bridge: Use ether... |
56 |
unsigned char addr[ETH_ALEN]; |
1da177e4c Linux-2.6.12-rc2 |
57 |
}; |
cc0fdd802 bridge: separate ... |
58 59 |
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING /* our own querier */ |
90010b36e bridge: rename st... |
60 |
struct bridge_mcast_own_query { |
cc0fdd802 bridge: separate ... |
61 62 63 64 65 |
struct timer_list timer; u32 startup_sent; }; /* other querier */ |
90010b36e bridge: rename st... |
66 |
struct bridge_mcast_other_query { |
cc0fdd802 bridge: separate ... |
67 68 69 |
struct timer_list timer; unsigned long delay_time; }; |
dc4eb53a9 bridge: adhere to... |
70 71 72 73 |
/* selected querier */ struct bridge_mcast_querier { struct br_ip addr; |
2cd414319 bridge: memorize ... |
74 |
struct net_bridge_port __rcu *port; |
dc4eb53a9 bridge: adhere to... |
75 |
}; |
1080ab95e net: bridge: add ... |
76 77 78 79 80 81 |
/* IGMP/MLD statistics */ struct bridge_mcast_stats { struct br_mcast_stats mstats; struct u64_stats_sync syncp; }; |
cc0fdd802 bridge: separate ... |
82 |
#endif |
6dada9b10 bridge: vlan: lea... |
83 84 85 86 87 88 89 |
struct br_vlan_stats { u64 rx_bytes; u64 rx_packets; u64 tx_bytes; u64 tx_packets; struct u64_stats_sync syncp; }; |
efa5356b0 bridge: per vlan ... |
90 91 92 93 |
struct br_tunnel_info { __be64 tunnel_id; struct metadata_dst *tunnel_dst; }; |
2594e9064 bridge: vlan: add... |
94 95 96 97 98 99 |
/** * struct net_bridge_vlan - per-vlan entry * * @vnode: rhashtable member * @vid: VLAN id * @flags: bridge vlan flags |
6dada9b10 bridge: vlan: lea... |
100 |
* @stats: per-cpu VLAN statistics |
2594e9064 bridge: vlan: add... |
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
* @br: if MASTER flag set, this points to a bridge struct * @port: if MASTER flag unset, this points to a port struct * @refcnt: if MASTER flag set, this is bumped for each port referencing it * @brvlan: if MASTER flag unset, this points to the global per-VLAN context * for this VLAN entry * @vlist: sorted list of VLAN entries * @rcu: used for entry destruction * * This structure is shared between the global per-VLAN entries contained in * the bridge rhashtable and the local per-port per-VLAN entries contained in * the port's rhashtable. The union entries should be interpreted depending on * the entry flags that are set. */ struct net_bridge_vlan { struct rhash_head vnode; |
efa5356b0 bridge: per vlan ... |
116 |
struct rhash_head tnode; |
2594e9064 bridge: vlan: add... |
117 118 |
u16 vid; u16 flags; |
6dada9b10 bridge: vlan: lea... |
119 |
struct br_vlan_stats __percpu *stats; |
243a2e63f bridge: Add vlan ... |
120 |
union { |
2594e9064 bridge: vlan: add... |
121 122 123 124 |
struct net_bridge *br; struct net_bridge_port *port; }; union { |
251277598 net, bridge: conv... |
125 |
refcount_t refcnt; |
2594e9064 bridge: vlan: add... |
126 127 |
struct net_bridge_vlan *brvlan; }; |
efa5356b0 bridge: per vlan ... |
128 129 |
struct br_tunnel_info tinfo; |
2594e9064 bridge: vlan: add... |
130 |
struct list_head vlist; |
243a2e63f bridge: Add vlan ... |
131 |
struct rcu_head rcu; |
2594e9064 bridge: vlan: add... |
132 133 134 135 136 137 138 139 |
}; /** * struct net_bridge_vlan_group * * @vlan_hash: VLAN entry rhashtable * @vlan_list: sorted VLAN entry list * @num_vlans: number of total VLAN entries |
77751ee8a bridge: vlan: mov... |
140 |
* @pvid: PVID VLAN id |
2594e9064 bridge: vlan: add... |
141 142 143 144 145 146 147 148 149 |
* * IMPORTANT: Be careful when checking if there're VLAN entries using list * primitives because the bridge can have entries in its list which * are just for global context but not for filtering, i.e. they have * the master flag set but not the brentry flag. If you have to check * if there're "real" entries in the bridge please test @num_vlans */ struct net_bridge_vlan_group { struct rhashtable vlan_hash; |
efa5356b0 bridge: per vlan ... |
150 |
struct rhashtable tunnel_hash; |
2594e9064 bridge: vlan: add... |
151 |
struct list_head vlan_list; |
6cbdceeb1 bridge: Dump vlan... |
152 |
u16 num_vlans; |
77751ee8a bridge: vlan: mov... |
153 |
u16 pvid; |
243a2e63f bridge: Add vlan ... |
154 |
}; |
1214628cb bridge: move writ... |
155 |
struct net_bridge_fdb_entry { |
1da177e4c Linux-2.6.12-rc2 |
156 157 |
struct hlist_node hlist; struct net_bridge_port *dst; |
1da177e4c Linux-2.6.12-rc2 |
158 |
mac_addr addr; |
b22fbf22f bridge: fdb: rear... |
159 |
__u16 vlan_id; |
93859b13f bridge: convert f... |
160 161 |
unsigned char is_local:1, is_static:1, |
cf6b8e1ee bridge: add API t... |
162 |
added_by_user:1, |
9fe8bcec0 net: bridge: Rece... |
163 164 |
added_by_external_learn:1, offloaded:1; |
1214628cb bridge: move writ... |
165 166 167 168 |
/* write-heavy members should not affect lookups */ unsigned long updated ____cacheline_aligned_in_smp; unsigned long used; |
b22fbf22f bridge: fdb: rear... |
169 |
struct rcu_head rcu; |
1da177e4c Linux-2.6.12-rc2 |
170 |
}; |
9d06b6d8a bridge: mdb: Sepa... |
171 172 |
#define MDB_PG_FLAGS_PERMANENT BIT(0) #define MDB_PG_FLAGS_OFFLOAD BIT(1) |
eb1d16414 bridge: Add core ... |
173 174 |
struct net_bridge_port_group { struct net_bridge_port *port; |
e80516880 bridge: add RCU a... |
175 |
struct net_bridge_port_group __rcu *next; |
eb1d16414 bridge: Add core ... |
176 177 178 |
struct hlist_node mglist; struct rcu_head rcu; struct timer_list timer; |
8ef2a9a59 bridge br_multica... |
179 |
struct br_ip addr; |
9d06b6d8a bridge: mdb: Sepa... |
180 |
unsigned char flags; |
6db6f0eae bridge: multicast... |
181 |
unsigned char eth_addr[ETH_ALEN]; |
eb1d16414 bridge: Add core ... |
182 183 184 185 186 |
}; struct net_bridge_mdb_entry { struct hlist_node hlist[2]; |
eb1d16414 bridge: Add core ... |
187 |
struct net_bridge *br; |
e80516880 bridge: add RCU a... |
188 |
struct net_bridge_port_group __rcu *ports; |
eb1d16414 bridge: Add core ... |
189 190 |
struct rcu_head rcu; struct timer_list timer; |
8ef2a9a59 bridge br_multica... |
191 |
struct br_ip addr; |
8a870178c bridge: Replace m... |
192 |
bool mglist; |
eb1d16414 bridge: Add core ... |
193 194 195 196 197 198 199 200 201 202 203 204 |
}; struct net_bridge_mdb_htable { struct hlist_head *mhash; struct rcu_head rcu; struct net_bridge_mdb_htable *old; u32 size; u32 max; u32 secret; u32 ver; }; |
1f90c7f34 bridge: modify br... |
205 |
struct net_bridge_port { |
1da177e4c Linux-2.6.12-rc2 |
206 207 208 |
struct net_bridge *br; struct net_device *dev; struct list_head list; |
1f90c7f34 bridge: modify br... |
209 210 211 212 |
unsigned long flags; #ifdef CONFIG_BRIDGE_VLAN_FILTERING struct net_bridge_vlan_group __rcu *vlgrp; #endif |
1da177e4c Linux-2.6.12-rc2 |
213 214 215 216 217 218 219 220 221 222 223 224 |
/* STP */ u8 priority; u8 state; u16 port_no; unsigned char topology_change_ack; unsigned char config_pending; port_id port_id; port_id designated_port; bridge_id designated_root; bridge_id designated_bridge; u32 path_cost; u32 designated_cost; |
0c03150e7 bridge: send prop... |
225 |
unsigned long designated_age; |
1da177e4c Linux-2.6.12-rc2 |
226 227 228 229 230 231 |
struct timer_list forward_delay_timer; struct timer_list hold_timer; struct timer_list message_age_timer; struct kobject kobj; struct rcu_head rcu; |
3982d3d28 net/bridge: Add '... |
232 |
|
eb1d16414 bridge: Add core ... |
233 |
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING |
90010b36e bridge: rename st... |
234 |
struct bridge_mcast_own_query ip4_own_query; |
cc0fdd802 bridge: separate ... |
235 |
#if IS_ENABLED(CONFIG_IPV6) |
90010b36e bridge: rename st... |
236 |
struct bridge_mcast_own_query ip6_own_query; |
cc0fdd802 bridge: separate ... |
237 |
#endif /* IS_ENABLED(CONFIG_IPV6) */ |
eb1d16414 bridge: Add core ... |
238 |
unsigned char multicast_router; |
1080ab95e net: bridge: add ... |
239 |
struct bridge_mcast_stats __percpu *mcast_stats; |
eb1d16414 bridge: Add core ... |
240 |
struct timer_list multicast_router_timer; |
eb1d16414 bridge: Add core ... |
241 242 243 |
struct hlist_head mglist; struct hlist_node rlist; #endif |
e0f43752a bridge: update sy... |
244 245 246 247 |
#ifdef CONFIG_SYSFS char sysfs_name[IFNAMSIZ]; #endif |
91d2c34a4 bridge: Fix netpo... |
248 249 250 251 |
#ifdef CONFIG_NET_POLL_CONTROLLER struct netpoll *np; #endif |
6bc506b4f bridge: switchdev... |
252 253 254 |
#ifdef CONFIG_NET_SWITCHDEV int offload_fwd_mark; #endif |
1da177e4c Linux-2.6.12-rc2 |
255 |
}; |
e028e4b8d bridge: Keep trac... |
256 |
#define br_auto_port(p) ((p)->flags & BR_AUTO_MASK) |
f3a6ddf15 bridge: Introduce... |
257 |
#define br_promisc_port(p) ((p)->flags & BR_PROMISC) |
e028e4b8d bridge: Keep trac... |
258 |
|
f350a0a87 bridge: use rx_ha... |
259 |
#define br_port_exists(dev) (dev->priv_flags & IFF_BRIDGE_PORT) |
b5ed54e94 bridge: fix RCU r... |
260 261 |
static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev) { |
716ec052d bridge: fix NULL ... |
262 |
return rcu_dereference(dev->rx_handler_data); |
b5ed54e94 bridge: fix RCU r... |
263 |
} |
1fb1754a8 bridge: use br_po... |
264 |
static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev) |
b5ed54e94 bridge: fix RCU r... |
265 |
{ |
ec1e5610c bridge: add RCU a... |
266 267 |
return br_port_exists(dev) ? rtnl_dereference(dev->rx_handler_data) : NULL; |
b5ed54e94 bridge: fix RCU r... |
268 |
} |
0baa10fff net: bridge: Add ... |
269 270 271 272 273 |
static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev) { return br_port_exists(dev) ? rcu_dereference_rtnl(dev->rx_handler_data) : NULL; } |
1f90c7f34 bridge: modify br... |
274 |
struct net_bridge { |
1da177e4c Linux-2.6.12-rc2 |
275 |
spinlock_t lock; |
1f90c7f34 bridge: modify br... |
276 |
spinlock_t hash_lock; |
1da177e4c Linux-2.6.12-rc2 |
277 278 |
struct list_head port_list; struct net_device *dev; |
8f84985fe net: unify the pc... |
279 |
struct pcpu_sw_netstats __percpu *stats; |
1f90c7f34 bridge: modify br... |
280 281 282 283 284 285 286 287 |
/* These fields are accessed on each packet */ #ifdef CONFIG_BRIDGE_VLAN_FILTERING u8 vlan_enabled; u8 vlan_stats_enabled; __be16 vlan_proto; u16 default_pvid; struct net_bridge_vlan_group __rcu *vlgrp; #endif |
1da177e4c Linux-2.6.12-rc2 |
288 |
struct hlist_head hash[BR_HASH_SIZE]; |
34666d467 netfilter: bridge... |
289 |
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) |
efb6de9b4 netfilter: bridge... |
290 291 292 293 |
union { struct rtable fake_rtable; struct rt6_info fake_rt6_info; }; |
4df53d8ba bridge: add per b... |
294 295 296 |
bool nf_call_iptables; bool nf_call_ip6tables; bool nf_call_arptables; |
4adf0af68 bridge: send corr... |
297 |
#endif |
515853cce bridge: allow for... |
298 |
u16 group_fwd_mask; |
f2808d226 bridge: Prepare f... |
299 |
u16 group_fwd_mask_required; |
515853cce bridge: allow for... |
300 |
|
1da177e4c Linux-2.6.12-rc2 |
301 302 303 304 |
/* STP */ bridge_id designated_root; bridge_id bridge_id; u32 root_path_cost; |
1f90c7f34 bridge: modify br... |
305 306 307 |
unsigned char topology_change; unsigned char topology_change_detected; u16 root_port; |
1da177e4c Linux-2.6.12-rc2 |
308 309 310 |
unsigned long max_age; unsigned long hello_time; unsigned long forward_delay; |
1da177e4c Linux-2.6.12-rc2 |
311 |
unsigned long ageing_time; |
34d8acd8a net: bridge: shor... |
312 |
unsigned long bridge_max_age; |
1da177e4c Linux-2.6.12-rc2 |
313 314 |
unsigned long bridge_hello_time; unsigned long bridge_forward_delay; |
34d8acd8a net: bridge: shor... |
315 |
unsigned long bridge_ageing_time; |
1da177e4c Linux-2.6.12-rc2 |
316 |
|
fda93d92d [BRIDGE]: allow s... |
317 |
u8 group_addr[ETH_ALEN]; |
204177f3f bridge: Support 8... |
318 |
bool group_addr_set; |
9cde07087 bridge: add suppo... |
319 320 321 322 323 324 |
enum { BR_NO_STP, /* no spanning tree */ BR_KERNEL_STP, /* old STP in kernel */ BR_USER_STP, /* new RSTP in userspace */ } stp_enabled; |
eb1d16414 bridge: Add core ... |
325 326 327 328 |
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING unsigned char multicast_router; u8 multicast_disabled:1; |
c5c232605 bridge: Add multi... |
329 |
u8 multicast_querier:1; |
1c8ad5bfa bridge: use the b... |
330 |
u8 multicast_query_use_ifaddr:1; |
0888d5f3c Bridge: Fix ipv6 ... |
331 |
u8 has_ipv6_addr:1; |
1080ab95e net: bridge: add ... |
332 |
u8 multicast_stats_enabled:1; |
eb1d16414 bridge: Add core ... |
333 334 335 336 337 |
u32 hash_elasticity; u32 hash_max; u32 multicast_last_member_count; |
eb1d16414 bridge: Add core ... |
338 |
u32 multicast_startup_query_count; |
5e9235853 bridge: mcast: ad... |
339 |
u8 multicast_igmp_version; |
eb1d16414 bridge: Add core ... |
340 341 342 343 344 345 346 347 |
unsigned long multicast_last_member_interval; unsigned long multicast_membership_interval; unsigned long multicast_querier_interval; unsigned long multicast_query_interval; unsigned long multicast_query_response_interval; unsigned long multicast_startup_query_interval; spinlock_t multicast_lock; |
e80516880 bridge: add RCU a... |
348 |
struct net_bridge_mdb_htable __rcu *mdb; |
eb1d16414 bridge: Add core ... |
349 |
struct hlist_head router_list; |
eb1d16414 bridge: Add core ... |
350 351 |
struct timer_list multicast_router_timer; |
90010b36e bridge: rename st... |
352 353 |
struct bridge_mcast_other_query ip4_other_query; struct bridge_mcast_own_query ip4_own_query; |
dc4eb53a9 bridge: adhere to... |
354 |
struct bridge_mcast_querier ip4_querier; |
1080ab95e net: bridge: add ... |
355 |
struct bridge_mcast_stats __percpu *mcast_stats; |
cc0fdd802 bridge: separate ... |
356 |
#if IS_ENABLED(CONFIG_IPV6) |
90010b36e bridge: rename st... |
357 358 |
struct bridge_mcast_other_query ip6_other_query; struct bridge_mcast_own_query ip6_own_query; |
dc4eb53a9 bridge: adhere to... |
359 |
struct bridge_mcast_querier ip6_querier; |
aa2ae3e71 bridge: mcast: ad... |
360 |
u8 multicast_mld_version; |
cc0fdd802 bridge: separate ... |
361 |
#endif /* IS_ENABLED(CONFIG_IPV6) */ |
eb1d16414 bridge: Add core ... |
362 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
363 364 365 |
struct timer_list hello_timer; struct timer_list tcn_timer; struct timer_list topology_change_timer; |
f7cdee8a7 bridge: move to w... |
366 |
struct delayed_work gc_work; |
43b98c4a6 Kobject: change n... |
367 |
struct kobject *ifobj; |
e028e4b8d bridge: Keep trac... |
368 |
u32 auto_cnt; |
6bc506b4f bridge: switchdev... |
369 370 371 372 |
#ifdef CONFIG_NET_SWITCHDEV int offload_fwd_mark; #endif |
1da177e4c Linux-2.6.12-rc2 |
373 |
}; |
68b7c895b bridge: Allow tai... |
374 375 |
struct br_input_skb_cb { struct net_device *brdev; |
93fdd47e5 bridge: Save frag... |
376 |
|
32dec5dd0 bridge br_multica... |
377 |
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING |
eb1d16414 bridge: Add core ... |
378 379 |
int igmp; int mrouters_only; |
32dec5dd0 bridge br_multica... |
380 |
#endif |
93fdd47e5 bridge: Save frag... |
381 |
|
842a9ae08 bridge: Extend Pr... |
382 |
bool proxyarp_replied; |
93fdd47e5 bridge: Save frag... |
383 |
|
20adfa1a8 bridge: Check if ... |
384 385 386 |
#ifdef CONFIG_BRIDGE_VLAN_FILTERING bool vlan_filtered; #endif |
6bc506b4f bridge: switchdev... |
387 388 389 390 |
#ifdef CONFIG_NET_SWITCHDEV int offload_fwd_mark; #endif |
68b7c895b bridge: Allow tai... |
391 392 393 |
}; #define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb) |
32dec5dd0 bridge br_multica... |
394 395 396 397 398 |
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (BR_INPUT_SKB_CB(__skb)->mrouters_only) #else # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (0) #endif |
28a16c979 bridge: change co... |
399 400 401 402 403 404 405 406 407 408 409 410 411 412 |
#define br_printk(level, br, format, args...) \ printk(level "%s: " format, (br)->dev->name, ##args) #define br_err(__br, format, args...) \ br_printk(KERN_ERR, __br, format, ##args) #define br_warn(__br, format, args...) \ br_printk(KERN_WARNING, __br, format, ##args) #define br_notice(__br, format, args...) \ br_printk(KERN_NOTICE, __br, format, ##args) #define br_info(__br, format, args...) \ br_printk(KERN_INFO, __br, format, ##args) #define br_debug(br, format, args...) \ pr_debug("%s: " format, (br)->dev->name, ##args) |
1da177e4c Linux-2.6.12-rc2 |
413 414 415 416 417 |
/* called under bridge lock */ static inline int br_is_root_bridge(const struct net_bridge *br) { return !memcmp(&br->bridge_id, &br->designated_root, 8); } |
2594e9064 bridge: vlan: add... |
418 419 420 421 422 423 424 425 426 427 428 |
/* check if a VLAN entry is global */ static inline bool br_vlan_is_master(const struct net_bridge_vlan *v) { return v->flags & BRIDGE_VLAN_INFO_MASTER; } /* check if a VLAN entry is used by the bridge */ static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v) { return v->flags & BRIDGE_VLAN_INFO_BRENTRY; } |
6be144f62 bridge: vlan: use... |
429 |
/* check if we should use the vlan entry, returns false if it's only context */ |
2594e9064 bridge: vlan: add... |
430 431 432 433 434 435 436 437 438 439 440 |
static inline bool br_vlan_should_use(const struct net_bridge_vlan *v) { if (br_vlan_is_master(v)) { if (br_vlan_is_brentry(v)) return true; else return false; } return true; } |
1da177e4c Linux-2.6.12-rc2 |
441 |
/* br_device.c */ |
348662a14 net: 8021q/blueto... |
442 443 444 |
void br_dev_setup(struct net_device *dev); void br_dev_delete(struct net_device *dev, struct list_head *list); netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev); |
cfb478da7 bridge: netpoll c... |
445 |
#ifdef CONFIG_NET_POLL_CONTROLLER |
91d2c34a4 bridge: Fix netpo... |
446 447 448 449 450 451 452 453 |
static inline void br_netpoll_send_skb(const struct net_bridge_port *p, struct sk_buff *skb) { struct netpoll *np = p->np; if (np) netpoll_send_skb(np, skb); } |
a8779ec1c netpoll: Remove g... |
454 |
int br_netpoll_enable(struct net_bridge_port *p); |
348662a14 net: 8021q/blueto... |
455 |
void br_netpoll_disable(struct net_bridge_port *p); |
cfb478da7 bridge: netpoll c... |
456 |
#else |
9f70b0fce bridge: Add const... |
457 |
static inline void br_netpoll_send_skb(const struct net_bridge_port *p, |
91d2c34a4 bridge: Fix netpo... |
458 459 460 |
struct sk_buff *skb) { } |
cfb478da7 bridge: netpoll c... |
461 |
|
a8779ec1c netpoll: Remove g... |
462 |
static inline int br_netpoll_enable(struct net_bridge_port *p) |
91d2c34a4 bridge: Fix netpo... |
463 464 465 466 467 468 469 |
{ return 0; } static inline void br_netpoll_disable(struct net_bridge_port *p) { } |
cfb478da7 bridge: netpoll c... |
470 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
471 472 |
/* br_fdb.c */ |
348662a14 net: 8021q/blueto... |
473 474 475 |
int br_fdb_init(void); void br_fdb_fini(void); void br_fdb_flush(struct net_bridge *br); |
424bb9c97 bridge: Properly ... |
476 477 478 |
void br_fdb_find_delete_local(struct net_bridge *br, const struct net_bridge_port *p, const unsigned char *addr, u16 vid); |
348662a14 net: 8021q/blueto... |
479 480 |
void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr); void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr); |
f7cdee8a7 bridge: move to w... |
481 |
void br_fdb_cleanup(struct work_struct *work); |
348662a14 net: 8021q/blueto... |
482 |
void br_fdb_delete_by_port(struct net_bridge *br, |
1ea2d020b bridge: vlan: flu... |
483 |
const struct net_bridge_port *p, u16 vid, int do_all); |
bfd0aeac5 bridge: fdb: conv... |
484 485 486 |
struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br, const unsigned char *addr, __u16 vid); |
348662a14 net: 8021q/blueto... |
487 488 489 490 491 492 |
int br_fdb_test_addr(struct net_device *dev, unsigned char *addr); int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count, unsigned long off); int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source, const unsigned char *addr, u16 vid); void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source, |
a5642ab47 bridge: Fix the w... |
493 |
const unsigned char *addr, u16 vid, bool added_by_user); |
348662a14 net: 8021q/blueto... |
494 495 |
int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[], |
f6f6424ba net: make vid as ... |
496 |
struct net_device *dev, const unsigned char *addr, u16 vid); |
348662a14 net: 8021q/blueto... |
497 |
int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev, |
f6f6424ba net: make vid as ... |
498 |
const unsigned char *addr, u16 vid, u16 nlh_flags); |
348662a14 net: 8021q/blueto... |
499 |
int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb, |
d297653dd rtnetlink: fdb du... |
500 |
struct net_device *dev, struct net_device *fdev, int *idx); |
8db24af71 bridge: Add funct... |
501 502 |
int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p); void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p); |
3aeb66176 net: replace br_f... |
503 504 505 506 |
int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p, const unsigned char *addr, u16 vid); int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p, const unsigned char *addr, u16 vid); |
9fe8bcec0 net: bridge: Rece... |
507 508 |
void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p, const unsigned char *addr, u16 vid); |
1da177e4c Linux-2.6.12-rc2 |
509 510 |
/* br_forward.c */ |
8addd5e7d net: bridge: chan... |
511 512 513 514 515 |
enum br_pkt_type { BR_PKT_UNICAST, BR_PKT_MULTICAST, BR_PKT_BROADCAST }; |
0c4b51f00 netfilter: Pass n... |
516 |
int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb); |
b35c5f632 net: bridge: drop... |
517 |
void br_forward(const struct net_bridge_port *to, struct sk_buff *skb, |
37b090e6b net: bridge: remo... |
518 |
bool local_rcv, bool local_orig); |
0c4b51f00 netfilter: Pass n... |
519 |
int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb); |
37b090e6b net: bridge: remo... |
520 |
void br_flood(struct net_bridge *br, struct sk_buff *skb, |
8addd5e7d net: bridge: chan... |
521 |
enum br_pkt_type pkt_type, bool local_rcv, bool local_orig); |
1da177e4c Linux-2.6.12-rc2 |
522 523 |
/* br_if.c */ |
348662a14 net: 8021q/blueto... |
524 525 526 |
void br_port_carrier_check(struct net_bridge_port *p); int br_add_bridge(struct net *net, const char *name); int br_del_bridge(struct net *net, const char *name); |
348662a14 net: 8021q/blueto... |
527 528 529 530 531 |
int br_add_if(struct net_bridge *br, struct net_device *dev); int br_del_if(struct net_bridge *br, struct net_device *dev); int br_min_mtu(const struct net_bridge *br); netdev_features_t br_features_recompute(struct net_bridge *br, netdev_features_t features); |
e028e4b8d bridge: Keep trac... |
532 |
void br_port_flags_change(struct net_bridge_port *port, unsigned long mask); |
2796d0c64 bridge: Automatic... |
533 |
void br_manage_promisc(struct net_bridge *br); |
1da177e4c Linux-2.6.12-rc2 |
534 535 |
/* br_input.c */ |
0c4b51f00 netfilter: Pass n... |
536 |
int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb); |
348662a14 net: 8021q/blueto... |
537 |
rx_handler_result_t br_handle_frame(struct sk_buff **pskb); |
1da177e4c Linux-2.6.12-rc2 |
538 |
|
859828c0e br: fix use of ->... |
539 540 541 542 543 544 545 546 547 |
static inline bool br_rx_handler_check_rcu(const struct net_device *dev) { return rcu_dereference(dev->rx_handler) == br_handle_frame; } static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev) { return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL; } |
1da177e4c Linux-2.6.12-rc2 |
548 |
/* br_ioctl.c */ |
348662a14 net: 8021q/blueto... |
549 550 551 |
int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd, void __user *arg); |
1da177e4c Linux-2.6.12-rc2 |
552 |
|
eb1d16414 bridge: Add core ... |
553 554 |
/* br_multicast.c */ #ifdef CONFIG_BRIDGE_IGMP_SNOOPING |
2ce297fc2 bridge: fix seq c... |
555 |
extern unsigned int br_mdb_rehash_seq; |
348662a14 net: 8021q/blueto... |
556 |
int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port, |
394efd19d Merge git://git.k... |
557 |
struct sk_buff *skb, u16 vid); |
348662a14 net: 8021q/blueto... |
558 559 |
struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, struct sk_buff *skb, u16 vid); |
1080ab95e net: bridge: add ... |
560 |
int br_multicast_add_port(struct net_bridge_port *port); |
348662a14 net: 8021q/blueto... |
561 562 563 564 565 566 |
void br_multicast_del_port(struct net_bridge_port *port); void br_multicast_enable_port(struct net_bridge_port *port); void br_multicast_disable_port(struct net_bridge_port *port); void br_multicast_init(struct net_bridge *br); void br_multicast_open(struct net_bridge *br); void br_multicast_stop(struct net_bridge *br); |
e10177abf bridge: multicast... |
567 |
void br_multicast_dev_del(struct net_bridge *br); |
37b090e6b net: bridge: remo... |
568 569 |
void br_multicast_flood(struct net_bridge_mdb_entry *mdst, struct sk_buff *skb, bool local_rcv, bool local_orig); |
348662a14 net: 8021q/blueto... |
570 571 572 573 574 |
int br_multicast_set_router(struct net_bridge *br, unsigned long val); int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val); int br_multicast_toggle(struct net_bridge *br, unsigned long val); int br_multicast_set_querier(struct net_bridge *br, unsigned long val); int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val); |
5e9235853 bridge: mcast: ad... |
575 |
int br_multicast_set_igmp_version(struct net_bridge *br, unsigned long val); |
aa2ae3e71 bridge: mcast: ad... |
576 577 578 |
#if IS_ENABLED(CONFIG_IPV6) int br_multicast_set_mld_version(struct net_bridge *br, unsigned long val); #endif |
348662a14 net: 8021q/blueto... |
579 580 581 582 583 584 585 586 587 |
struct net_bridge_mdb_entry * br_mdb_ip_get(struct net_bridge_mdb_htable *mdb, struct br_ip *dst); struct net_bridge_mdb_entry * br_multicast_new_group(struct net_bridge *br, struct net_bridge_port *port, struct br_ip *group); void br_multicast_free_pg(struct rcu_head *head); struct net_bridge_port_group * br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group, struct net_bridge_port_group __rcu *next, |
6db6f0eae bridge: multicast... |
588 |
unsigned char flags, const unsigned char *src); |
348662a14 net: 8021q/blueto... |
589 590 |
void br_mdb_init(void); void br_mdb_uninit(void); |
45ebcce56 bridge: mdb: Mark... |
591 592 |
void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port, struct br_ip *group, int type, u8 flags); |
949f1e39a bridge: mdb: noti... |
593 594 |
void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port, int type); |
1080ab95e net: bridge: add ... |
595 |
void br_multicast_count(struct net_bridge *br, const struct net_bridge_port *p, |
a65056ecf net: bridge: exte... |
596 |
const struct sk_buff *skb, u8 type, u8 dir); |
1080ab95e net: bridge: add ... |
597 |
int br_multicast_init_stats(struct net_bridge *br); |
b6fe0440c bridge: implement... |
598 |
void br_multicast_uninit_stats(struct net_bridge *br); |
1080ab95e net: bridge: add ... |
599 600 601 |
void br_multicast_get_stats(const struct net_bridge *br, const struct net_bridge_port *p, struct br_mcast_stats *dest); |
85b352693 bridge: Fix build... |
602 |
|
cfd567543 bridge: add suppo... |
603 604 |
#define mlock_dereference(X, br) \ rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock)) |
85b352693 bridge: Fix build... |
605 606 607 608 609 610 |
static inline bool br_multicast_is_router(struct net_bridge *br) { return br->multicast_router == 2 || (br->multicast_router == 1 && timer_pending(&br->multicast_router_timer)); } |
b00589af3 bridge: disable s... |
611 |
|
cc0fdd802 bridge: separate ... |
612 613 |
static inline bool __br_multicast_querier_exists(struct net_bridge *br, |
0888d5f3c Bridge: Fix ipv6 ... |
614 615 |
struct bridge_mcast_other_query *querier, const bool is_ipv6) |
b00589af3 bridge: disable s... |
616 |
{ |
0888d5f3c Bridge: Fix ipv6 ... |
617 618 619 620 621 622 623 624 625 626 |
bool own_querier_enabled; if (br->multicast_querier) { if (is_ipv6 && !br->has_ipv6_addr) own_querier_enabled = false; else own_querier_enabled = true; } else { own_querier_enabled = false; } |
cc0fdd802 bridge: separate ... |
627 |
return time_is_before_jiffies(querier->delay_time) && |
0888d5f3c Bridge: Fix ipv6 ... |
628 |
(own_querier_enabled || timer_pending(&querier->timer)); |
cc0fdd802 bridge: separate ... |
629 630 631 632 633 634 635 |
} static inline bool br_multicast_querier_exists(struct net_bridge *br, struct ethhdr *eth) { switch (eth->h_proto) { case (htons(ETH_P_IP)): |
0888d5f3c Bridge: Fix ipv6 ... |
636 637 |
return __br_multicast_querier_exists(br, &br->ip4_other_query, false); |
cc0fdd802 bridge: separate ... |
638 639 |
#if IS_ENABLED(CONFIG_IPV6) case (htons(ETH_P_IPV6)): |
0888d5f3c Bridge: Fix ipv6 ... |
640 641 |
return __br_multicast_querier_exists(br, &br->ip6_other_query, true); |
cc0fdd802 bridge: separate ... |
642 643 644 645 |
#endif default: return false; } |
b00589af3 bridge: disable s... |
646 |
} |
1080ab95e net: bridge: add ... |
647 648 649 650 651 |
static inline int br_multicast_igmp_type(const struct sk_buff *skb) { return BR_INPUT_SKB_CB(skb)->igmp; } |
eb1d16414 bridge: Add core ... |
652 653 654 |
#else static inline int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port, |
06499098a bridge: pass corr... |
655 656 |
struct sk_buff *skb, u16 vid) |
eb1d16414 bridge: Add core ... |
657 658 659 660 661 |
{ return 0; } static inline struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br, |
fbca58a22 bridge: add missi... |
662 |
struct sk_buff *skb, u16 vid) |
eb1d16414 bridge: Add core ... |
663 664 665 |
{ return NULL; } |
1080ab95e net: bridge: add ... |
666 |
static inline int br_multicast_add_port(struct net_bridge_port *port) |
eb1d16414 bridge: Add core ... |
667 |
{ |
1080ab95e net: bridge: add ... |
668 |
return 0; |
eb1d16414 bridge: Add core ... |
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 |
} static inline void br_multicast_del_port(struct net_bridge_port *port) { } static inline void br_multicast_enable_port(struct net_bridge_port *port) { } static inline void br_multicast_disable_port(struct net_bridge_port *port) { } static inline void br_multicast_init(struct net_bridge *br) { } static inline void br_multicast_open(struct net_bridge *br) { } static inline void br_multicast_stop(struct net_bridge *br) { } |
5cb5e947d bridge: Add multi... |
694 |
|
a7ce45a74 bridge: mcast: fi... |
695 696 697 |
static inline void br_multicast_dev_del(struct net_bridge *br) { } |
37b090e6b net: bridge: remo... |
698 699 700 |
static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst, struct sk_buff *skb, bool local_rcv, bool local_orig) |
5cb5e947d bridge: Add multi... |
701 702 |
{ } |
eb1d16414 bridge: Add core ... |
703 704 |
static inline bool br_multicast_is_router(struct net_bridge *br) { |
85b352693 bridge: Fix build... |
705 |
return 0; |
eb1d16414 bridge: Add core ... |
706 |
} |
37b090e6b net: bridge: remo... |
707 |
|
cc0fdd802 bridge: separate ... |
708 709 |
static inline bool br_multicast_querier_exists(struct net_bridge *br, struct ethhdr *eth) |
b00589af3 bridge: disable s... |
710 711 712 |
{ return false; } |
37b090e6b net: bridge: remo... |
713 |
|
fdb184d14 bridge: add empty... |
714 715 716 |
static inline void br_mdb_init(void) { } |
37b090e6b net: bridge: remo... |
717 |
|
fdb184d14 bridge: add empty... |
718 719 720 |
static inline void br_mdb_uninit(void) { } |
1080ab95e net: bridge: add ... |
721 722 723 |
static inline void br_multicast_count(struct net_bridge *br, const struct net_bridge_port *p, |
a65056ecf net: bridge: exte... |
724 725 |
const struct sk_buff *skb, u8 type, u8 dir) |
1080ab95e net: bridge: add ... |
726 727 728 729 730 731 732 |
{ } static inline int br_multicast_init_stats(struct net_bridge *br) { return 0; } |
b6fe0440c bridge: implement... |
733 734 735 |
static inline void br_multicast_uninit_stats(struct net_bridge *br) { } |
1080ab95e net: bridge: add ... |
736 737 738 739 |
static inline int br_multicast_igmp_type(const struct sk_buff *skb) { return 0; } |
85b352693 bridge: Fix build... |
740 |
#endif |
eb1d16414 bridge: Add core ... |
741 |
|
243a2e63f bridge: Add vlan ... |
742 743 |
/* br_vlan.c */ #ifdef CONFIG_BRIDGE_VLAN_FILTERING |
77751ee8a bridge: vlan: mov... |
744 745 746 747 |
bool br_allowed_ingress(const struct net_bridge *br, struct net_bridge_vlan_group *vg, struct sk_buff *skb, u16 *vid); bool br_allowed_egress(struct net_bridge_vlan_group *vg, |
348662a14 net: 8021q/blueto... |
748 |
const struct sk_buff *skb); |
e0d7968ab bridge: Prevent i... |
749 |
bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid); |
348662a14 net: 8021q/blueto... |
750 |
struct sk_buff *br_handle_vlan(struct net_bridge *br, |
11538d039 bridge: vlan dst_... |
751 |
const struct net_bridge_port *port, |
2594e9064 bridge: vlan: add... |
752 |
struct net_bridge_vlan_group *vg, |
348662a14 net: 8021q/blueto... |
753 754 755 756 |
struct sk_buff *skb); int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags); int br_vlan_delete(struct net_bridge *br, u16 vid); void br_vlan_flush(struct net_bridge *br); |
2594e9064 bridge: vlan: add... |
757 |
struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid); |
204177f3f bridge: Support 8... |
758 |
void br_recalculate_fwd_mask(struct net_bridge *br); |
a7854037d bridge: netlink: ... |
759 |
int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val); |
348662a14 net: 8021q/blueto... |
760 |
int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val); |
d2d427b39 bridge: Add netli... |
761 |
int __br_vlan_set_proto(struct net_bridge *br, __be16 proto); |
204177f3f bridge: Support 8... |
762 |
int br_vlan_set_proto(struct net_bridge *br, unsigned long val); |
6dada9b10 bridge: vlan: lea... |
763 |
int br_vlan_set_stats(struct net_bridge *br, unsigned long val); |
5be5a2df4 bridge: Add filte... |
764 |
int br_vlan_init(struct net_bridge *br); |
96a20d9d7 bridge: Add a def... |
765 |
int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val); |
0f963b759 bridge: netlink: ... |
766 |
int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid); |
348662a14 net: 8021q/blueto... |
767 768 769 |
int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags); int nbp_vlan_delete(struct net_bridge_port *port, u16 vid); void nbp_vlan_flush(struct net_bridge_port *port); |
5be5a2df4 bridge: Add filte... |
770 |
int nbp_vlan_init(struct net_bridge_port *port); |
2594e9064 bridge: vlan: add... |
771 |
int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask); |
a60c09036 bridge: netlink: ... |
772 773 |
void br_vlan_get_stats(const struct net_bridge_vlan *v, struct br_vlan_stats *stats); |
a37b85c9f bridge: Validate ... |
774 |
|
2594e9064 bridge: vlan: add... |
775 776 |
static inline struct net_bridge_vlan_group *br_vlan_group( const struct net_bridge *br) |
a37b85c9f bridge: Validate ... |
777 |
{ |
907b1e6e8 bridge: vlan: use... |
778 |
return rtnl_dereference(br->vlgrp); |
a37b85c9f bridge: Validate ... |
779 |
} |
2594e9064 bridge: vlan: add... |
780 781 |
static inline struct net_bridge_vlan_group *nbp_vlan_group( const struct net_bridge_port *p) |
a37b85c9f bridge: Validate ... |
782 |
{ |
907b1e6e8 bridge: vlan: use... |
783 784 785 786 787 788 789 790 791 792 793 794 795 |
return rtnl_dereference(p->vlgrp); } static inline struct net_bridge_vlan_group *br_vlan_group_rcu( const struct net_bridge *br) { return rcu_dereference(br->vlgrp); } static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu( const struct net_bridge_port *p) { return rcu_dereference(p->vlgrp); |
a37b85c9f bridge: Validate ... |
796 797 798 799 800 801 802 803 |
} /* Since bridge now depends on 8021Q module, but the time bridge sees the * skb, the vlan tag will always be present if the frame was tagged. */ static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid) { int err = 0; |
2594e9064 bridge: vlan: add... |
804 |
if (skb_vlan_tag_present(skb)) { |
df8a39def net: rename vlan_... |
805 |
*vid = skb_vlan_tag_get(skb) & VLAN_VID_MASK; |
2594e9064 bridge: vlan: add... |
806 |
} else { |
a37b85c9f bridge: Validate ... |
807 808 809 810 811 812 |
*vid = 0; err = -EINVAL; } return err; } |
788519886 bridge: Implement... |
813 |
|
77751ee8a bridge: vlan: mov... |
814 |
static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg) |
2594e9064 bridge: vlan: add... |
815 |
{ |
77751ee8a bridge: vlan: mov... |
816 |
if (!vg) |
2594e9064 bridge: vlan: add... |
817 818 819 |
return 0; smp_rmb(); |
77751ee8a bridge: vlan: mov... |
820 |
return vg->pvid; |
788519886 bridge: Implement... |
821 |
} |
243a2e63f bridge: Add vlan ... |
822 |
#else |
77751ee8a bridge: vlan: mov... |
823 824 |
static inline bool br_allowed_ingress(const struct net_bridge *br, struct net_bridge_vlan_group *vg, |
788519886 bridge: Implement... |
825 826 |
struct sk_buff *skb, u16 *vid) |
a37b85c9f bridge: Validate ... |
827 828 829 |
{ return true; } |
2594e9064 bridge: vlan: add... |
830 |
static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg, |
85f46c6ba bridge: Verify th... |
831 832 833 834 |
const struct sk_buff *skb) { return true; } |
e0d7968ab bridge: Prevent i... |
835 836 837 838 839 |
static inline bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid) { return true; } |
788519886 bridge: Implement... |
840 |
static inline struct sk_buff *br_handle_vlan(struct net_bridge *br, |
11538d039 bridge: vlan dst_... |
841 |
const struct net_bridge_port *port, |
2594e9064 bridge: vlan: add... |
842 |
struct net_bridge_vlan_group *vg, |
788519886 bridge: Implement... |
843 844 845 846 |
struct sk_buff *skb) { return skb; } |
552406c48 bridge: Add the a... |
847 |
static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags) |
243a2e63f bridge: Add vlan ... |
848 849 850 851 852 853 854 855 856 857 858 859 |
{ return -EOPNOTSUPP; } static inline int br_vlan_delete(struct net_bridge *br, u16 vid) { return -EOPNOTSUPP; } static inline void br_vlan_flush(struct net_bridge *br) { } |
204177f3f bridge: Support 8... |
860 861 862 |
static inline void br_recalculate_fwd_mask(struct net_bridge *br) { } |
5be5a2df4 bridge: Add filte... |
863 |
static inline int br_vlan_init(struct net_bridge *br) |
8580e2117 bridge: Prepare f... |
864 |
{ |
5be5a2df4 bridge: Add filte... |
865 |
return 0; |
8580e2117 bridge: Prepare f... |
866 |
} |
552406c48 bridge: Add the a... |
867 |
static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags) |
243a2e63f bridge: Add vlan ... |
868 869 870 871 872 873 874 875 876 877 878 879 |
{ return -EOPNOTSUPP; } static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid) { return -EOPNOTSUPP; } static inline void nbp_vlan_flush(struct net_bridge_port *port) { } |
2594e9064 bridge: vlan: add... |
880 881 |
static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid) |
a37b85c9f bridge: Validate ... |
882 883 884 |
{ return NULL; } |
2594e9064 bridge: vlan: add... |
885 |
static inline int nbp_vlan_init(struct net_bridge_port *port) |
bc9a25d21 bridge: Add vlan ... |
886 |
{ |
2594e9064 bridge: vlan: add... |
887 |
return 0; |
bc9a25d21 bridge: Add vlan ... |
888 |
} |
2594e9064 bridge: vlan: add... |
889 |
static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag) |
5be5a2df4 bridge: Add filte... |
890 891 892 |
{ return 0; } |
77751ee8a bridge: vlan: mov... |
893 |
static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg) |
788519886 bridge: Implement... |
894 |
{ |
3df6bf45e bridge: Simplify ... |
895 |
return 0; |
788519886 bridge: Implement... |
896 |
} |
2796d0c64 bridge: Automatic... |
897 |
|
a7854037d bridge: netlink: ... |
898 899 900 901 902 |
static inline int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val) { return -EOPNOTSUPP; } |
2594e9064 bridge: vlan: add... |
903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 |
static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask) { return 0; } static inline struct net_bridge_vlan_group *br_vlan_group( const struct net_bridge *br) { return NULL; } static inline struct net_bridge_vlan_group *nbp_vlan_group( const struct net_bridge_port *p) { return NULL; } |
907b1e6e8 bridge: vlan: use... |
921 922 923 924 925 926 927 928 929 930 931 932 |
static inline struct net_bridge_vlan_group *br_vlan_group_rcu( const struct net_bridge *br) { return NULL; } static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu( const struct net_bridge_port *p) { return NULL; } |
a60c09036 bridge: netlink: ... |
933 934 935 936 937 |
static inline void br_vlan_get_stats(const struct net_bridge_vlan *v, struct br_vlan_stats *stats) { } |
243a2e63f bridge: Add vlan ... |
938 |
#endif |
1a4ba64d1 netfilter: bridge... |
939 940 941 942 |
struct nf_br_ops { int (*br_dev_xmit_hook)(struct sk_buff *skb); }; extern const struct nf_br_ops __rcu *nf_br_ops; |
1da177e4c Linux-2.6.12-rc2 |
943 |
/* br_netfilter.c */ |
34666d467 netfilter: bridge... |
944 945 946 |
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER) int br_nf_core_init(void); void br_nf_core_fini(void); |
348662a14 net: 8021q/blueto... |
947 |
void br_netfilter_rtable_init(struct net_bridge *); |
c09097132 [BRIDGE]: fix mod... |
948 |
#else |
34666d467 netfilter: bridge... |
949 950 |
static inline int br_nf_core_init(void) { return 0; } static inline void br_nf_core_fini(void) {} |
4adf0af68 bridge: send corr... |
951 |
#define br_netfilter_rtable_init(x) |
c09097132 [BRIDGE]: fix mod... |
952 |
#endif |
1da177e4c Linux-2.6.12-rc2 |
953 954 |
/* br_stp.c */ |
775dd692b net: bridge: add ... |
955 |
void br_set_state(struct net_bridge_port *p, unsigned int state); |
348662a14 net: 8021q/blueto... |
956 957 958 |
struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no); void br_init_port(struct net_bridge_port *p); void br_become_designated_port(struct net_bridge_port *p); |
1da177e4c Linux-2.6.12-rc2 |
959 |
|
348662a14 net: 8021q/blueto... |
960 961 962 963 |
void __br_set_forward_delay(struct net_bridge *br, unsigned long t); int br_set_forward_delay(struct net_bridge *br, unsigned long x); int br_set_hello_time(struct net_bridge *br, unsigned long x); int br_set_max_age(struct net_bridge *br, unsigned long x); |
82dd4332a net: bridge: add ... |
964 |
int __set_ageing_time(struct net_device *dev, unsigned long t); |
9e0b27fe5 net: bridge: br_s... |
965 |
int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time); |
14f98f258 bridge: range che... |
966 |
|
1da177e4c Linux-2.6.12-rc2 |
967 |
/* br_stp_if.c */ |
348662a14 net: 8021q/blueto... |
968 969 970 971 972 973 974 975 976 977 978 |
void br_stp_enable_bridge(struct net_bridge *br); void br_stp_disable_bridge(struct net_bridge *br); void br_stp_set_enabled(struct net_bridge *br, unsigned long val); void br_stp_enable_port(struct net_bridge_port *p); void br_stp_disable_port(struct net_bridge_port *p); bool br_stp_recalculate_bridge_id(struct net_bridge *br); void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a); void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio); int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio); int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost); ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id); |
1da177e4c Linux-2.6.12-rc2 |
979 980 |
/* br_stp_bpdu.c */ |
7c85fbf06 bridge: Use STP d... |
981 |
struct stp_proto; |
348662a14 net: 8021q/blueto... |
982 983 |
void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb, struct net_device *dev); |
1da177e4c Linux-2.6.12-rc2 |
984 985 |
/* br_stp_timer.c */ |
348662a14 net: 8021q/blueto... |
986 987 988 |
void br_stp_timer_init(struct net_bridge *br); void br_stp_port_timer_init(struct net_bridge_port *p); unsigned long br_timer_value(const struct timer_list *timer); |
1da177e4c Linux-2.6.12-rc2 |
989 990 |
/* br.c */ |
e6373c4c0 net:bridge: use I... |
991 |
#if IS_ENABLED(CONFIG_ATM_LANE) |
da6782927 bridge: Simplify ... |
992 993 |
extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr); #endif |
1da177e4c Linux-2.6.12-rc2 |
994 |
|
11dc1f36a [BRIDGE]: netlink... |
995 |
/* br_netlink.c */ |
149ddd83a bridge: Assign rt... |
996 |
extern struct rtnl_link_ops br_link_ops; |
348662a14 net: 8021q/blueto... |
997 998 999 |
int br_netlink_init(void); void br_netlink_fini(void); void br_ifinfo_notify(int event, struct net_bridge_port *port); |
add511b38 bridge: add flags... |
1000 1001 |
int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags); int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags); |
348662a14 net: 8021q/blueto... |
1002 |
int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev, |
46c264daa bridge/nl: remove... |
1003 |
u32 filter_mask, int nlflags); |
11dc1f36a [BRIDGE]: netlink... |
1004 |
|
1da177e4c Linux-2.6.12-rc2 |
1005 1006 |
#ifdef CONFIG_SYSFS /* br_sysfs_if.c */ |
52cf25d0a Driver core: Cons... |
1007 |
extern const struct sysfs_ops brport_sysfs_ops; |
348662a14 net: 8021q/blueto... |
1008 1009 |
int br_sysfs_addif(struct net_bridge_port *p); int br_sysfs_renameif(struct net_bridge_port *p); |
1da177e4c Linux-2.6.12-rc2 |
1010 1011 |
/* br_sysfs_br.c */ |
348662a14 net: 8021q/blueto... |
1012 1013 |
int br_sysfs_addbr(struct net_device *dev); void br_sysfs_delbr(struct net_device *dev); |
1da177e4c Linux-2.6.12-rc2 |
1014 1015 |
#else |
0cb2bbbea bridge: Avoid 'st... |
1016 1017 1018 1019 |
static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; } static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; } static inline int br_sysfs_addbr(struct net_device *dev) { return 0; } static inline void br_sysfs_delbr(struct net_device *dev) { return; } |
1da177e4c Linux-2.6.12-rc2 |
1020 |
#endif /* CONFIG_SYSFS */ |
6bc506b4f bridge: switchdev... |
1021 1022 1023 1024 1025 1026 1027 |
/* br_switchdev.c */ #ifdef CONFIG_NET_SWITCHDEV int nbp_switchdev_mark_set(struct net_bridge_port *p); void nbp_switchdev_frame_mark(const struct net_bridge_port *p, struct sk_buff *skb); bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, const struct sk_buff *skb); |
3922285d9 net: bridge: Add ... |
1028 1029 1030 |
int br_switchdev_set_port_flag(struct net_bridge_port *p, unsigned long flags, unsigned long mask); |
6b26b51b1 net: bridge: Add ... |
1031 1032 |
void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type); |
f1c2eddf4 bridge: switchdev... |
1033 1034 1035 1036 1037 |
static inline void br_switchdev_frame_unmark(struct sk_buff *skb) { skb->offload_fwd_mark = 0; } |
6bc506b4f bridge: switchdev... |
1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 |
#else static inline int nbp_switchdev_mark_set(struct net_bridge_port *p) { return 0; } static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p, struct sk_buff *skb) { } static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p, const struct sk_buff *skb) { return true; } |
3922285d9 net: bridge: Add ... |
1054 1055 1056 1057 1058 1059 1060 |
static inline int br_switchdev_set_port_flag(struct net_bridge_port *p, unsigned long flags, unsigned long mask) { return 0; } |
6b26b51b1 net: bridge: Add ... |
1061 1062 1063 1064 1065 |
static inline void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type) { } |
f1c2eddf4 bridge: switchdev... |
1066 1067 1068 1069 |
static inline void br_switchdev_frame_unmark(struct sk_buff *skb) { } |
6bc506b4f bridge: switchdev... |
1070 |
#endif /* CONFIG_NET_SWITCHDEV */ |
1da177e4c Linux-2.6.12-rc2 |
1071 |
#endif |