Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/bridge/br_private.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* Linux ethernet bridge
4
*
5
* Authors:
6
* Lennert Buytenhek <[email protected]>
7
*/
8
9
#ifndef _BR_PRIVATE_H
10
#define _BR_PRIVATE_H
11
12
#include <linux/netdevice.h>
13
#include <linux/if_bridge.h>
14
#include <linux/netpoll.h>
15
#include <linux/u64_stats_sync.h>
16
#include <net/route.h>
17
#include <net/ip6_fib.h>
18
#include <net/pkt_cls.h>
19
#include <linux/if_vlan.h>
20
#include <linux/rhashtable.h>
21
#include <linux/refcount.h>
22
23
#define BR_HASH_BITS 8
24
#define BR_HASH_SIZE (1 << BR_HASH_BITS)
25
26
#define BR_HOLD_TIME (1*HZ)
27
28
#define BR_PORT_BITS 10
29
#define BR_MAX_PORTS (1<<BR_PORT_BITS)
30
31
#define BR_MULTICAST_DEFAULT_HASH_MAX 4096
32
#define BR_MULTICAST_QUERY_INTVL_MIN msecs_to_jiffies(1000)
33
#define BR_MULTICAST_STARTUP_QUERY_INTVL_MIN BR_MULTICAST_QUERY_INTVL_MIN
34
#define BR_MULTICAST_QUERY_INTVL_MAX msecs_to_jiffies(86400000) /* 24 hours */
35
#define BR_MULTICAST_STARTUP_QUERY_INTVL_MAX BR_MULTICAST_QUERY_INTVL_MAX
36
37
#define BR_HWDOM_MAX BITS_PER_LONG
38
39
#define BR_VERSION "2.3"
40
41
/* Control of forwarding link local multicast */
42
#define BR_GROUPFWD_DEFAULT 0
43
/* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */
44
enum {
45
BR_GROUPFWD_STP = BIT(0),
46
BR_GROUPFWD_MACPAUSE = BIT(1),
47
BR_GROUPFWD_LACP = BIT(2),
48
};
49
50
#define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | \
51
BR_GROUPFWD_LACP)
52
/* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */
53
#define BR_GROUPFWD_8021AD 0xB801u
54
55
/* Path to usermode spanning tree program */
56
#define BR_STP_PROG "/sbin/bridge-stp"
57
58
#define BR_FDB_NOTIFY_SETTABLE_BITS (FDB_NOTIFY_BIT | FDB_NOTIFY_INACTIVE_BIT)
59
60
typedef struct bridge_id bridge_id;
61
typedef struct mac_addr mac_addr;
62
typedef __u16 port_id;
63
64
struct bridge_id {
65
unsigned char prio[2];
66
unsigned char addr[ETH_ALEN];
67
};
68
69
struct mac_addr {
70
unsigned char addr[ETH_ALEN];
71
};
72
73
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
74
/* our own querier */
75
struct bridge_mcast_own_query {
76
struct timer_list timer;
77
u32 startup_sent;
78
};
79
80
/* other querier */
81
struct bridge_mcast_other_query {
82
struct timer_list timer;
83
struct timer_list delay_timer;
84
};
85
86
/* selected querier */
87
struct bridge_mcast_querier {
88
struct br_ip addr;
89
int port_ifidx;
90
seqcount_spinlock_t seq;
91
};
92
93
/* IGMP/MLD statistics */
94
struct bridge_mcast_stats {
95
struct br_mcast_stats mstats;
96
struct u64_stats_sync syncp;
97
};
98
99
struct br_mdb_src_entry {
100
struct br_ip addr;
101
};
102
103
struct br_mdb_config {
104
struct net_bridge *br;
105
struct net_bridge_port *p;
106
struct br_mdb_entry *entry;
107
struct br_ip group;
108
bool src_entry;
109
u8 filter_mode;
110
u16 nlflags;
111
struct br_mdb_src_entry *src_entries;
112
int num_src_entries;
113
u8 rt_protocol;
114
};
115
#endif
116
117
/* net_bridge_mcast_port must be always defined due to forwarding stubs */
118
struct net_bridge_mcast_port {
119
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
120
struct net_bridge_port *port;
121
struct net_bridge_vlan *vlan;
122
123
struct bridge_mcast_own_query ip4_own_query;
124
struct timer_list ip4_mc_router_timer;
125
struct hlist_node ip4_rlist;
126
#if IS_ENABLED(CONFIG_IPV6)
127
struct bridge_mcast_own_query ip6_own_query;
128
struct timer_list ip6_mc_router_timer;
129
struct hlist_node ip6_rlist;
130
#endif /* IS_ENABLED(CONFIG_IPV6) */
131
unsigned char multicast_router;
132
u32 mdb_n_entries;
133
u32 mdb_max_entries;
134
#endif /* CONFIG_BRIDGE_IGMP_SNOOPING */
135
};
136
137
/* net_bridge_mcast must be always defined due to forwarding stubs */
138
struct net_bridge_mcast {
139
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
140
struct net_bridge *br;
141
struct net_bridge_vlan *vlan;
142
143
u32 multicast_last_member_count;
144
u32 multicast_startup_query_count;
145
146
u8 multicast_querier;
147
u8 multicast_igmp_version;
148
u8 multicast_router;
149
#if IS_ENABLED(CONFIG_IPV6)
150
u8 multicast_mld_version;
151
#endif
152
unsigned long multicast_last_member_interval;
153
unsigned long multicast_membership_interval;
154
unsigned long multicast_querier_interval;
155
unsigned long multicast_query_interval;
156
unsigned long multicast_query_response_interval;
157
unsigned long multicast_startup_query_interval;
158
struct hlist_head ip4_mc_router_list;
159
struct timer_list ip4_mc_router_timer;
160
struct bridge_mcast_other_query ip4_other_query;
161
struct bridge_mcast_own_query ip4_own_query;
162
struct bridge_mcast_querier ip4_querier;
163
#if IS_ENABLED(CONFIG_IPV6)
164
struct hlist_head ip6_mc_router_list;
165
struct timer_list ip6_mc_router_timer;
166
struct bridge_mcast_other_query ip6_other_query;
167
struct bridge_mcast_own_query ip6_own_query;
168
struct bridge_mcast_querier ip6_querier;
169
#endif /* IS_ENABLED(CONFIG_IPV6) */
170
#endif /* CONFIG_BRIDGE_IGMP_SNOOPING */
171
};
172
173
struct br_tunnel_info {
174
__be64 tunnel_id;
175
struct metadata_dst __rcu *tunnel_dst;
176
};
177
178
/* private vlan flags */
179
enum {
180
BR_VLFLAG_PER_PORT_STATS = BIT(0),
181
BR_VLFLAG_ADDED_BY_SWITCHDEV = BIT(1),
182
BR_VLFLAG_MCAST_ENABLED = BIT(2),
183
BR_VLFLAG_GLOBAL_MCAST_ENABLED = BIT(3),
184
BR_VLFLAG_NEIGH_SUPPRESS_ENABLED = BIT(4),
185
};
186
187
/**
188
* struct net_bridge_vlan - per-vlan entry
189
*
190
* @vnode: rhashtable member
191
* @tnode: rhashtable member
192
* @vid: VLAN id
193
* @flags: bridge vlan flags
194
* @priv_flags: private (in-kernel) bridge vlan flags
195
* @state: STP state (e.g. blocking, learning, forwarding)
196
* @stats: per-cpu VLAN statistics
197
* @br: if MASTER flag set, this points to a bridge struct
198
* @port: if MASTER flag unset, this points to a port struct
199
* @refcnt: if MASTER flag set, this is bumped for each port referencing it
200
* @brvlan: if MASTER flag unset, this points to the global per-VLAN context
201
* for this VLAN entry
202
* @tinfo: bridge tunnel info
203
* @br_mcast_ctx: if MASTER flag set, this is the global vlan multicast context
204
* @port_mcast_ctx: if MASTER flag unset, this is the per-port/vlan multicast
205
* context
206
* @msti: if MASTER flag set, this holds the VLANs MST instance
207
* @vlist: sorted list of VLAN entries
208
* @rcu: used for entry destruction
209
*
210
* This structure is shared between the global per-VLAN entries contained in
211
* the bridge rhashtable and the local per-port per-VLAN entries contained in
212
* the port's rhashtable. The union entries should be interpreted depending on
213
* the entry flags that are set.
214
*/
215
struct net_bridge_vlan {
216
struct rhash_head vnode;
217
struct rhash_head tnode;
218
u16 vid;
219
u16 flags;
220
u16 priv_flags;
221
u8 state;
222
struct pcpu_sw_netstats __percpu *stats;
223
union {
224
struct net_bridge *br;
225
struct net_bridge_port *port;
226
};
227
union {
228
refcount_t refcnt;
229
struct net_bridge_vlan *brvlan;
230
};
231
232
struct br_tunnel_info tinfo;
233
234
union {
235
struct net_bridge_mcast br_mcast_ctx;
236
struct net_bridge_mcast_port port_mcast_ctx;
237
};
238
239
u16 msti;
240
241
struct list_head vlist;
242
243
struct rcu_head rcu;
244
};
245
246
/**
247
* struct net_bridge_vlan_group
248
*
249
* @vlan_hash: VLAN entry rhashtable
250
* @vlan_list: sorted VLAN entry list
251
* @num_vlans: number of total VLAN entries
252
* @pvid: PVID VLAN id
253
* @pvid_state: PVID's STP state (e.g. forwarding, learning, blocking)
254
*
255
* IMPORTANT: Be careful when checking if there're VLAN entries using list
256
* primitives because the bridge can have entries in its list which
257
* are just for global context but not for filtering, i.e. they have
258
* the master flag set but not the brentry flag. If you have to check
259
* if there're "real" entries in the bridge please test @num_vlans
260
*/
261
struct net_bridge_vlan_group {
262
struct rhashtable vlan_hash;
263
struct rhashtable tunnel_hash;
264
struct list_head vlan_list;
265
u16 num_vlans;
266
u16 pvid;
267
u8 pvid_state;
268
};
269
270
/* bridge fdb flags */
271
enum {
272
BR_FDB_LOCAL,
273
BR_FDB_STATIC,
274
BR_FDB_STICKY,
275
BR_FDB_ADDED_BY_USER,
276
BR_FDB_ADDED_BY_EXT_LEARN,
277
BR_FDB_OFFLOADED,
278
BR_FDB_NOTIFY,
279
BR_FDB_NOTIFY_INACTIVE,
280
BR_FDB_LOCKED,
281
BR_FDB_DYNAMIC_LEARNED,
282
};
283
284
struct net_bridge_fdb_key {
285
mac_addr addr;
286
u16 vlan_id;
287
};
288
289
struct net_bridge_fdb_entry {
290
struct rhash_head rhnode;
291
struct net_bridge_port *dst;
292
293
struct net_bridge_fdb_key key;
294
struct hlist_node fdb_node;
295
unsigned long flags;
296
297
/* write-heavy members should not affect lookups */
298
unsigned long updated ____cacheline_aligned_in_smp;
299
unsigned long used;
300
301
struct rcu_head rcu;
302
};
303
304
struct net_bridge_fdb_flush_desc {
305
unsigned long flags;
306
unsigned long flags_mask;
307
int port_ifindex;
308
u16 vlan_id;
309
};
310
311
#define MDB_PG_FLAGS_PERMANENT BIT(0)
312
#define MDB_PG_FLAGS_OFFLOAD BIT(1)
313
#define MDB_PG_FLAGS_FAST_LEAVE BIT(2)
314
#define MDB_PG_FLAGS_STAR_EXCL BIT(3)
315
#define MDB_PG_FLAGS_BLOCKED BIT(4)
316
#define MDB_PG_FLAGS_OFFLOAD_FAILED BIT(5)
317
318
#define PG_SRC_ENT_LIMIT 32
319
320
#define BR_SGRP_F_DELETE BIT(0)
321
#define BR_SGRP_F_SEND BIT(1)
322
#define BR_SGRP_F_INSTALLED BIT(2)
323
#define BR_SGRP_F_USER_ADDED BIT(3)
324
325
struct net_bridge_mcast_gc {
326
struct hlist_node gc_node;
327
void (*destroy)(struct net_bridge_mcast_gc *gc);
328
};
329
330
struct net_bridge_group_src {
331
struct hlist_node node;
332
333
struct br_ip addr;
334
struct net_bridge_port_group *pg;
335
u8 flags;
336
u8 src_query_rexmit_cnt;
337
struct timer_list timer;
338
339
struct net_bridge *br;
340
struct net_bridge_mcast_gc mcast_gc;
341
struct rcu_head rcu;
342
};
343
344
struct net_bridge_port_group_sg_key {
345
struct net_bridge_port *port;
346
struct br_ip addr;
347
};
348
349
struct net_bridge_port_group {
350
struct net_bridge_port_group __rcu *next;
351
struct net_bridge_port_group_sg_key key;
352
unsigned char eth_addr[ETH_ALEN] __aligned(2);
353
unsigned char flags;
354
unsigned char filter_mode;
355
unsigned char grp_query_rexmit_cnt;
356
unsigned char rt_protocol;
357
358
struct hlist_head src_list;
359
unsigned int src_ents;
360
struct timer_list timer;
361
struct timer_list rexmit_timer;
362
struct hlist_node mglist;
363
struct rb_root eht_set_tree;
364
struct rb_root eht_host_tree;
365
366
struct rhash_head rhnode;
367
struct net_bridge_mcast_gc mcast_gc;
368
struct rcu_head rcu;
369
};
370
371
struct net_bridge_mdb_entry {
372
struct rhash_head rhnode;
373
struct net_bridge *br;
374
struct net_bridge_port_group __rcu *ports;
375
struct br_ip addr;
376
bool host_joined;
377
378
struct timer_list timer;
379
struct hlist_node mdb_node;
380
381
struct net_bridge_mcast_gc mcast_gc;
382
struct rcu_head rcu;
383
};
384
385
struct net_bridge_port {
386
struct net_bridge *br;
387
struct net_device *dev;
388
netdevice_tracker dev_tracker;
389
struct list_head list;
390
391
unsigned long flags;
392
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
393
struct net_bridge_vlan_group __rcu *vlgrp;
394
#endif
395
struct net_bridge_port __rcu *backup_port;
396
u32 backup_nhid;
397
398
/* STP */
399
u8 priority;
400
u8 state;
401
u16 port_no;
402
unsigned char topology_change_ack;
403
unsigned char config_pending;
404
port_id port_id;
405
port_id designated_port;
406
bridge_id designated_root;
407
bridge_id designated_bridge;
408
u32 path_cost;
409
u32 designated_cost;
410
unsigned long designated_age;
411
412
struct timer_list forward_delay_timer;
413
struct timer_list hold_timer;
414
struct timer_list message_age_timer;
415
struct kobject kobj;
416
struct rcu_head rcu;
417
418
struct net_bridge_mcast_port multicast_ctx;
419
420
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
421
struct bridge_mcast_stats __percpu *mcast_stats;
422
423
u32 multicast_eht_hosts_limit;
424
u32 multicast_eht_hosts_cnt;
425
struct hlist_head mglist;
426
#endif
427
428
#ifdef CONFIG_SYSFS
429
char sysfs_name[IFNAMSIZ];
430
#endif
431
432
#ifdef CONFIG_NET_POLL_CONTROLLER
433
struct netpoll *np;
434
#endif
435
#ifdef CONFIG_NET_SWITCHDEV
436
/* Identifier used to group ports that share the same switchdev
437
* hardware domain.
438
*/
439
int hwdom;
440
int offload_count;
441
struct netdev_phys_item_id ppid;
442
#endif
443
u16 group_fwd_mask;
444
u16 backup_redirected_cnt;
445
446
struct bridge_stp_xstats stp_xstats;
447
};
448
449
#define kobj_to_brport(obj) container_of(obj, struct net_bridge_port, kobj)
450
451
#define br_auto_port(p) ((p)->flags & BR_AUTO_MASK)
452
#define br_promisc_port(p) ((p)->flags & BR_PROMISC)
453
454
static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
455
{
456
return rcu_dereference(dev->rx_handler_data);
457
}
458
459
static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev)
460
{
461
return netif_is_bridge_port(dev) ?
462
rtnl_dereference(dev->rx_handler_data) : NULL;
463
}
464
465
static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev)
466
{
467
return netif_is_bridge_port(dev) ?
468
rcu_dereference_rtnl(dev->rx_handler_data) : NULL;
469
}
470
471
enum net_bridge_opts {
472
BROPT_VLAN_ENABLED,
473
BROPT_VLAN_STATS_ENABLED,
474
BROPT_NF_CALL_IPTABLES,
475
BROPT_NF_CALL_IP6TABLES,
476
BROPT_NF_CALL_ARPTABLES,
477
BROPT_GROUP_ADDR_SET,
478
BROPT_MULTICAST_ENABLED,
479
BROPT_MULTICAST_QUERY_USE_IFADDR,
480
BROPT_MULTICAST_STATS_ENABLED,
481
BROPT_HAS_IPV6_ADDR,
482
BROPT_NEIGH_SUPPRESS_ENABLED,
483
BROPT_MTU_SET_BY_USER,
484
BROPT_VLAN_STATS_PER_PORT,
485
BROPT_NO_LL_LEARN,
486
BROPT_VLAN_BRIDGE_BINDING,
487
BROPT_MCAST_VLAN_SNOOPING_ENABLED,
488
BROPT_MST_ENABLED,
489
BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION,
490
};
491
492
struct net_bridge {
493
spinlock_t lock;
494
spinlock_t hash_lock;
495
struct hlist_head frame_type_list;
496
struct net_device *dev;
497
unsigned long options;
498
/* These fields are accessed on each packet */
499
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
500
__be16 vlan_proto;
501
u16 default_pvid;
502
struct net_bridge_vlan_group __rcu *vlgrp;
503
#endif
504
505
struct rhashtable fdb_hash_tbl;
506
struct list_head port_list;
507
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
508
union {
509
struct rtable fake_rtable;
510
struct rt6_info fake_rt6_info;
511
};
512
u32 metrics[RTAX_MAX];
513
#endif
514
u16 group_fwd_mask;
515
u16 group_fwd_mask_required;
516
517
/* STP */
518
bridge_id designated_root;
519
bridge_id bridge_id;
520
unsigned char topology_change;
521
unsigned char topology_change_detected;
522
u16 root_port;
523
unsigned long max_age;
524
unsigned long hello_time;
525
unsigned long forward_delay;
526
unsigned long ageing_time;
527
unsigned long bridge_max_age;
528
unsigned long bridge_hello_time;
529
unsigned long bridge_forward_delay;
530
unsigned long bridge_ageing_time;
531
u32 root_path_cost;
532
533
u8 group_addr[ETH_ALEN];
534
535
enum {
536
BR_NO_STP, /* no spanning tree */
537
BR_KERNEL_STP, /* old STP in kernel */
538
BR_USER_STP, /* new RSTP in userspace */
539
} stp_enabled;
540
541
struct net_bridge_mcast multicast_ctx;
542
543
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
544
struct bridge_mcast_stats __percpu *mcast_stats;
545
546
u32 hash_max;
547
548
spinlock_t multicast_lock;
549
550
struct rhashtable mdb_hash_tbl;
551
struct rhashtable sg_port_tbl;
552
553
struct hlist_head mcast_gc_list;
554
struct hlist_head mdb_list;
555
556
struct work_struct mcast_gc_work;
557
#endif
558
559
struct timer_list hello_timer;
560
struct timer_list tcn_timer;
561
struct timer_list topology_change_timer;
562
struct delayed_work gc_work;
563
struct kobject *ifobj;
564
u32 auto_cnt;
565
566
atomic_t fdb_n_learned;
567
u32 fdb_max_learned;
568
569
#ifdef CONFIG_NET_SWITCHDEV
570
/* Counter used to make sure that hardware domains get unique
571
* identifiers in case a bridge spans multiple switchdev instances.
572
*/
573
int last_hwdom;
574
/* Bit mask of hardware domain numbers in use */
575
unsigned long busy_hwdoms;
576
#endif
577
struct hlist_head fdb_list;
578
579
#if IS_ENABLED(CONFIG_BRIDGE_MRP)
580
struct hlist_head mrp_list;
581
#endif
582
#if IS_ENABLED(CONFIG_BRIDGE_CFM)
583
struct hlist_head mep_list;
584
#endif
585
};
586
587
struct br_input_skb_cb {
588
struct net_device *brdev;
589
590
u16 frag_max_size;
591
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
592
u8 igmp;
593
u8 mrouters_only:1;
594
#endif
595
u8 proxyarp_replied:1;
596
u8 src_port_isolated:1;
597
u8 promisc:1;
598
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
599
u8 vlan_filtered:1;
600
#endif
601
#ifdef CONFIG_NETFILTER_FAMILY_BRIDGE
602
u8 br_netfilter_broute:1;
603
#endif
604
605
#ifdef CONFIG_NET_SWITCHDEV
606
/* Set if TX data plane offloading is used towards at least one
607
* hardware domain.
608
*/
609
u8 tx_fwd_offload:1;
610
/* The switchdev hardware domain from which this packet was received.
611
* If skb->offload_fwd_mark was set, then this packet was already
612
* forwarded by hardware to the other ports in the source hardware
613
* domain, otherwise it wasn't.
614
*/
615
int src_hwdom;
616
/* Bit mask of hardware domains towards this packet has already been
617
* transmitted using the TX data plane offload.
618
*/
619
unsigned long fwd_hwdoms;
620
#endif
621
622
u32 backup_nhid;
623
};
624
625
#define BR_INPUT_SKB_CB(__skb) ((struct br_input_skb_cb *)(__skb)->cb)
626
627
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
628
# define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (BR_INPUT_SKB_CB(__skb)->mrouters_only)
629
#else
630
# define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb) (0)
631
#endif
632
633
#define br_printk(level, br, format, args...) \
634
printk(level "%s: " format, (br)->dev->name, ##args)
635
636
#define br_err(__br, format, args...) \
637
br_printk(KERN_ERR, __br, format, ##args)
638
#define br_warn(__br, format, args...) \
639
br_printk(KERN_WARNING, __br, format, ##args)
640
#define br_notice(__br, format, args...) \
641
br_printk(KERN_NOTICE, __br, format, ##args)
642
#define br_info(__br, format, args...) \
643
br_printk(KERN_INFO, __br, format, ##args)
644
645
#define br_debug(br, format, args...) \
646
pr_debug("%s: " format, (br)->dev->name, ##args)
647
648
/* called under bridge lock */
649
static inline int br_is_root_bridge(const struct net_bridge *br)
650
{
651
return !memcmp(&br->bridge_id, &br->designated_root, 8);
652
}
653
654
/* check if a VLAN entry is global */
655
static inline bool br_vlan_is_master(const struct net_bridge_vlan *v)
656
{
657
return v->flags & BRIDGE_VLAN_INFO_MASTER;
658
}
659
660
/* check if a VLAN entry is used by the bridge */
661
static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v)
662
{
663
return v->flags & BRIDGE_VLAN_INFO_BRENTRY;
664
}
665
666
/* check if we should use the vlan entry, returns false if it's only context */
667
static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
668
{
669
if (br_vlan_is_master(v)) {
670
if (br_vlan_is_brentry(v))
671
return true;
672
else
673
return false;
674
}
675
676
return true;
677
}
678
679
static inline bool nbp_state_should_learn(const struct net_bridge_port *p)
680
{
681
return p->state == BR_STATE_LEARNING || p->state == BR_STATE_FORWARDING;
682
}
683
684
static inline bool br_vlan_valid_id(u16 vid, struct netlink_ext_ack *extack)
685
{
686
bool ret = vid > 0 && vid < VLAN_VID_MASK;
687
688
if (!ret)
689
NL_SET_ERR_MSG_MOD(extack, "Vlan id is invalid");
690
691
return ret;
692
}
693
694
static inline bool br_vlan_valid_range(const struct bridge_vlan_info *cur,
695
const struct bridge_vlan_info *last,
696
struct netlink_ext_ack *extack)
697
{
698
/* pvid flag is not allowed in ranges */
699
if (cur->flags & BRIDGE_VLAN_INFO_PVID) {
700
NL_SET_ERR_MSG_MOD(extack, "Pvid isn't allowed in a range");
701
return false;
702
}
703
704
/* when cur is the range end, check if:
705
* - it has range start flag
706
* - range ids are invalid (end is equal to or before start)
707
*/
708
if (last) {
709
if (cur->flags & BRIDGE_VLAN_INFO_RANGE_BEGIN) {
710
NL_SET_ERR_MSG_MOD(extack, "Found a new vlan range start while processing one");
711
return false;
712
} else if (!(cur->flags & BRIDGE_VLAN_INFO_RANGE_END)) {
713
NL_SET_ERR_MSG_MOD(extack, "Vlan range end flag is missing");
714
return false;
715
} else if (cur->vid <= last->vid) {
716
NL_SET_ERR_MSG_MOD(extack, "End vlan id is less than or equal to start vlan id");
717
return false;
718
}
719
}
720
721
/* check for required range flags */
722
if (!(cur->flags & (BRIDGE_VLAN_INFO_RANGE_BEGIN |
723
BRIDGE_VLAN_INFO_RANGE_END))) {
724
NL_SET_ERR_MSG_MOD(extack, "Both vlan range flags are missing");
725
return false;
726
}
727
728
return true;
729
}
730
731
static inline u8 br_vlan_multicast_router(const struct net_bridge_vlan *v)
732
{
733
u8 mcast_router = MDB_RTR_TYPE_DISABLED;
734
735
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
736
if (!br_vlan_is_master(v))
737
mcast_router = v->port_mcast_ctx.multicast_router;
738
else
739
mcast_router = v->br_mcast_ctx.multicast_router;
740
#endif
741
742
return mcast_router;
743
}
744
745
static inline int br_afspec_cmd_to_rtm(int cmd)
746
{
747
switch (cmd) {
748
case RTM_SETLINK:
749
return RTM_NEWVLAN;
750
case RTM_DELLINK:
751
return RTM_DELVLAN;
752
}
753
754
return 0;
755
}
756
757
static inline int br_opt_get(const struct net_bridge *br,
758
enum net_bridge_opts opt)
759
{
760
return test_bit(opt, &br->options);
761
}
762
763
int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on,
764
struct netlink_ext_ack *extack);
765
int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt);
766
int br_boolopt_multi_toggle(struct net_bridge *br,
767
struct br_boolopt_multi *bm,
768
struct netlink_ext_ack *extack);
769
void br_boolopt_multi_get(const struct net_bridge *br,
770
struct br_boolopt_multi *bm);
771
void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on);
772
773
#if IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
774
static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss)
775
{
776
struct tc_skb_ext *ext;
777
778
if (!tc_skb_ext_tc_enabled())
779
return;
780
781
ext = skb_ext_find(skb, TC_SKB_EXT);
782
if (ext) {
783
ext->l2_miss = miss;
784
return;
785
}
786
if (!miss)
787
return;
788
ext = tc_skb_ext_alloc(skb);
789
if (!ext)
790
return;
791
ext->l2_miss = true;
792
}
793
#else
794
static inline void br_tc_skb_miss_set(struct sk_buff *skb, bool miss)
795
{
796
}
797
#endif
798
799
/* br_device.c */
800
void br_dev_setup(struct net_device *dev);
801
void br_dev_delete(struct net_device *dev, struct list_head *list);
802
netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
803
#ifdef CONFIG_NET_POLL_CONTROLLER
804
static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
805
struct sk_buff *skb)
806
{
807
netpoll_send_skb(p->np, skb);
808
}
809
810
int br_netpoll_enable(struct net_bridge_port *p);
811
void br_netpoll_disable(struct net_bridge_port *p);
812
#else
813
static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
814
struct sk_buff *skb)
815
{
816
}
817
818
static inline int br_netpoll_enable(struct net_bridge_port *p)
819
{
820
return 0;
821
}
822
823
static inline void br_netpoll_disable(struct net_bridge_port *p)
824
{
825
}
826
#endif
827
828
/* br_fdb.c */
829
#define FDB_FLUSH_IGNORED_NDM_FLAGS (NTF_MASTER | NTF_SELF)
830
#define FDB_FLUSH_ALLOWED_NDM_STATES (NUD_PERMANENT | NUD_NOARP)
831
#define FDB_FLUSH_ALLOWED_NDM_FLAGS (NTF_USE | NTF_EXT_LEARNED | \
832
NTF_STICKY | NTF_OFFLOADED)
833
834
int br_fdb_init(void);
835
void br_fdb_fini(void);
836
int br_fdb_hash_init(struct net_bridge *br);
837
void br_fdb_hash_fini(struct net_bridge *br);
838
void br_fdb_flush(struct net_bridge *br,
839
const struct net_bridge_fdb_flush_desc *desc);
840
void br_fdb_find_delete_local(struct net_bridge *br,
841
const struct net_bridge_port *p,
842
const unsigned char *addr, u16 vid);
843
void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
844
void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
845
void br_fdb_cleanup(struct work_struct *work);
846
void br_fdb_delete_by_port(struct net_bridge *br,
847
const struct net_bridge_port *p, u16 vid, int do_all);
848
struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br,
849
const unsigned char *addr,
850
__u16 vid);
851
int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
852
int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
853
unsigned long off);
854
int br_fdb_add_local(struct net_bridge *br, struct net_bridge_port *source,
855
const unsigned char *addr, u16 vid);
856
void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
857
const unsigned char *addr, u16 vid, unsigned long flags);
858
859
int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
860
struct net_device *dev, const unsigned char *addr, u16 vid,
861
bool *notified, struct netlink_ext_ack *extack);
862
int br_fdb_delete_bulk(struct nlmsghdr *nlh, struct net_device *dev,
863
struct netlink_ext_ack *extack);
864
int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
865
const unsigned char *addr, u16 vid, u16 nlh_flags,
866
bool *notified, struct netlink_ext_ack *extack);
867
int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
868
struct net_device *dev, struct net_device *fdev, int *idx);
869
int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev,
870
const unsigned char *addr, u16 vid, u32 portid, u32 seq,
871
struct netlink_ext_ack *extack);
872
int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
873
void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
874
int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
875
const unsigned char *addr, u16 vid,
876
bool locked, bool swdev_notify);
877
int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p,
878
const unsigned char *addr, u16 vid,
879
bool swdev_notify);
880
void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p,
881
const unsigned char *addr, u16 vid, bool offloaded);
882
883
/* br_forward.c */
884
enum br_pkt_type {
885
BR_PKT_UNICAST,
886
BR_PKT_MULTICAST,
887
BR_PKT_BROADCAST
888
};
889
int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb);
890
void br_forward(const struct net_bridge_port *to, struct sk_buff *skb,
891
bool local_rcv, bool local_orig);
892
int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
893
void br_flood(struct net_bridge *br, struct sk_buff *skb,
894
enum br_pkt_type pkt_type, bool local_rcv, bool local_orig,
895
u16 vid);
896
897
/* return true if both source port and dest port are isolated */
898
static inline bool br_skb_isolated(const struct net_bridge_port *to,
899
const struct sk_buff *skb)
900
{
901
return BR_INPUT_SKB_CB(skb)->src_port_isolated &&
902
(to->flags & BR_ISOLATED);
903
}
904
905
/* br_if.c */
906
void br_port_carrier_check(struct net_bridge_port *p, bool *notified);
907
int br_add_bridge(struct net *net, const char *name);
908
int br_del_bridge(struct net *net, const char *name);
909
int br_add_if(struct net_bridge *br, struct net_device *dev,
910
struct netlink_ext_ack *extack);
911
int br_del_if(struct net_bridge *br, struct net_device *dev);
912
void br_mtu_auto_adjust(struct net_bridge *br);
913
netdev_features_t br_features_recompute(struct net_bridge *br,
914
netdev_features_t features);
915
void br_port_flags_change(struct net_bridge_port *port, unsigned long mask);
916
void br_manage_promisc(struct net_bridge *br);
917
int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
918
919
/* br_input.c */
920
int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
921
rx_handler_func_t *br_get_rx_handler(const struct net_device *dev);
922
923
struct br_frame_type {
924
__be16 type;
925
int (*frame_handler)(struct net_bridge_port *port,
926
struct sk_buff *skb);
927
struct hlist_node list;
928
};
929
930
void br_add_frame(struct net_bridge *br, struct br_frame_type *ft);
931
void br_del_frame(struct net_bridge *br, struct br_frame_type *ft);
932
933
static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
934
{
935
return rcu_dereference(dev->rx_handler) == br_get_rx_handler(dev);
936
}
937
938
static inline bool br_rx_handler_check_rtnl(const struct net_device *dev)
939
{
940
return rcu_dereference_rtnl(dev->rx_handler) == br_get_rx_handler(dev);
941
}
942
943
static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev)
944
{
945
return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL;
946
}
947
948
static inline struct net_bridge_port *
949
br_port_get_check_rtnl(const struct net_device *dev)
950
{
951
return br_rx_handler_check_rtnl(dev) ? br_port_get_rtnl_rcu(dev) : NULL;
952
}
953
954
/* br_ioctl.c */
955
int br_dev_siocdevprivate(struct net_device *dev, struct ifreq *rq,
956
void __user *data, int cmd);
957
int br_ioctl_stub(struct net *net, unsigned int cmd, void __user *uarg);
958
959
/* br_multicast.c */
960
#ifdef CONFIG_BRIDGE_IGMP_SNOOPING
961
int br_multicast_rcv(struct net_bridge_mcast **brmctx,
962
struct net_bridge_mcast_port **pmctx,
963
struct net_bridge_vlan *vlan,
964
struct sk_buff *skb, u16 vid);
965
struct net_bridge_mdb_entry *
966
br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
967
u16 vid);
968
int br_multicast_add_port(struct net_bridge_port *port);
969
void br_multicast_del_port(struct net_bridge_port *port);
970
void br_multicast_enable_port(struct net_bridge_port *port);
971
void br_multicast_disable_port(struct net_bridge_port *port);
972
void br_multicast_init(struct net_bridge *br);
973
void br_multicast_join_snoopers(struct net_bridge *br);
974
void br_multicast_leave_snoopers(struct net_bridge *br);
975
void br_multicast_open(struct net_bridge *br);
976
void br_multicast_stop(struct net_bridge *br);
977
void br_multicast_dev_del(struct net_bridge *br);
978
void br_multicast_flood(struct net_bridge_mdb_entry *mdst, struct sk_buff *skb,
979
struct net_bridge_mcast *brmctx,
980
bool local_rcv, bool local_orig);
981
int br_multicast_set_router(struct net_bridge_mcast *brmctx, unsigned long val);
982
int br_multicast_set_port_router(struct net_bridge_mcast_port *pmctx,
983
unsigned long val);
984
int br_multicast_set_vlan_router(struct net_bridge_vlan *v, u8 mcast_router);
985
int br_multicast_toggle(struct net_bridge *br, unsigned long val,
986
struct netlink_ext_ack *extack);
987
int br_multicast_set_querier(struct net_bridge_mcast *brmctx, unsigned long val);
988
int br_multicast_set_igmp_version(struct net_bridge_mcast *brmctx,
989
unsigned long val);
990
#if IS_ENABLED(CONFIG_IPV6)
991
int br_multicast_set_mld_version(struct net_bridge_mcast *brmctx,
992
unsigned long val);
993
#endif
994
struct net_bridge_mdb_entry *
995
br_mdb_ip_get(struct net_bridge *br, struct br_ip *dst);
996
struct net_bridge_mdb_entry *
997
br_multicast_new_group(struct net_bridge *br, struct br_ip *group);
998
struct net_bridge_port_group *
999
br_multicast_new_port_group(struct net_bridge_port *port,
1000
const struct br_ip *group,
1001
struct net_bridge_port_group __rcu *next,
1002
unsigned char flags, const unsigned char *src,
1003
u8 filter_mode, u8 rt_protocol,
1004
struct netlink_ext_ack *extack);
1005
void br_multicast_del_port_group(struct net_bridge_port_group *p);
1006
int br_mdb_hash_init(struct net_bridge *br);
1007
void br_mdb_hash_fini(struct net_bridge *br);
1008
void br_mdb_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp,
1009
struct net_bridge_port_group *pg, int type);
1010
void br_mdb_flag_change_notify(struct net_device *dev, struct net_bridge_mdb_entry *mp,
1011
struct net_bridge_port_group *pg);
1012
void br_rtr_notify(struct net_device *dev, struct net_bridge_mcast_port *pmctx,
1013
int type);
1014
void br_multicast_del_pg(struct net_bridge_mdb_entry *mp,
1015
struct net_bridge_port_group *pg,
1016
struct net_bridge_port_group __rcu **pp);
1017
void br_multicast_count(struct net_bridge *br,
1018
const struct net_bridge_port *p,
1019
const struct sk_buff *skb, u8 type, u8 dir);
1020
int br_multicast_init_stats(struct net_bridge *br);
1021
void br_multicast_uninit_stats(struct net_bridge *br);
1022
void br_multicast_get_stats(const struct net_bridge *br,
1023
const struct net_bridge_port *p,
1024
struct br_mcast_stats *dest);
1025
u32 br_multicast_ngroups_get(const struct net_bridge_mcast_port *pmctx);
1026
void br_multicast_ngroups_set_max(struct net_bridge_mcast_port *pmctx, u32 max);
1027
u32 br_multicast_ngroups_get_max(const struct net_bridge_mcast_port *pmctx);
1028
int br_mdb_add(struct net_device *dev, struct nlattr *tb[], u16 nlmsg_flags,
1029
struct netlink_ext_ack *extack);
1030
int br_mdb_del(struct net_device *dev, struct nlattr *tb[],
1031
struct netlink_ext_ack *extack);
1032
int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[],
1033
struct netlink_ext_ack *extack);
1034
int br_mdb_dump(struct net_device *dev, struct sk_buff *skb,
1035
struct netlink_callback *cb);
1036
int br_mdb_get(struct net_device *dev, struct nlattr *tb[], u32 portid, u32 seq,
1037
struct netlink_ext_ack *extack);
1038
void br_multicast_host_join(const struct net_bridge_mcast *brmctx,
1039
struct net_bridge_mdb_entry *mp, bool notify);
1040
void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify);
1041
void br_multicast_star_g_handle_mode(struct net_bridge_port_group *pg,
1042
u8 filter_mode);
1043
void br_multicast_sg_add_exclude_ports(struct net_bridge_mdb_entry *star_mp,
1044
struct net_bridge_port_group *sg);
1045
struct net_bridge_group_src *
1046
br_multicast_find_group_src(struct net_bridge_port_group *pg, struct br_ip *ip);
1047
struct net_bridge_group_src *
1048
br_multicast_new_group_src(struct net_bridge_port_group *pg,
1049
struct br_ip *src_ip);
1050
void __br_multicast_del_group_src(struct net_bridge_group_src *src);
1051
void br_multicast_del_group_src(struct net_bridge_group_src *src,
1052
bool fastleave);
1053
void br_multicast_ctx_init(struct net_bridge *br,
1054
struct net_bridge_vlan *vlan,
1055
struct net_bridge_mcast *brmctx);
1056
void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx);
1057
void br_multicast_port_ctx_init(struct net_bridge_port *port,
1058
struct net_bridge_vlan *vlan,
1059
struct net_bridge_mcast_port *pmctx);
1060
void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx);
1061
void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v, u8 state);
1062
void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan, bool on);
1063
int br_multicast_toggle_vlan_snooping(struct net_bridge *br, bool on,
1064
struct netlink_ext_ack *extack);
1065
bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan, bool on);
1066
1067
int br_rports_fill_info(struct sk_buff *skb,
1068
const struct net_bridge_mcast *brmctx);
1069
int br_multicast_dump_querier_state(struct sk_buff *skb,
1070
const struct net_bridge_mcast *brmctx,
1071
int nest_attr);
1072
size_t br_multicast_querier_state_size(void);
1073
size_t br_rports_size(const struct net_bridge_mcast *brmctx);
1074
void br_multicast_set_query_intvl(struct net_bridge_mcast *brmctx,
1075
unsigned long val);
1076
void br_multicast_set_startup_query_intvl(struct net_bridge_mcast *brmctx,
1077
unsigned long val);
1078
1079
static inline bool br_group_is_l2(const struct br_ip *group)
1080
{
1081
return group->proto == 0;
1082
}
1083
1084
#define mlock_dereference(X, br) \
1085
rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
1086
1087
static inline struct hlist_node *
1088
br_multicast_get_first_rport_node(struct net_bridge_mcast *brmctx,
1089
struct sk_buff *skb)
1090
{
1091
#if IS_ENABLED(CONFIG_IPV6)
1092
if (skb->protocol == htons(ETH_P_IPV6))
1093
return rcu_dereference(hlist_first_rcu(&brmctx->ip6_mc_router_list));
1094
#endif
1095
return rcu_dereference(hlist_first_rcu(&brmctx->ip4_mc_router_list));
1096
}
1097
1098
static inline struct net_bridge_port *
1099
br_multicast_rport_from_node_skb(struct hlist_node *rp, struct sk_buff *skb)
1100
{
1101
struct net_bridge_mcast_port *mctx;
1102
1103
#if IS_ENABLED(CONFIG_IPV6)
1104
if (skb->protocol == htons(ETH_P_IPV6))
1105
mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port,
1106
ip6_rlist);
1107
else
1108
#endif
1109
mctx = hlist_entry_safe(rp, struct net_bridge_mcast_port,
1110
ip4_rlist);
1111
1112
if (mctx)
1113
return mctx->port;
1114
else
1115
return NULL;
1116
}
1117
1118
static inline bool br_ip4_multicast_is_router(struct net_bridge_mcast *brmctx)
1119
{
1120
return timer_pending(&brmctx->ip4_mc_router_timer);
1121
}
1122
1123
static inline bool br_ip6_multicast_is_router(struct net_bridge_mcast *brmctx)
1124
{
1125
#if IS_ENABLED(CONFIG_IPV6)
1126
return timer_pending(&brmctx->ip6_mc_router_timer);
1127
#else
1128
return false;
1129
#endif
1130
}
1131
1132
static inline bool
1133
br_multicast_is_router(struct net_bridge_mcast *brmctx, struct sk_buff *skb)
1134
{
1135
switch (brmctx->multicast_router) {
1136
case MDB_RTR_TYPE_PERM:
1137
return true;
1138
case MDB_RTR_TYPE_TEMP_QUERY:
1139
if (skb) {
1140
if (skb->protocol == htons(ETH_P_IP))
1141
return br_ip4_multicast_is_router(brmctx);
1142
else if (skb->protocol == htons(ETH_P_IPV6))
1143
return br_ip6_multicast_is_router(brmctx);
1144
} else {
1145
return br_ip4_multicast_is_router(brmctx) ||
1146
br_ip6_multicast_is_router(brmctx);
1147
}
1148
fallthrough;
1149
default:
1150
return false;
1151
}
1152
}
1153
1154
static inline bool
1155
__br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
1156
struct bridge_mcast_other_query *querier,
1157
const bool is_ipv6)
1158
{
1159
bool own_querier_enabled;
1160
1161
if (brmctx->multicast_querier) {
1162
if (is_ipv6 && !br_opt_get(brmctx->br, BROPT_HAS_IPV6_ADDR))
1163
own_querier_enabled = false;
1164
else
1165
own_querier_enabled = true;
1166
} else {
1167
own_querier_enabled = false;
1168
}
1169
1170
return !timer_pending(&querier->delay_timer) &&
1171
(own_querier_enabled || timer_pending(&querier->timer));
1172
}
1173
1174
static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
1175
struct ethhdr *eth,
1176
const struct net_bridge_mdb_entry *mdb)
1177
{
1178
switch (eth->h_proto) {
1179
case (htons(ETH_P_IP)):
1180
return __br_multicast_querier_exists(brmctx,
1181
&brmctx->ip4_other_query, false);
1182
#if IS_ENABLED(CONFIG_IPV6)
1183
case (htons(ETH_P_IPV6)):
1184
return __br_multicast_querier_exists(brmctx,
1185
&brmctx->ip6_other_query, true);
1186
#endif
1187
default:
1188
return !!mdb && br_group_is_l2(&mdb->addr);
1189
}
1190
}
1191
1192
static inline bool br_multicast_is_star_g(const struct br_ip *ip)
1193
{
1194
switch (ip->proto) {
1195
case htons(ETH_P_IP):
1196
return ipv4_is_zeronet(ip->src.ip4);
1197
#if IS_ENABLED(CONFIG_IPV6)
1198
case htons(ETH_P_IPV6):
1199
return ipv6_addr_any(&ip->src.ip6);
1200
#endif
1201
default:
1202
return false;
1203
}
1204
}
1205
1206
static inline bool
1207
br_multicast_should_handle_mode(const struct net_bridge_mcast *brmctx,
1208
__be16 proto)
1209
{
1210
switch (proto) {
1211
case htons(ETH_P_IP):
1212
return !!(brmctx->multicast_igmp_version == 3);
1213
#if IS_ENABLED(CONFIG_IPV6)
1214
case htons(ETH_P_IPV6):
1215
return !!(brmctx->multicast_mld_version == 2);
1216
#endif
1217
default:
1218
return false;
1219
}
1220
}
1221
1222
static inline int br_multicast_igmp_type(const struct sk_buff *skb)
1223
{
1224
return BR_INPUT_SKB_CB(skb)->igmp;
1225
}
1226
1227
static inline unsigned long br_multicast_lmqt(const struct net_bridge_mcast *brmctx)
1228
{
1229
return brmctx->multicast_last_member_interval *
1230
brmctx->multicast_last_member_count;
1231
}
1232
1233
static inline unsigned long br_multicast_gmi(const struct net_bridge_mcast *brmctx)
1234
{
1235
return brmctx->multicast_membership_interval;
1236
}
1237
1238
static inline bool
1239
br_multicast_ctx_is_vlan(const struct net_bridge_mcast *brmctx)
1240
{
1241
return !!brmctx->vlan;
1242
}
1243
1244
static inline bool
1245
br_multicast_port_ctx_is_vlan(const struct net_bridge_mcast_port *pmctx)
1246
{
1247
return !!pmctx->vlan;
1248
}
1249
1250
static inline struct net_bridge_mcast *
1251
br_multicast_port_ctx_get_global(const struct net_bridge_mcast_port *pmctx)
1252
{
1253
if (!br_multicast_port_ctx_is_vlan(pmctx))
1254
return &pmctx->port->br->multicast_ctx;
1255
else
1256
return &pmctx->vlan->brvlan->br_mcast_ctx;
1257
}
1258
1259
static inline bool
1260
br_multicast_ctx_vlan_global_disabled(const struct net_bridge_mcast *brmctx)
1261
{
1262
return br_multicast_ctx_is_vlan(brmctx) &&
1263
(!br_opt_get(brmctx->br, BROPT_MCAST_VLAN_SNOOPING_ENABLED) ||
1264
!(brmctx->vlan->priv_flags & BR_VLFLAG_GLOBAL_MCAST_ENABLED));
1265
}
1266
1267
static inline bool
1268
br_multicast_ctx_vlan_disabled(const struct net_bridge_mcast *brmctx)
1269
{
1270
return br_multicast_ctx_is_vlan(brmctx) &&
1271
!(brmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED);
1272
}
1273
1274
static inline bool
1275
br_multicast_port_ctx_vlan_disabled(const struct net_bridge_mcast_port *pmctx)
1276
{
1277
return br_multicast_port_ctx_is_vlan(pmctx) &&
1278
!(pmctx->vlan->priv_flags & BR_VLFLAG_MCAST_ENABLED);
1279
}
1280
1281
static inline bool
1282
br_multicast_port_ctx_state_disabled(const struct net_bridge_mcast_port *pmctx)
1283
{
1284
return pmctx->port->state == BR_STATE_DISABLED ||
1285
(br_multicast_port_ctx_is_vlan(pmctx) &&
1286
(br_multicast_port_ctx_vlan_disabled(pmctx) ||
1287
pmctx->vlan->state == BR_STATE_DISABLED));
1288
}
1289
1290
static inline bool
1291
br_multicast_port_ctx_state_stopped(const struct net_bridge_mcast_port *pmctx)
1292
{
1293
return br_multicast_port_ctx_state_disabled(pmctx) ||
1294
pmctx->port->state == BR_STATE_BLOCKING ||
1295
(br_multicast_port_ctx_is_vlan(pmctx) &&
1296
pmctx->vlan->state == BR_STATE_BLOCKING);
1297
}
1298
1299
static inline bool
1300
br_rports_have_mc_router(const struct net_bridge_mcast *brmctx)
1301
{
1302
#if IS_ENABLED(CONFIG_IPV6)
1303
return !hlist_empty(&brmctx->ip4_mc_router_list) ||
1304
!hlist_empty(&brmctx->ip6_mc_router_list);
1305
#else
1306
return !hlist_empty(&brmctx->ip4_mc_router_list);
1307
#endif
1308
}
1309
1310
static inline bool
1311
br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1,
1312
const struct net_bridge_mcast *brmctx2)
1313
{
1314
return brmctx1->multicast_igmp_version ==
1315
brmctx2->multicast_igmp_version &&
1316
brmctx1->multicast_last_member_count ==
1317
brmctx2->multicast_last_member_count &&
1318
brmctx1->multicast_startup_query_count ==
1319
brmctx2->multicast_startup_query_count &&
1320
brmctx1->multicast_last_member_interval ==
1321
brmctx2->multicast_last_member_interval &&
1322
brmctx1->multicast_membership_interval ==
1323
brmctx2->multicast_membership_interval &&
1324
brmctx1->multicast_querier_interval ==
1325
brmctx2->multicast_querier_interval &&
1326
brmctx1->multicast_query_interval ==
1327
brmctx2->multicast_query_interval &&
1328
brmctx1->multicast_query_response_interval ==
1329
brmctx2->multicast_query_response_interval &&
1330
brmctx1->multicast_startup_query_interval ==
1331
brmctx2->multicast_startup_query_interval &&
1332
brmctx1->multicast_querier == brmctx2->multicast_querier &&
1333
brmctx1->multicast_router == brmctx2->multicast_router &&
1334
!br_rports_have_mc_router(brmctx1) &&
1335
!br_rports_have_mc_router(brmctx2) &&
1336
#if IS_ENABLED(CONFIG_IPV6)
1337
brmctx1->multicast_mld_version ==
1338
brmctx2->multicast_mld_version &&
1339
#endif
1340
true;
1341
}
1342
1343
static inline bool
1344
br_multicast_ctx_matches_vlan_snooping(const struct net_bridge_mcast *brmctx)
1345
{
1346
bool vlan_snooping_enabled;
1347
1348
vlan_snooping_enabled = !!br_opt_get(brmctx->br,
1349
BROPT_MCAST_VLAN_SNOOPING_ENABLED);
1350
1351
return !!(vlan_snooping_enabled == br_multicast_ctx_is_vlan(brmctx));
1352
}
1353
1354
static inline void
1355
br_multicast_set_pg_offload_flags(struct net_bridge_port_group *p,
1356
bool offloaded)
1357
{
1358
p->flags &= ~(MDB_PG_FLAGS_OFFLOAD | MDB_PG_FLAGS_OFFLOAD_FAILED);
1359
p->flags |= (offloaded ? MDB_PG_FLAGS_OFFLOAD :
1360
MDB_PG_FLAGS_OFFLOAD_FAILED);
1361
}
1362
1363
static inline bool
1364
br_mdb_should_notify(const struct net_bridge *br, u8 changed_flags)
1365
{
1366
return br_opt_get(br, BROPT_MDB_OFFLOAD_FAIL_NOTIFICATION) &&
1367
(changed_flags & MDB_PG_FLAGS_OFFLOAD_FAILED);
1368
}
1369
#else
1370
static inline int br_multicast_rcv(struct net_bridge_mcast **brmctx,
1371
struct net_bridge_mcast_port **pmctx,
1372
struct net_bridge_vlan *vlan,
1373
struct sk_buff *skb,
1374
u16 vid)
1375
{
1376
return 0;
1377
}
1378
1379
static inline struct net_bridge_mdb_entry *
1380
br_mdb_entry_skb_get(struct net_bridge_mcast *brmctx, struct sk_buff *skb,
1381
u16 vid)
1382
{
1383
return NULL;
1384
}
1385
1386
static inline int br_multicast_add_port(struct net_bridge_port *port)
1387
{
1388
return 0;
1389
}
1390
1391
static inline void br_multicast_del_port(struct net_bridge_port *port)
1392
{
1393
}
1394
1395
static inline void br_multicast_enable_port(struct net_bridge_port *port)
1396
{
1397
}
1398
1399
static inline void br_multicast_disable_port(struct net_bridge_port *port)
1400
{
1401
}
1402
1403
static inline void br_multicast_init(struct net_bridge *br)
1404
{
1405
}
1406
1407
static inline void br_multicast_join_snoopers(struct net_bridge *br)
1408
{
1409
}
1410
1411
static inline void br_multicast_leave_snoopers(struct net_bridge *br)
1412
{
1413
}
1414
1415
static inline void br_multicast_open(struct net_bridge *br)
1416
{
1417
}
1418
1419
static inline void br_multicast_stop(struct net_bridge *br)
1420
{
1421
}
1422
1423
static inline void br_multicast_dev_del(struct net_bridge *br)
1424
{
1425
}
1426
1427
static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
1428
struct sk_buff *skb,
1429
struct net_bridge_mcast *brmctx,
1430
bool local_rcv, bool local_orig)
1431
{
1432
}
1433
1434
static inline bool br_multicast_is_router(struct net_bridge_mcast *brmctx,
1435
struct sk_buff *skb)
1436
{
1437
return false;
1438
}
1439
1440
static inline bool br_multicast_querier_exists(struct net_bridge_mcast *brmctx,
1441
struct ethhdr *eth,
1442
const struct net_bridge_mdb_entry *mdb)
1443
{
1444
return false;
1445
}
1446
1447
static inline int br_mdb_add(struct net_device *dev, struct nlattr *tb[],
1448
u16 nlmsg_flags, struct netlink_ext_ack *extack)
1449
{
1450
return -EOPNOTSUPP;
1451
}
1452
1453
static inline int br_mdb_del(struct net_device *dev, struct nlattr *tb[],
1454
struct netlink_ext_ack *extack)
1455
{
1456
return -EOPNOTSUPP;
1457
}
1458
1459
static inline int br_mdb_del_bulk(struct net_device *dev, struct nlattr *tb[],
1460
struct netlink_ext_ack *extack)
1461
{
1462
return -EOPNOTSUPP;
1463
}
1464
1465
static inline int br_mdb_dump(struct net_device *dev, struct sk_buff *skb,
1466
struct netlink_callback *cb)
1467
{
1468
return 0;
1469
}
1470
1471
static inline int br_mdb_get(struct net_device *dev, struct nlattr *tb[],
1472
u32 portid, u32 seq,
1473
struct netlink_ext_ack *extack)
1474
{
1475
return -EOPNOTSUPP;
1476
}
1477
1478
static inline int br_mdb_hash_init(struct net_bridge *br)
1479
{
1480
return 0;
1481
}
1482
1483
static inline void br_mdb_hash_fini(struct net_bridge *br)
1484
{
1485
}
1486
1487
static inline void br_multicast_count(struct net_bridge *br,
1488
const struct net_bridge_port *p,
1489
const struct sk_buff *skb,
1490
u8 type, u8 dir)
1491
{
1492
}
1493
1494
static inline int br_multicast_init_stats(struct net_bridge *br)
1495
{
1496
return 0;
1497
}
1498
1499
static inline void br_multicast_uninit_stats(struct net_bridge *br)
1500
{
1501
}
1502
1503
static inline int br_multicast_igmp_type(const struct sk_buff *skb)
1504
{
1505
return 0;
1506
}
1507
1508
static inline void br_multicast_ctx_init(struct net_bridge *br,
1509
struct net_bridge_vlan *vlan,
1510
struct net_bridge_mcast *brmctx)
1511
{
1512
}
1513
1514
static inline void br_multicast_ctx_deinit(struct net_bridge_mcast *brmctx)
1515
{
1516
}
1517
1518
static inline void br_multicast_port_ctx_init(struct net_bridge_port *port,
1519
struct net_bridge_vlan *vlan,
1520
struct net_bridge_mcast_port *pmctx)
1521
{
1522
}
1523
1524
static inline void br_multicast_port_ctx_deinit(struct net_bridge_mcast_port *pmctx)
1525
{
1526
}
1527
1528
static inline void br_multicast_update_vlan_mcast_ctx(struct net_bridge_vlan *v,
1529
u8 state)
1530
{
1531
}
1532
1533
static inline void br_multicast_toggle_one_vlan(struct net_bridge_vlan *vlan,
1534
bool on)
1535
{
1536
}
1537
1538
static inline int br_multicast_toggle_vlan_snooping(struct net_bridge *br,
1539
bool on,
1540
struct netlink_ext_ack *extack)
1541
{
1542
return -EOPNOTSUPP;
1543
}
1544
1545
static inline bool br_multicast_toggle_global_vlan(struct net_bridge_vlan *vlan,
1546
bool on)
1547
{
1548
return false;
1549
}
1550
1551
static inline bool
1552
br_multicast_ctx_options_equal(const struct net_bridge_mcast *brmctx1,
1553
const struct net_bridge_mcast *brmctx2)
1554
{
1555
return true;
1556
}
1557
#endif
1558
1559
/* br_vlan.c */
1560
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
1561
bool br_allowed_ingress(const struct net_bridge *br,
1562
struct net_bridge_vlan_group *vg, struct sk_buff *skb,
1563
u16 *vid, u8 *state,
1564
struct net_bridge_vlan **vlan);
1565
bool br_allowed_egress(struct net_bridge_vlan_group *vg,
1566
const struct sk_buff *skb);
1567
bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid);
1568
struct sk_buff *br_handle_vlan(struct net_bridge *br,
1569
const struct net_bridge_port *port,
1570
struct net_bridge_vlan_group *vg,
1571
struct sk_buff *skb);
1572
int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
1573
bool *changed, struct netlink_ext_ack *extack);
1574
int br_vlan_delete(struct net_bridge *br, u16 vid);
1575
void br_vlan_flush(struct net_bridge *br);
1576
struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid);
1577
void br_recalculate_fwd_mask(struct net_bridge *br);
1578
int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val,
1579
struct netlink_ext_ack *extack);
1580
int __br_vlan_set_proto(struct net_bridge *br, __be16 proto,
1581
struct netlink_ext_ack *extack);
1582
int br_vlan_set_proto(struct net_bridge *br, unsigned long val,
1583
struct netlink_ext_ack *extack);
1584
int br_vlan_set_stats(struct net_bridge *br, unsigned long val);
1585
int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val);
1586
int br_vlan_init(struct net_bridge *br);
1587
int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val,
1588
struct netlink_ext_ack *extack);
1589
int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid,
1590
struct netlink_ext_ack *extack);
1591
int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
1592
bool *changed, struct netlink_ext_ack *extack);
1593
int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
1594
void nbp_vlan_flush(struct net_bridge_port *port);
1595
int nbp_vlan_init(struct net_bridge_port *port, struct netlink_ext_ack *extack);
1596
int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask);
1597
void br_vlan_get_stats(const struct net_bridge_vlan *v,
1598
struct pcpu_sw_netstats *stats);
1599
void br_vlan_port_event(struct net_bridge_port *p, unsigned long event);
1600
int br_vlan_bridge_event(struct net_device *dev, unsigned long event,
1601
void *ptr);
1602
void br_vlan_vlan_upper_event(struct net_device *br_dev,
1603
struct net_device *vlan_dev,
1604
unsigned long event);
1605
int br_vlan_rtnl_init(void);
1606
void br_vlan_rtnl_uninit(void);
1607
void br_vlan_notify(const struct net_bridge *br,
1608
const struct net_bridge_port *p,
1609
u16 vid, u16 vid_range,
1610
int cmd);
1611
bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
1612
const struct net_bridge_vlan *range_end);
1613
1614
void br_vlan_fill_forward_path_pvid(struct net_bridge *br,
1615
struct net_device_path_ctx *ctx,
1616
struct net_device_path *path);
1617
int br_vlan_fill_forward_path_mode(struct net_bridge *br,
1618
struct net_bridge_port *dst,
1619
struct net_device_path *path);
1620
1621
static inline struct net_bridge_vlan_group *br_vlan_group(
1622
const struct net_bridge *br)
1623
{
1624
return rtnl_dereference(br->vlgrp);
1625
}
1626
1627
static inline struct net_bridge_vlan_group *nbp_vlan_group(
1628
const struct net_bridge_port *p)
1629
{
1630
return rtnl_dereference(p->vlgrp);
1631
}
1632
1633
static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
1634
const struct net_bridge *br)
1635
{
1636
return rcu_dereference(br->vlgrp);
1637
}
1638
1639
static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
1640
const struct net_bridge_port *p)
1641
{
1642
return rcu_dereference(p->vlgrp);
1643
}
1644
1645
/* Since bridge now depends on 8021Q module, but the time bridge sees the
1646
* skb, the vlan tag will always be present if the frame was tagged.
1647
*/
1648
static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
1649
{
1650
int err = 0;
1651
1652
if (skb_vlan_tag_present(skb)) {
1653
*vid = skb_vlan_tag_get_id(skb);
1654
} else {
1655
*vid = 0;
1656
err = -EINVAL;
1657
}
1658
1659
return err;
1660
}
1661
1662
static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
1663
{
1664
if (!vg)
1665
return 0;
1666
1667
smp_rmb();
1668
return vg->pvid;
1669
}
1670
1671
static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid)
1672
{
1673
return v->vid == pvid ? v->flags | BRIDGE_VLAN_INFO_PVID : v->flags;
1674
}
1675
#else
1676
static inline bool br_allowed_ingress(const struct net_bridge *br,
1677
struct net_bridge_vlan_group *vg,
1678
struct sk_buff *skb,
1679
u16 *vid, u8 *state,
1680
struct net_bridge_vlan **vlan)
1681
1682
{
1683
*vlan = NULL;
1684
return true;
1685
}
1686
1687
static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg,
1688
const struct sk_buff *skb)
1689
{
1690
return true;
1691
}
1692
1693
static inline bool br_should_learn(struct net_bridge_port *p,
1694
struct sk_buff *skb, u16 *vid)
1695
{
1696
return true;
1697
}
1698
1699
static inline struct sk_buff *br_handle_vlan(struct net_bridge *br,
1700
const struct net_bridge_port *port,
1701
struct net_bridge_vlan_group *vg,
1702
struct sk_buff *skb)
1703
{
1704
return skb;
1705
}
1706
1707
static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
1708
bool *changed, struct netlink_ext_ack *extack)
1709
{
1710
*changed = false;
1711
return -EOPNOTSUPP;
1712
}
1713
1714
static inline int br_vlan_delete(struct net_bridge *br, u16 vid)
1715
{
1716
return -EOPNOTSUPP;
1717
}
1718
1719
static inline void br_vlan_flush(struct net_bridge *br)
1720
{
1721
}
1722
1723
static inline void br_recalculate_fwd_mask(struct net_bridge *br)
1724
{
1725
}
1726
1727
static inline int br_vlan_init(struct net_bridge *br)
1728
{
1729
return 0;
1730
}
1731
1732
static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
1733
bool *changed, struct netlink_ext_ack *extack)
1734
{
1735
*changed = false;
1736
return -EOPNOTSUPP;
1737
}
1738
1739
static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
1740
{
1741
return -EOPNOTSUPP;
1742
}
1743
1744
static inline void nbp_vlan_flush(struct net_bridge_port *port)
1745
{
1746
}
1747
1748
static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg,
1749
u16 vid)
1750
{
1751
return NULL;
1752
}
1753
1754
static inline int nbp_vlan_init(struct net_bridge_port *port,
1755
struct netlink_ext_ack *extack)
1756
{
1757
return 0;
1758
}
1759
1760
static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag)
1761
{
1762
return 0;
1763
}
1764
1765
static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
1766
{
1767
return 0;
1768
}
1769
1770
static inline int br_vlan_filter_toggle(struct net_bridge *br,
1771
unsigned long val,
1772
struct netlink_ext_ack *extack)
1773
{
1774
return -EOPNOTSUPP;
1775
}
1776
1777
static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p,
1778
u32 filter_mask)
1779
{
1780
return 0;
1781
}
1782
1783
static inline void br_vlan_fill_forward_path_pvid(struct net_bridge *br,
1784
struct net_device_path_ctx *ctx,
1785
struct net_device_path *path)
1786
{
1787
}
1788
1789
static inline int br_vlan_fill_forward_path_mode(struct net_bridge *br,
1790
struct net_bridge_port *dst,
1791
struct net_device_path *path)
1792
{
1793
return 0;
1794
}
1795
1796
static inline struct net_bridge_vlan_group *br_vlan_group(
1797
const struct net_bridge *br)
1798
{
1799
return NULL;
1800
}
1801
1802
static inline struct net_bridge_vlan_group *nbp_vlan_group(
1803
const struct net_bridge_port *p)
1804
{
1805
return NULL;
1806
}
1807
1808
static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
1809
const struct net_bridge *br)
1810
{
1811
return NULL;
1812
}
1813
1814
static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
1815
const struct net_bridge_port *p)
1816
{
1817
return NULL;
1818
}
1819
1820
static inline void br_vlan_get_stats(const struct net_bridge_vlan *v,
1821
struct pcpu_sw_netstats *stats)
1822
{
1823
}
1824
1825
static inline void br_vlan_port_event(struct net_bridge_port *p,
1826
unsigned long event)
1827
{
1828
}
1829
1830
static inline int br_vlan_bridge_event(struct net_device *dev,
1831
unsigned long event, void *ptr)
1832
{
1833
return 0;
1834
}
1835
1836
static inline void br_vlan_vlan_upper_event(struct net_device *br_dev,
1837
struct net_device *vlan_dev,
1838
unsigned long event)
1839
{
1840
}
1841
1842
static inline int br_vlan_rtnl_init(void)
1843
{
1844
return 0;
1845
}
1846
1847
static inline void br_vlan_rtnl_uninit(void)
1848
{
1849
}
1850
1851
static inline void br_vlan_notify(const struct net_bridge *br,
1852
const struct net_bridge_port *p,
1853
u16 vid, u16 vid_range,
1854
int cmd)
1855
{
1856
}
1857
1858
static inline bool br_vlan_can_enter_range(const struct net_bridge_vlan *v_curr,
1859
const struct net_bridge_vlan *range_end)
1860
{
1861
return true;
1862
}
1863
1864
static inline u16 br_vlan_flags(const struct net_bridge_vlan *v, u16 pvid)
1865
{
1866
return 0;
1867
}
1868
1869
#endif
1870
1871
/* br_vlan_options.c */
1872
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
1873
bool br_vlan_opts_eq_range(const struct net_bridge_vlan *v_curr,
1874
const struct net_bridge_vlan *range_end);
1875
bool br_vlan_opts_fill(struct sk_buff *skb, const struct net_bridge_vlan *v,
1876
const struct net_bridge_port *p);
1877
size_t br_vlan_opts_nl_size(void);
1878
int br_vlan_process_options(const struct net_bridge *br,
1879
const struct net_bridge_port *p,
1880
struct net_bridge_vlan *range_start,
1881
struct net_bridge_vlan *range_end,
1882
struct nlattr **tb,
1883
struct netlink_ext_ack *extack);
1884
int br_vlan_rtm_process_global_options(struct net_device *dev,
1885
const struct nlattr *attr,
1886
int cmd,
1887
struct netlink_ext_ack *extack);
1888
bool br_vlan_global_opts_can_enter_range(const struct net_bridge_vlan *v_curr,
1889
const struct net_bridge_vlan *r_end);
1890
bool br_vlan_global_opts_fill(struct sk_buff *skb, u16 vid, u16 vid_range,
1891
const struct net_bridge_vlan *v_opts);
1892
1893
/* vlan state manipulation helpers using *_ONCE to annotate lock-free access,
1894
* while br_vlan_set_state() may access data protected by multicast_lock.
1895
*/
1896
static inline u8 br_vlan_get_state(const struct net_bridge_vlan *v)
1897
{
1898
return READ_ONCE(v->state);
1899
}
1900
1901
static inline void br_vlan_set_state(struct net_bridge_vlan *v, u8 state)
1902
{
1903
WRITE_ONCE(v->state, state);
1904
br_multicast_update_vlan_mcast_ctx(v, state);
1905
}
1906
1907
static inline u8 br_vlan_get_pvid_state(const struct net_bridge_vlan_group *vg)
1908
{
1909
return READ_ONCE(vg->pvid_state);
1910
}
1911
1912
static inline void br_vlan_set_pvid_state(struct net_bridge_vlan_group *vg,
1913
u8 state)
1914
{
1915
WRITE_ONCE(vg->pvid_state, state);
1916
}
1917
1918
/* learn_allow is true at ingress and false at egress */
1919
static inline bool br_vlan_state_allowed(u8 state, bool learn_allow)
1920
{
1921
switch (state) {
1922
case BR_STATE_LEARNING:
1923
return learn_allow;
1924
case BR_STATE_FORWARDING:
1925
return true;
1926
default:
1927
return false;
1928
}
1929
}
1930
#endif
1931
1932
/* br_mst.c */
1933
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
1934
DECLARE_STATIC_KEY_FALSE(br_mst_used);
1935
static inline bool br_mst_is_enabled(struct net_bridge *br)
1936
{
1937
return static_branch_unlikely(&br_mst_used) &&
1938
br_opt_get(br, BROPT_MST_ENABLED);
1939
}
1940
1941
int br_mst_set_state(struct net_bridge_port *p, u16 msti, u8 state,
1942
struct netlink_ext_ack *extack);
1943
int br_mst_vlan_set_msti(struct net_bridge_vlan *v, u16 msti);
1944
void br_mst_vlan_init_state(struct net_bridge_vlan *v);
1945
int br_mst_set_enabled(struct net_bridge *br, bool on,
1946
struct netlink_ext_ack *extack);
1947
size_t br_mst_info_size(const struct net_bridge_vlan_group *vg);
1948
int br_mst_fill_info(struct sk_buff *skb,
1949
const struct net_bridge_vlan_group *vg);
1950
int br_mst_process(struct net_bridge_port *p, const struct nlattr *mst_attr,
1951
struct netlink_ext_ack *extack);
1952
#else
1953
static inline bool br_mst_is_enabled(struct net_bridge *br)
1954
{
1955
return false;
1956
}
1957
1958
static inline int br_mst_set_state(struct net_bridge_port *p, u16 msti,
1959
u8 state, struct netlink_ext_ack *extack)
1960
{
1961
return -EOPNOTSUPP;
1962
}
1963
1964
static inline int br_mst_set_enabled(struct net_bridge *br, bool on,
1965
struct netlink_ext_ack *extack)
1966
{
1967
return -EOPNOTSUPP;
1968
}
1969
1970
static inline size_t br_mst_info_size(const struct net_bridge_vlan_group *vg)
1971
{
1972
return 0;
1973
}
1974
1975
static inline int br_mst_fill_info(struct sk_buff *skb,
1976
const struct net_bridge_vlan_group *vg)
1977
{
1978
return -EOPNOTSUPP;
1979
}
1980
1981
static inline int br_mst_process(struct net_bridge_port *p,
1982
const struct nlattr *mst_attr,
1983
struct netlink_ext_ack *extack)
1984
{
1985
return -EOPNOTSUPP;
1986
}
1987
#endif
1988
1989
struct nf_br_ops {
1990
int (*br_dev_xmit_hook)(struct sk_buff *skb);
1991
};
1992
extern const struct nf_br_ops __rcu *nf_br_ops;
1993
1994
/* br_netfilter.c */
1995
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
1996
int br_nf_core_init(void);
1997
void br_nf_core_fini(void);
1998
void br_netfilter_rtable_init(struct net_bridge *);
1999
#else
2000
static inline int br_nf_core_init(void) { return 0; }
2001
static inline void br_nf_core_fini(void) {}
2002
#define br_netfilter_rtable_init(x)
2003
#endif
2004
2005
/* br_stp.c */
2006
void br_set_state(struct net_bridge_port *p, unsigned int state);
2007
struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
2008
void br_init_port(struct net_bridge_port *p);
2009
void br_become_designated_port(struct net_bridge_port *p);
2010
2011
void __br_set_forward_delay(struct net_bridge *br, unsigned long t);
2012
int br_set_forward_delay(struct net_bridge *br, unsigned long x);
2013
int br_set_hello_time(struct net_bridge *br, unsigned long x);
2014
int br_set_max_age(struct net_bridge *br, unsigned long x);
2015
int __set_ageing_time(struct net_device *dev, unsigned long t);
2016
int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time);
2017
2018
2019
/* br_stp_if.c */
2020
void br_stp_enable_bridge(struct net_bridge *br);
2021
void br_stp_disable_bridge(struct net_bridge *br);
2022
int br_stp_set_enabled(struct net_bridge *br, unsigned long val,
2023
struct netlink_ext_ack *extack);
2024
void br_stp_enable_port(struct net_bridge_port *p);
2025
void br_stp_disable_port(struct net_bridge_port *p);
2026
bool br_stp_recalculate_bridge_id(struct net_bridge *br);
2027
void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
2028
void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio);
2029
int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio);
2030
int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost);
2031
ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
2032
2033
/* br_stp_bpdu.c */
2034
struct stp_proto;
2035
void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
2036
struct net_device *dev);
2037
2038
/* br_stp_timer.c */
2039
void br_stp_timer_init(struct net_bridge *br);
2040
void br_stp_port_timer_init(struct net_bridge_port *p);
2041
unsigned long br_timer_value(const struct timer_list *timer);
2042
2043
/* br.c */
2044
#if IS_ENABLED(CONFIG_ATM_LANE)
2045
extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
2046
#endif
2047
2048
/* br_mrp.c */
2049
#if IS_ENABLED(CONFIG_BRIDGE_MRP)
2050
int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
2051
struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);
2052
bool br_mrp_enabled(struct net_bridge *br);
2053
void br_mrp_port_del(struct net_bridge *br, struct net_bridge_port *p);
2054
int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br);
2055
#else
2056
static inline int br_mrp_parse(struct net_bridge *br, struct net_bridge_port *p,
2057
struct nlattr *attr, int cmd,
2058
struct netlink_ext_ack *extack)
2059
{
2060
return -EOPNOTSUPP;
2061
}
2062
2063
static inline bool br_mrp_enabled(struct net_bridge *br)
2064
{
2065
return false;
2066
}
2067
2068
static inline void br_mrp_port_del(struct net_bridge *br,
2069
struct net_bridge_port *p)
2070
{
2071
}
2072
2073
static inline int br_mrp_fill_info(struct sk_buff *skb, struct net_bridge *br)
2074
{
2075
return 0;
2076
}
2077
2078
#endif
2079
2080
/* br_cfm.c */
2081
#if IS_ENABLED(CONFIG_BRIDGE_CFM)
2082
int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p,
2083
struct nlattr *attr, int cmd, struct netlink_ext_ack *extack);
2084
bool br_cfm_created(struct net_bridge *br);
2085
void br_cfm_port_del(struct net_bridge *br, struct net_bridge_port *p);
2086
int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br);
2087
int br_cfm_status_fill_info(struct sk_buff *skb,
2088
struct net_bridge *br,
2089
bool getlink);
2090
int br_cfm_mep_count(struct net_bridge *br, u32 *count);
2091
int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count);
2092
#else
2093
static inline int br_cfm_parse(struct net_bridge *br, struct net_bridge_port *p,
2094
struct nlattr *attr, int cmd,
2095
struct netlink_ext_ack *extack)
2096
{
2097
return -EOPNOTSUPP;
2098
}
2099
2100
static inline bool br_cfm_created(struct net_bridge *br)
2101
{
2102
return false;
2103
}
2104
2105
static inline void br_cfm_port_del(struct net_bridge *br,
2106
struct net_bridge_port *p)
2107
{
2108
}
2109
2110
static inline int br_cfm_config_fill_info(struct sk_buff *skb, struct net_bridge *br)
2111
{
2112
return -EOPNOTSUPP;
2113
}
2114
2115
static inline int br_cfm_status_fill_info(struct sk_buff *skb,
2116
struct net_bridge *br,
2117
bool getlink)
2118
{
2119
return -EOPNOTSUPP;
2120
}
2121
2122
static inline int br_cfm_mep_count(struct net_bridge *br, u32 *count)
2123
{
2124
*count = 0;
2125
return -EOPNOTSUPP;
2126
}
2127
2128
static inline int br_cfm_peer_mep_count(struct net_bridge *br, u32 *count)
2129
{
2130
*count = 0;
2131
return -EOPNOTSUPP;
2132
}
2133
#endif
2134
2135
/* br_netlink.c */
2136
extern struct rtnl_link_ops br_link_ops;
2137
int br_netlink_init(void);
2138
void br_netlink_fini(void);
2139
void br_ifinfo_notify(int event, const struct net_bridge *br,
2140
const struct net_bridge_port *port);
2141
void br_info_notify(int event, const struct net_bridge *br,
2142
const struct net_bridge_port *port, u32 filter);
2143
int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags,
2144
struct netlink_ext_ack *extack);
2145
int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
2146
int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
2147
u32 filter_mask, int nlflags);
2148
int br_process_vlan_info(struct net_bridge *br,
2149
struct net_bridge_port *p, int cmd,
2150
struct bridge_vlan_info *vinfo_curr,
2151
struct bridge_vlan_info **vinfo_last,
2152
bool *changed,
2153
struct netlink_ext_ack *extack);
2154
2155
#ifdef CONFIG_SYSFS
2156
/* br_sysfs_if.c */
2157
extern const struct sysfs_ops brport_sysfs_ops;
2158
int br_sysfs_addif(struct net_bridge_port *p);
2159
int br_sysfs_renameif(struct net_bridge_port *p);
2160
2161
/* br_sysfs_br.c */
2162
int br_sysfs_addbr(struct net_device *dev);
2163
void br_sysfs_delbr(struct net_device *dev);
2164
2165
#else
2166
2167
static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
2168
static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
2169
static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
2170
static inline void br_sysfs_delbr(struct net_device *dev) { return; }
2171
#endif /* CONFIG_SYSFS */
2172
2173
/* br_switchdev.c */
2174
#ifdef CONFIG_NET_SWITCHDEV
2175
int br_switchdev_port_offload(struct net_bridge_port *p,
2176
struct net_device *dev, const void *ctx,
2177
struct notifier_block *atomic_nb,
2178
struct notifier_block *blocking_nb,
2179
bool tx_fwd_offload,
2180
struct netlink_ext_ack *extack);
2181
2182
void br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx,
2183
struct notifier_block *atomic_nb,
2184
struct notifier_block *blocking_nb);
2185
2186
int br_switchdev_port_replay(struct net_bridge_port *p,
2187
struct net_device *dev, const void *ctx,
2188
struct notifier_block *atomic_nb,
2189
struct notifier_block *blocking_nb,
2190
struct netlink_ext_ack *extack);
2191
2192
bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb);
2193
2194
void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb);
2195
2196
void nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p,
2197
struct sk_buff *skb);
2198
void nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p,
2199
struct sk_buff *skb);
2200
void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
2201
struct sk_buff *skb);
2202
bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
2203
const struct sk_buff *skb);
2204
int br_switchdev_set_port_flag(struct net_bridge_port *p,
2205
unsigned long flags,
2206
unsigned long mask,
2207
struct netlink_ext_ack *extack);
2208
void br_switchdev_fdb_notify(struct net_bridge *br,
2209
const struct net_bridge_fdb_entry *fdb, int type);
2210
void br_switchdev_mdb_notify(struct net_device *dev,
2211
struct net_bridge_mdb_entry *mp,
2212
struct net_bridge_port_group *pg,
2213
int type);
2214
int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags,
2215
bool changed, struct netlink_ext_ack *extack);
2216
int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid);
2217
void br_switchdev_init(struct net_bridge *br);
2218
2219
static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
2220
{
2221
skb->offload_fwd_mark = 0;
2222
}
2223
#else
2224
static inline int
2225
br_switchdev_port_offload(struct net_bridge_port *p,
2226
struct net_device *dev, const void *ctx,
2227
struct notifier_block *atomic_nb,
2228
struct notifier_block *blocking_nb,
2229
bool tx_fwd_offload,
2230
struct netlink_ext_ack *extack)
2231
{
2232
return -EOPNOTSUPP;
2233
}
2234
2235
static inline void
2236
br_switchdev_port_unoffload(struct net_bridge_port *p, const void *ctx,
2237
struct notifier_block *atomic_nb,
2238
struct notifier_block *blocking_nb)
2239
{
2240
}
2241
2242
static inline int
2243
br_switchdev_port_replay(struct net_bridge_port *p,
2244
struct net_device *dev, const void *ctx,
2245
struct notifier_block *atomic_nb,
2246
struct notifier_block *blocking_nb,
2247
struct netlink_ext_ack *extack)
2248
{
2249
return -EOPNOTSUPP;
2250
}
2251
2252
static inline bool br_switchdev_frame_uses_tx_fwd_offload(struct sk_buff *skb)
2253
{
2254
return false;
2255
}
2256
2257
static inline void br_switchdev_frame_set_offload_fwd_mark(struct sk_buff *skb)
2258
{
2259
}
2260
2261
static inline void
2262
nbp_switchdev_frame_mark_tx_fwd_offload(const struct net_bridge_port *p,
2263
struct sk_buff *skb)
2264
{
2265
}
2266
2267
static inline void
2268
nbp_switchdev_frame_mark_tx_fwd_to_hwdom(const struct net_bridge_port *p,
2269
struct sk_buff *skb)
2270
{
2271
}
2272
2273
static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
2274
struct sk_buff *skb)
2275
{
2276
}
2277
2278
static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
2279
const struct sk_buff *skb)
2280
{
2281
return true;
2282
}
2283
2284
static inline int br_switchdev_set_port_flag(struct net_bridge_port *p,
2285
unsigned long flags,
2286
unsigned long mask,
2287
struct netlink_ext_ack *extack)
2288
{
2289
return 0;
2290
}
2291
2292
static inline int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid,
2293
u16 flags, bool changed,
2294
struct netlink_ext_ack *extack)
2295
{
2296
return -EOPNOTSUPP;
2297
}
2298
2299
static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid)
2300
{
2301
return -EOPNOTSUPP;
2302
}
2303
2304
static inline void
2305
br_switchdev_fdb_notify(struct net_bridge *br,
2306
const struct net_bridge_fdb_entry *fdb, int type)
2307
{
2308
}
2309
2310
static inline void br_switchdev_mdb_notify(struct net_device *dev,
2311
struct net_bridge_mdb_entry *mp,
2312
struct net_bridge_port_group *pg,
2313
int type)
2314
{
2315
}
2316
2317
static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
2318
{
2319
}
2320
2321
static inline void br_switchdev_init(struct net_bridge *br)
2322
{
2323
}
2324
2325
#endif /* CONFIG_NET_SWITCHDEV */
2326
2327
/* br_arp_nd_proxy.c */
2328
void br_recalculate_neigh_suppress_enabled(struct net_bridge *br);
2329
void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
2330
u16 vid, struct net_bridge_port *p);
2331
void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
2332
u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
2333
struct nd_msg *br_is_nd_neigh_msg(const struct sk_buff *skb, struct nd_msg *m);
2334
bool br_is_neigh_suppress_enabled(const struct net_bridge_port *p, u16 vid);
2335
#endif
2336
2337