root/net/bridge/br_private.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. br_port_get_rcu
  2. br_port_get_rtnl
  3. br_port_get_rtnl_rcu
  4. br_is_root_bridge
  5. br_vlan_is_master
  6. br_vlan_is_brentry
  7. br_vlan_should_use
  8. br_opt_get
  9. br_netpoll_send_skb
  10. br_netpoll_send_skb
  11. br_netpoll_enable
  12. br_netpoll_disable
  13. br_skb_isolated
  14. br_rx_handler_check_rcu
  15. br_rx_handler_check_rtnl
  16. br_port_get_check_rcu
  17. br_port_get_check_rtnl
  18. br_multicast_is_router
  19. __br_multicast_querier_exists
  20. br_multicast_querier_exists
  21. br_multicast_igmp_type
  22. br_multicast_rcv
  23. br_mdb_get
  24. br_multicast_add_port
  25. br_multicast_del_port
  26. br_multicast_enable_port
  27. br_multicast_disable_port
  28. br_multicast_init
  29. br_multicast_open
  30. br_multicast_stop
  31. br_multicast_dev_del
  32. br_multicast_flood
  33. br_multicast_is_router
  34. br_multicast_querier_exists
  35. br_mdb_init
  36. br_mdb_uninit
  37. br_mdb_hash_init
  38. br_mdb_hash_fini
  39. br_multicast_count
  40. br_multicast_init_stats
  41. br_multicast_uninit_stats
  42. br_multicast_igmp_type
  43. br_vlan_group
  44. nbp_vlan_group
  45. br_vlan_group_rcu
  46. nbp_vlan_group_rcu
  47. br_vlan_get_tag
  48. br_get_pvid
  49. br_allowed_ingress
  50. br_allowed_egress
  51. br_should_learn
  52. br_handle_vlan
  53. br_vlan_add
  54. br_vlan_delete
  55. br_vlan_flush
  56. br_recalculate_fwd_mask
  57. br_vlan_init
  58. nbp_vlan_add
  59. nbp_vlan_delete
  60. nbp_vlan_flush
  61. br_vlan_find
  62. nbp_vlan_init
  63. br_vlan_get_tag
  64. br_get_pvid
  65. __br_vlan_filter_toggle
  66. nbp_get_num_vlan_infos
  67. br_vlan_group
  68. nbp_vlan_group
  69. br_vlan_group_rcu
  70. nbp_vlan_group_rcu
  71. br_vlan_get_stats
  72. br_vlan_port_event
  73. br_vlan_bridge_event
  74. br_nf_core_init
  75. br_nf_core_fini
  76. br_sysfs_addif
  77. br_sysfs_renameif
  78. br_sysfs_addbr
  79. br_sysfs_delbr
  80. br_switchdev_frame_unmark
  81. nbp_switchdev_mark_set
  82. nbp_switchdev_frame_mark
  83. nbp_switchdev_allowed_egress
  84. br_switchdev_set_port_flag
  85. br_switchdev_port_vlan_add
  86. br_switchdev_port_vlan_del
  87. br_switchdev_fdb_notify
  88. br_switchdev_frame_unmark

   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3  *      Linux ethernet bridge
   4  *
   5  *      Authors:
   6  *      Lennert Buytenhek               <buytenh@gnu.org>
   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 <linux/if_vlan.h>
  19 #include <linux/rhashtable.h>
  20 #include <linux/refcount.h>
  21 
  22 #define BR_HASH_BITS 8
  23 #define BR_HASH_SIZE (1 << BR_HASH_BITS)
  24 
  25 #define BR_HOLD_TIME (1*HZ)
  26 
  27 #define BR_PORT_BITS    10
  28 #define BR_MAX_PORTS    (1<<BR_PORT_BITS)
  29 
  30 #define BR_MULTICAST_DEFAULT_HASH_MAX 4096
  31 
  32 #define BR_VERSION      "2.3"
  33 
  34 /* Control of forwarding link local multicast */
  35 #define BR_GROUPFWD_DEFAULT     0
  36 /* Don't allow forwarding of control protocols like STP, MAC PAUSE and LACP */
  37 enum {
  38         BR_GROUPFWD_STP         = BIT(0),
  39         BR_GROUPFWD_MACPAUSE    = BIT(1),
  40         BR_GROUPFWD_LACP        = BIT(2),
  41 };
  42 
  43 #define BR_GROUPFWD_RESTRICTED (BR_GROUPFWD_STP | BR_GROUPFWD_MACPAUSE | \
  44                                 BR_GROUPFWD_LACP)
  45 /* The Nearest Customer Bridge Group Address, 01-80-C2-00-00-[00,0B,0C,0D,0F] */
  46 #define BR_GROUPFWD_8021AD      0xB801u
  47 
  48 /* Path to usermode spanning tree program */
  49 #define BR_STP_PROG     "/sbin/bridge-stp"
  50 
  51 typedef struct bridge_id bridge_id;
  52 typedef struct mac_addr mac_addr;
  53 typedef __u16 port_id;
  54 
  55 struct bridge_id {
  56         unsigned char   prio[2];
  57         unsigned char   addr[ETH_ALEN];
  58 };
  59 
  60 struct mac_addr {
  61         unsigned char   addr[ETH_ALEN];
  62 };
  63 
  64 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
  65 /* our own querier */
  66 struct bridge_mcast_own_query {
  67         struct timer_list       timer;
  68         u32                     startup_sent;
  69 };
  70 
  71 /* other querier */
  72 struct bridge_mcast_other_query {
  73         struct timer_list               timer;
  74         unsigned long                   delay_time;
  75 };
  76 
  77 /* selected querier */
  78 struct bridge_mcast_querier {
  79         struct br_ip addr;
  80         struct net_bridge_port __rcu    *port;
  81 };
  82 
  83 /* IGMP/MLD statistics */
  84 struct bridge_mcast_stats {
  85         struct br_mcast_stats mstats;
  86         struct u64_stats_sync syncp;
  87 };
  88 #endif
  89 
  90 struct br_vlan_stats {
  91         u64 rx_bytes;
  92         u64 rx_packets;
  93         u64 tx_bytes;
  94         u64 tx_packets;
  95         struct u64_stats_sync syncp;
  96 };
  97 
  98 struct br_tunnel_info {
  99         __be64                  tunnel_id;
 100         struct metadata_dst     *tunnel_dst;
 101 };
 102 
 103 /* private vlan flags */
 104 enum {
 105         BR_VLFLAG_PER_PORT_STATS = BIT(0),
 106         BR_VLFLAG_ADDED_BY_SWITCHDEV = BIT(1),
 107 };
 108 
 109 /**
 110  * struct net_bridge_vlan - per-vlan entry
 111  *
 112  * @vnode: rhashtable member
 113  * @vid: VLAN id
 114  * @flags: bridge vlan flags
 115  * @priv_flags: private (in-kernel) bridge vlan flags
 116  * @stats: per-cpu VLAN statistics
 117  * @br: if MASTER flag set, this points to a bridge struct
 118  * @port: if MASTER flag unset, this points to a port struct
 119  * @refcnt: if MASTER flag set, this is bumped for each port referencing it
 120  * @brvlan: if MASTER flag unset, this points to the global per-VLAN context
 121  *          for this VLAN entry
 122  * @vlist: sorted list of VLAN entries
 123  * @rcu: used for entry destruction
 124  *
 125  * This structure is shared between the global per-VLAN entries contained in
 126  * the bridge rhashtable and the local per-port per-VLAN entries contained in
 127  * the port's rhashtable. The union entries should be interpreted depending on
 128  * the entry flags that are set.
 129  */
 130 struct net_bridge_vlan {
 131         struct rhash_head               vnode;
 132         struct rhash_head               tnode;
 133         u16                             vid;
 134         u16                             flags;
 135         u16                             priv_flags;
 136         struct br_vlan_stats __percpu   *stats;
 137         union {
 138                 struct net_bridge       *br;
 139                 struct net_bridge_port  *port;
 140         };
 141         union {
 142                 refcount_t              refcnt;
 143                 struct net_bridge_vlan  *brvlan;
 144         };
 145 
 146         struct br_tunnel_info           tinfo;
 147 
 148         struct list_head                vlist;
 149 
 150         struct rcu_head                 rcu;
 151 };
 152 
 153 /**
 154  * struct net_bridge_vlan_group
 155  *
 156  * @vlan_hash: VLAN entry rhashtable
 157  * @vlan_list: sorted VLAN entry list
 158  * @num_vlans: number of total VLAN entries
 159  * @pvid: PVID VLAN id
 160  *
 161  * IMPORTANT: Be careful when checking if there're VLAN entries using list
 162  *            primitives because the bridge can have entries in its list which
 163  *            are just for global context but not for filtering, i.e. they have
 164  *            the master flag set but not the brentry flag. If you have to check
 165  *            if there're "real" entries in the bridge please test @num_vlans
 166  */
 167 struct net_bridge_vlan_group {
 168         struct rhashtable               vlan_hash;
 169         struct rhashtable               tunnel_hash;
 170         struct list_head                vlan_list;
 171         u16                             num_vlans;
 172         u16                             pvid;
 173 };
 174 
 175 struct net_bridge_fdb_key {
 176         mac_addr addr;
 177         u16 vlan_id;
 178 };
 179 
 180 struct net_bridge_fdb_entry {
 181         struct rhash_head               rhnode;
 182         struct net_bridge_port          *dst;
 183 
 184         struct net_bridge_fdb_key       key;
 185         struct hlist_node               fdb_node;
 186         unsigned char                   is_local:1,
 187                                         is_static:1,
 188                                         is_sticky:1,
 189                                         added_by_user:1,
 190                                         added_by_external_learn:1,
 191                                         offloaded:1;
 192 
 193         /* write-heavy members should not affect lookups */
 194         unsigned long                   updated ____cacheline_aligned_in_smp;
 195         unsigned long                   used;
 196 
 197         struct rcu_head                 rcu;
 198 };
 199 
 200 #define MDB_PG_FLAGS_PERMANENT  BIT(0)
 201 #define MDB_PG_FLAGS_OFFLOAD    BIT(1)
 202 #define MDB_PG_FLAGS_FAST_LEAVE BIT(2)
 203 
 204 struct net_bridge_port_group {
 205         struct net_bridge_port          *port;
 206         struct net_bridge_port_group __rcu *next;
 207         struct hlist_node               mglist;
 208         struct rcu_head                 rcu;
 209         struct timer_list               timer;
 210         struct br_ip                    addr;
 211         unsigned char                   flags;
 212         unsigned char                   eth_addr[ETH_ALEN];
 213 };
 214 
 215 struct net_bridge_mdb_entry {
 216         struct rhash_head               rhnode;
 217         struct net_bridge               *br;
 218         struct net_bridge_port_group __rcu *ports;
 219         struct rcu_head                 rcu;
 220         struct timer_list               timer;
 221         struct br_ip                    addr;
 222         bool                            host_joined;
 223         struct hlist_node               mdb_node;
 224 };
 225 
 226 struct net_bridge_port {
 227         struct net_bridge               *br;
 228         struct net_device               *dev;
 229         struct list_head                list;
 230 
 231         unsigned long                   flags;
 232 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
 233         struct net_bridge_vlan_group    __rcu *vlgrp;
 234 #endif
 235         struct net_bridge_port          __rcu *backup_port;
 236 
 237         /* STP */
 238         u8                              priority;
 239         u8                              state;
 240         u16                             port_no;
 241         unsigned char                   topology_change_ack;
 242         unsigned char                   config_pending;
 243         port_id                         port_id;
 244         port_id                         designated_port;
 245         bridge_id                       designated_root;
 246         bridge_id                       designated_bridge;
 247         u32                             path_cost;
 248         u32                             designated_cost;
 249         unsigned long                   designated_age;
 250 
 251         struct timer_list               forward_delay_timer;
 252         struct timer_list               hold_timer;
 253         struct timer_list               message_age_timer;
 254         struct kobject                  kobj;
 255         struct rcu_head                 rcu;
 256 
 257 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 258         struct bridge_mcast_own_query   ip4_own_query;
 259 #if IS_ENABLED(CONFIG_IPV6)
 260         struct bridge_mcast_own_query   ip6_own_query;
 261 #endif /* IS_ENABLED(CONFIG_IPV6) */
 262         unsigned char                   multicast_router;
 263         struct bridge_mcast_stats       __percpu *mcast_stats;
 264         struct timer_list               multicast_router_timer;
 265         struct hlist_head               mglist;
 266         struct hlist_node               rlist;
 267 #endif
 268 
 269 #ifdef CONFIG_SYSFS
 270         char                            sysfs_name[IFNAMSIZ];
 271 #endif
 272 
 273 #ifdef CONFIG_NET_POLL_CONTROLLER
 274         struct netpoll                  *np;
 275 #endif
 276 #ifdef CONFIG_NET_SWITCHDEV
 277         int                             offload_fwd_mark;
 278 #endif
 279         u16                             group_fwd_mask;
 280         u16                             backup_redirected_cnt;
 281 };
 282 
 283 #define kobj_to_brport(obj)     container_of(obj, struct net_bridge_port, kobj)
 284 
 285 #define br_auto_port(p) ((p)->flags & BR_AUTO_MASK)
 286 #define br_promisc_port(p) ((p)->flags & BR_PROMISC)
 287 
 288 static inline struct net_bridge_port *br_port_get_rcu(const struct net_device *dev)
 289 {
 290         return rcu_dereference(dev->rx_handler_data);
 291 }
 292 
 293 static inline struct net_bridge_port *br_port_get_rtnl(const struct net_device *dev)
 294 {
 295         return netif_is_bridge_port(dev) ?
 296                 rtnl_dereference(dev->rx_handler_data) : NULL;
 297 }
 298 
 299 static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_device *dev)
 300 {
 301         return netif_is_bridge_port(dev) ?
 302                 rcu_dereference_rtnl(dev->rx_handler_data) : NULL;
 303 }
 304 
 305 enum net_bridge_opts {
 306         BROPT_VLAN_ENABLED,
 307         BROPT_VLAN_STATS_ENABLED,
 308         BROPT_NF_CALL_IPTABLES,
 309         BROPT_NF_CALL_IP6TABLES,
 310         BROPT_NF_CALL_ARPTABLES,
 311         BROPT_GROUP_ADDR_SET,
 312         BROPT_MULTICAST_ENABLED,
 313         BROPT_MULTICAST_QUERIER,
 314         BROPT_MULTICAST_QUERY_USE_IFADDR,
 315         BROPT_MULTICAST_STATS_ENABLED,
 316         BROPT_HAS_IPV6_ADDR,
 317         BROPT_NEIGH_SUPPRESS_ENABLED,
 318         BROPT_MTU_SET_BY_USER,
 319         BROPT_VLAN_STATS_PER_PORT,
 320         BROPT_NO_LL_LEARN,
 321         BROPT_VLAN_BRIDGE_BINDING,
 322 };
 323 
 324 struct net_bridge {
 325         spinlock_t                      lock;
 326         spinlock_t                      hash_lock;
 327         struct list_head                port_list;
 328         struct net_device               *dev;
 329         struct pcpu_sw_netstats         __percpu *stats;
 330         unsigned long                   options;
 331         /* These fields are accessed on each packet */
 332 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
 333         __be16                          vlan_proto;
 334         u16                             default_pvid;
 335         struct net_bridge_vlan_group    __rcu *vlgrp;
 336 #endif
 337 
 338         struct rhashtable               fdb_hash_tbl;
 339 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
 340         union {
 341                 struct rtable           fake_rtable;
 342                 struct rt6_info         fake_rt6_info;
 343         };
 344 #endif
 345         u16                             group_fwd_mask;
 346         u16                             group_fwd_mask_required;
 347 
 348         /* STP */
 349         bridge_id                       designated_root;
 350         bridge_id                       bridge_id;
 351         unsigned char                   topology_change;
 352         unsigned char                   topology_change_detected;
 353         u16                             root_port;
 354         unsigned long                   max_age;
 355         unsigned long                   hello_time;
 356         unsigned long                   forward_delay;
 357         unsigned long                   ageing_time;
 358         unsigned long                   bridge_max_age;
 359         unsigned long                   bridge_hello_time;
 360         unsigned long                   bridge_forward_delay;
 361         unsigned long                   bridge_ageing_time;
 362         u32                             root_path_cost;
 363 
 364         u8                              group_addr[ETH_ALEN];
 365 
 366         enum {
 367                 BR_NO_STP,              /* no spanning tree */
 368                 BR_KERNEL_STP,          /* old STP in kernel */
 369                 BR_USER_STP,            /* new RSTP in userspace */
 370         } stp_enabled;
 371 
 372 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 373 
 374         u32                             hash_max;
 375 
 376         u32                             multicast_last_member_count;
 377         u32                             multicast_startup_query_count;
 378 
 379         u8                              multicast_igmp_version;
 380         u8                              multicast_router;
 381 #if IS_ENABLED(CONFIG_IPV6)
 382         u8                              multicast_mld_version;
 383 #endif
 384         spinlock_t                      multicast_lock;
 385         unsigned long                   multicast_last_member_interval;
 386         unsigned long                   multicast_membership_interval;
 387         unsigned long                   multicast_querier_interval;
 388         unsigned long                   multicast_query_interval;
 389         unsigned long                   multicast_query_response_interval;
 390         unsigned long                   multicast_startup_query_interval;
 391 
 392         struct rhashtable               mdb_hash_tbl;
 393 
 394         struct hlist_head               mdb_list;
 395         struct hlist_head               router_list;
 396 
 397         struct timer_list               multicast_router_timer;
 398         struct bridge_mcast_other_query ip4_other_query;
 399         struct bridge_mcast_own_query   ip4_own_query;
 400         struct bridge_mcast_querier     ip4_querier;
 401         struct bridge_mcast_stats       __percpu *mcast_stats;
 402 #if IS_ENABLED(CONFIG_IPV6)
 403         struct bridge_mcast_other_query ip6_other_query;
 404         struct bridge_mcast_own_query   ip6_own_query;
 405         struct bridge_mcast_querier     ip6_querier;
 406 #endif /* IS_ENABLED(CONFIG_IPV6) */
 407 #endif
 408 
 409         struct timer_list               hello_timer;
 410         struct timer_list               tcn_timer;
 411         struct timer_list               topology_change_timer;
 412         struct delayed_work             gc_work;
 413         struct kobject                  *ifobj;
 414         u32                             auto_cnt;
 415 
 416 #ifdef CONFIG_NET_SWITCHDEV
 417         int offload_fwd_mark;
 418 #endif
 419         struct hlist_head               fdb_list;
 420 };
 421 
 422 struct br_input_skb_cb {
 423         struct net_device *brdev;
 424 
 425         u16 frag_max_size;
 426 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 427         u8 igmp;
 428         u8 mrouters_only:1;
 429 #endif
 430         u8 proxyarp_replied:1;
 431         u8 src_port_isolated:1;
 432 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
 433         u8 vlan_filtered:1;
 434 #endif
 435 #ifdef CONFIG_NETFILTER_FAMILY_BRIDGE
 436         u8 br_netfilter_broute:1;
 437 #endif
 438 
 439 #ifdef CONFIG_NET_SWITCHDEV
 440         int offload_fwd_mark;
 441 #endif
 442 };
 443 
 444 #define BR_INPUT_SKB_CB(__skb)  ((struct br_input_skb_cb *)(__skb)->cb)
 445 
 446 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 447 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb)   (BR_INPUT_SKB_CB(__skb)->mrouters_only)
 448 #else
 449 # define BR_INPUT_SKB_CB_MROUTERS_ONLY(__skb)   (0)
 450 #endif
 451 
 452 #define br_printk(level, br, format, args...)   \
 453         printk(level "%s: " format, (br)->dev->name, ##args)
 454 
 455 #define br_err(__br, format, args...)                   \
 456         br_printk(KERN_ERR, __br, format, ##args)
 457 #define br_warn(__br, format, args...)                  \
 458         br_printk(KERN_WARNING, __br, format, ##args)
 459 #define br_notice(__br, format, args...)                \
 460         br_printk(KERN_NOTICE, __br, format, ##args)
 461 #define br_info(__br, format, args...)                  \
 462         br_printk(KERN_INFO, __br, format, ##args)
 463 
 464 #define br_debug(br, format, args...)                   \
 465         pr_debug("%s: " format,  (br)->dev->name, ##args)
 466 
 467 /* called under bridge lock */
 468 static inline int br_is_root_bridge(const struct net_bridge *br)
 469 {
 470         return !memcmp(&br->bridge_id, &br->designated_root, 8);
 471 }
 472 
 473 /* check if a VLAN entry is global */
 474 static inline bool br_vlan_is_master(const struct net_bridge_vlan *v)
 475 {
 476         return v->flags & BRIDGE_VLAN_INFO_MASTER;
 477 }
 478 
 479 /* check if a VLAN entry is used by the bridge */
 480 static inline bool br_vlan_is_brentry(const struct net_bridge_vlan *v)
 481 {
 482         return v->flags & BRIDGE_VLAN_INFO_BRENTRY;
 483 }
 484 
 485 /* check if we should use the vlan entry, returns false if it's only context */
 486 static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
 487 {
 488         if (br_vlan_is_master(v)) {
 489                 if (br_vlan_is_brentry(v))
 490                         return true;
 491                 else
 492                         return false;
 493         }
 494 
 495         return true;
 496 }
 497 
 498 static inline int br_opt_get(const struct net_bridge *br,
 499                              enum net_bridge_opts opt)
 500 {
 501         return test_bit(opt, &br->options);
 502 }
 503 
 504 int br_boolopt_toggle(struct net_bridge *br, enum br_boolopt_id opt, bool on,
 505                       struct netlink_ext_ack *extack);
 506 int br_boolopt_get(const struct net_bridge *br, enum br_boolopt_id opt);
 507 int br_boolopt_multi_toggle(struct net_bridge *br,
 508                             struct br_boolopt_multi *bm,
 509                             struct netlink_ext_ack *extack);
 510 void br_boolopt_multi_get(const struct net_bridge *br,
 511                           struct br_boolopt_multi *bm);
 512 void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on);
 513 
 514 /* br_device.c */
 515 void br_dev_setup(struct net_device *dev);
 516 void br_dev_delete(struct net_device *dev, struct list_head *list);
 517 netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev);
 518 #ifdef CONFIG_NET_POLL_CONTROLLER
 519 static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
 520                                        struct sk_buff *skb)
 521 {
 522         struct netpoll *np = p->np;
 523 
 524         if (np)
 525                 netpoll_send_skb(np, skb);
 526 }
 527 
 528 int br_netpoll_enable(struct net_bridge_port *p);
 529 void br_netpoll_disable(struct net_bridge_port *p);
 530 #else
 531 static inline void br_netpoll_send_skb(const struct net_bridge_port *p,
 532                                        struct sk_buff *skb)
 533 {
 534 }
 535 
 536 static inline int br_netpoll_enable(struct net_bridge_port *p)
 537 {
 538         return 0;
 539 }
 540 
 541 static inline void br_netpoll_disable(struct net_bridge_port *p)
 542 {
 543 }
 544 #endif
 545 
 546 /* br_fdb.c */
 547 int br_fdb_init(void);
 548 void br_fdb_fini(void);
 549 int br_fdb_hash_init(struct net_bridge *br);
 550 void br_fdb_hash_fini(struct net_bridge *br);
 551 void br_fdb_flush(struct net_bridge *br);
 552 void br_fdb_find_delete_local(struct net_bridge *br,
 553                               const struct net_bridge_port *p,
 554                               const unsigned char *addr, u16 vid);
 555 void br_fdb_changeaddr(struct net_bridge_port *p, const unsigned char *newaddr);
 556 void br_fdb_change_mac_address(struct net_bridge *br, const u8 *newaddr);
 557 void br_fdb_cleanup(struct work_struct *work);
 558 void br_fdb_delete_by_port(struct net_bridge *br,
 559                            const struct net_bridge_port *p, u16 vid, int do_all);
 560 struct net_bridge_fdb_entry *br_fdb_find_rcu(struct net_bridge *br,
 561                                              const unsigned char *addr,
 562                                              __u16 vid);
 563 int br_fdb_test_addr(struct net_device *dev, unsigned char *addr);
 564 int br_fdb_fillbuf(struct net_bridge *br, void *buf, unsigned long count,
 565                    unsigned long off);
 566 int br_fdb_insert(struct net_bridge *br, struct net_bridge_port *source,
 567                   const unsigned char *addr, u16 vid);
 568 void br_fdb_update(struct net_bridge *br, struct net_bridge_port *source,
 569                    const unsigned char *addr, u16 vid, bool added_by_user);
 570 
 571 int br_fdb_delete(struct ndmsg *ndm, struct nlattr *tb[],
 572                   struct net_device *dev, const unsigned char *addr, u16 vid);
 573 int br_fdb_add(struct ndmsg *nlh, struct nlattr *tb[], struct net_device *dev,
 574                const unsigned char *addr, u16 vid, u16 nlh_flags,
 575                struct netlink_ext_ack *extack);
 576 int br_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
 577                 struct net_device *dev, struct net_device *fdev, int *idx);
 578 int br_fdb_get(struct sk_buff *skb, struct nlattr *tb[], struct net_device *dev,
 579                const unsigned char *addr, u16 vid, u32 portid, u32 seq,
 580                struct netlink_ext_ack *extack);
 581 int br_fdb_sync_static(struct net_bridge *br, struct net_bridge_port *p);
 582 void br_fdb_unsync_static(struct net_bridge *br, struct net_bridge_port *p);
 583 int br_fdb_external_learn_add(struct net_bridge *br, struct net_bridge_port *p,
 584                               const unsigned char *addr, u16 vid,
 585                               bool swdev_notify);
 586 int br_fdb_external_learn_del(struct net_bridge *br, struct net_bridge_port *p,
 587                               const unsigned char *addr, u16 vid,
 588                               bool swdev_notify);
 589 void br_fdb_offloaded_set(struct net_bridge *br, struct net_bridge_port *p,
 590                           const unsigned char *addr, u16 vid, bool offloaded);
 591 
 592 /* br_forward.c */
 593 enum br_pkt_type {
 594         BR_PKT_UNICAST,
 595         BR_PKT_MULTICAST,
 596         BR_PKT_BROADCAST
 597 };
 598 int br_dev_queue_push_xmit(struct net *net, struct sock *sk, struct sk_buff *skb);
 599 void br_forward(const struct net_bridge_port *to, struct sk_buff *skb,
 600                 bool local_rcv, bool local_orig);
 601 int br_forward_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
 602 void br_flood(struct net_bridge *br, struct sk_buff *skb,
 603               enum br_pkt_type pkt_type, bool local_rcv, bool local_orig);
 604 
 605 /* return true if both source port and dest port are isolated */
 606 static inline bool br_skb_isolated(const struct net_bridge_port *to,
 607                                    const struct sk_buff *skb)
 608 {
 609         return BR_INPUT_SKB_CB(skb)->src_port_isolated &&
 610                (to->flags & BR_ISOLATED);
 611 }
 612 
 613 /* br_if.c */
 614 void br_port_carrier_check(struct net_bridge_port *p, bool *notified);
 615 int br_add_bridge(struct net *net, const char *name);
 616 int br_del_bridge(struct net *net, const char *name);
 617 int br_add_if(struct net_bridge *br, struct net_device *dev,
 618               struct netlink_ext_ack *extack);
 619 int br_del_if(struct net_bridge *br, struct net_device *dev);
 620 void br_mtu_auto_adjust(struct net_bridge *br);
 621 netdev_features_t br_features_recompute(struct net_bridge *br,
 622                                         netdev_features_t features);
 623 void br_port_flags_change(struct net_bridge_port *port, unsigned long mask);
 624 void br_manage_promisc(struct net_bridge *br);
 625 int nbp_backup_change(struct net_bridge_port *p, struct net_device *backup_dev);
 626 
 627 /* br_input.c */
 628 int br_handle_frame_finish(struct net *net, struct sock *sk, struct sk_buff *skb);
 629 rx_handler_result_t br_handle_frame(struct sk_buff **pskb);
 630 
 631 static inline bool br_rx_handler_check_rcu(const struct net_device *dev)
 632 {
 633         return rcu_dereference(dev->rx_handler) == br_handle_frame;
 634 }
 635 
 636 static inline bool br_rx_handler_check_rtnl(const struct net_device *dev)
 637 {
 638         return rcu_dereference_rtnl(dev->rx_handler) == br_handle_frame;
 639 }
 640 
 641 static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev)
 642 {
 643         return br_rx_handler_check_rcu(dev) ? br_port_get_rcu(dev) : NULL;
 644 }
 645 
 646 static inline struct net_bridge_port *
 647 br_port_get_check_rtnl(const struct net_device *dev)
 648 {
 649         return br_rx_handler_check_rtnl(dev) ? br_port_get_rtnl_rcu(dev) : NULL;
 650 }
 651 
 652 /* br_ioctl.c */
 653 int br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 654 int br_ioctl_deviceless_stub(struct net *net, unsigned int cmd,
 655                              void __user *arg);
 656 
 657 /* br_multicast.c */
 658 #ifdef CONFIG_BRIDGE_IGMP_SNOOPING
 659 int br_multicast_rcv(struct net_bridge *br, struct net_bridge_port *port,
 660                      struct sk_buff *skb, u16 vid);
 661 struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
 662                                         struct sk_buff *skb, u16 vid);
 663 int br_multicast_add_port(struct net_bridge_port *port);
 664 void br_multicast_del_port(struct net_bridge_port *port);
 665 void br_multicast_enable_port(struct net_bridge_port *port);
 666 void br_multicast_disable_port(struct net_bridge_port *port);
 667 void br_multicast_init(struct net_bridge *br);
 668 void br_multicast_open(struct net_bridge *br);
 669 void br_multicast_stop(struct net_bridge *br);
 670 void br_multicast_dev_del(struct net_bridge *br);
 671 void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
 672                         struct sk_buff *skb, bool local_rcv, bool local_orig);
 673 int br_multicast_set_router(struct net_bridge *br, unsigned long val);
 674 int br_multicast_set_port_router(struct net_bridge_port *p, unsigned long val);
 675 int br_multicast_toggle(struct net_bridge *br, unsigned long val);
 676 int br_multicast_set_querier(struct net_bridge *br, unsigned long val);
 677 int br_multicast_set_hash_max(struct net_bridge *br, unsigned long val);
 678 int br_multicast_set_igmp_version(struct net_bridge *br, unsigned long val);
 679 #if IS_ENABLED(CONFIG_IPV6)
 680 int br_multicast_set_mld_version(struct net_bridge *br, unsigned long val);
 681 #endif
 682 struct net_bridge_mdb_entry *
 683 br_mdb_ip_get(struct net_bridge *br, struct br_ip *dst);
 684 struct net_bridge_mdb_entry *
 685 br_multicast_new_group(struct net_bridge *br, struct br_ip *group);
 686 struct net_bridge_port_group *
 687 br_multicast_new_port_group(struct net_bridge_port *port, struct br_ip *group,
 688                             struct net_bridge_port_group __rcu *next,
 689                             unsigned char flags, const unsigned char *src);
 690 int br_mdb_hash_init(struct net_bridge *br);
 691 void br_mdb_hash_fini(struct net_bridge *br);
 692 void br_mdb_notify(struct net_device *dev, struct net_bridge_port *port,
 693                    struct br_ip *group, int type, u8 flags);
 694 void br_rtr_notify(struct net_device *dev, struct net_bridge_port *port,
 695                    int type);
 696 void br_multicast_count(struct net_bridge *br, const struct net_bridge_port *p,
 697                         const struct sk_buff *skb, u8 type, u8 dir);
 698 int br_multicast_init_stats(struct net_bridge *br);
 699 void br_multicast_uninit_stats(struct net_bridge *br);
 700 void br_multicast_get_stats(const struct net_bridge *br,
 701                             const struct net_bridge_port *p,
 702                             struct br_mcast_stats *dest);
 703 void br_mdb_init(void);
 704 void br_mdb_uninit(void);
 705 void br_multicast_host_join(struct net_bridge_mdb_entry *mp, bool notify);
 706 void br_multicast_host_leave(struct net_bridge_mdb_entry *mp, bool notify);
 707 
 708 #define mlock_dereference(X, br) \
 709         rcu_dereference_protected(X, lockdep_is_held(&br->multicast_lock))
 710 
 711 static inline bool br_multicast_is_router(struct net_bridge *br)
 712 {
 713         return br->multicast_router == 2 ||
 714                (br->multicast_router == 1 &&
 715                 timer_pending(&br->multicast_router_timer));
 716 }
 717 
 718 static inline bool
 719 __br_multicast_querier_exists(struct net_bridge *br,
 720                                 struct bridge_mcast_other_query *querier,
 721                                 const bool is_ipv6)
 722 {
 723         bool own_querier_enabled;
 724 
 725         if (br_opt_get(br, BROPT_MULTICAST_QUERIER)) {
 726                 if (is_ipv6 && !br_opt_get(br, BROPT_HAS_IPV6_ADDR))
 727                         own_querier_enabled = false;
 728                 else
 729                         own_querier_enabled = true;
 730         } else {
 731                 own_querier_enabled = false;
 732         }
 733 
 734         return time_is_before_jiffies(querier->delay_time) &&
 735                (own_querier_enabled || timer_pending(&querier->timer));
 736 }
 737 
 738 static inline bool br_multicast_querier_exists(struct net_bridge *br,
 739                                                struct ethhdr *eth)
 740 {
 741         switch (eth->h_proto) {
 742         case (htons(ETH_P_IP)):
 743                 return __br_multicast_querier_exists(br,
 744                         &br->ip4_other_query, false);
 745 #if IS_ENABLED(CONFIG_IPV6)
 746         case (htons(ETH_P_IPV6)):
 747                 return __br_multicast_querier_exists(br,
 748                         &br->ip6_other_query, true);
 749 #endif
 750         default:
 751                 return false;
 752         }
 753 }
 754 
 755 static inline int br_multicast_igmp_type(const struct sk_buff *skb)
 756 {
 757         return BR_INPUT_SKB_CB(skb)->igmp;
 758 }
 759 #else
 760 static inline int br_multicast_rcv(struct net_bridge *br,
 761                                    struct net_bridge_port *port,
 762                                    struct sk_buff *skb,
 763                                    u16 vid)
 764 {
 765         return 0;
 766 }
 767 
 768 static inline struct net_bridge_mdb_entry *br_mdb_get(struct net_bridge *br,
 769                                                       struct sk_buff *skb, u16 vid)
 770 {
 771         return NULL;
 772 }
 773 
 774 static inline int br_multicast_add_port(struct net_bridge_port *port)
 775 {
 776         return 0;
 777 }
 778 
 779 static inline void br_multicast_del_port(struct net_bridge_port *port)
 780 {
 781 }
 782 
 783 static inline void br_multicast_enable_port(struct net_bridge_port *port)
 784 {
 785 }
 786 
 787 static inline void br_multicast_disable_port(struct net_bridge_port *port)
 788 {
 789 }
 790 
 791 static inline void br_multicast_init(struct net_bridge *br)
 792 {
 793 }
 794 
 795 static inline void br_multicast_open(struct net_bridge *br)
 796 {
 797 }
 798 
 799 static inline void br_multicast_stop(struct net_bridge *br)
 800 {
 801 }
 802 
 803 static inline void br_multicast_dev_del(struct net_bridge *br)
 804 {
 805 }
 806 
 807 static inline void br_multicast_flood(struct net_bridge_mdb_entry *mdst,
 808                                       struct sk_buff *skb,
 809                                       bool local_rcv, bool local_orig)
 810 {
 811 }
 812 
 813 static inline bool br_multicast_is_router(struct net_bridge *br)
 814 {
 815         return false;
 816 }
 817 
 818 static inline bool br_multicast_querier_exists(struct net_bridge *br,
 819                                                struct ethhdr *eth)
 820 {
 821         return false;
 822 }
 823 
 824 static inline void br_mdb_init(void)
 825 {
 826 }
 827 
 828 static inline void br_mdb_uninit(void)
 829 {
 830 }
 831 
 832 static inline int br_mdb_hash_init(struct net_bridge *br)
 833 {
 834         return 0;
 835 }
 836 
 837 static inline void br_mdb_hash_fini(struct net_bridge *br)
 838 {
 839 }
 840 
 841 static inline void br_multicast_count(struct net_bridge *br,
 842                                       const struct net_bridge_port *p,
 843                                       const struct sk_buff *skb,
 844                                       u8 type, u8 dir)
 845 {
 846 }
 847 
 848 static inline int br_multicast_init_stats(struct net_bridge *br)
 849 {
 850         return 0;
 851 }
 852 
 853 static inline void br_multicast_uninit_stats(struct net_bridge *br)
 854 {
 855 }
 856 
 857 static inline int br_multicast_igmp_type(const struct sk_buff *skb)
 858 {
 859         return 0;
 860 }
 861 #endif
 862 
 863 /* br_vlan.c */
 864 #ifdef CONFIG_BRIDGE_VLAN_FILTERING
 865 bool br_allowed_ingress(const struct net_bridge *br,
 866                         struct net_bridge_vlan_group *vg, struct sk_buff *skb,
 867                         u16 *vid);
 868 bool br_allowed_egress(struct net_bridge_vlan_group *vg,
 869                        const struct sk_buff *skb);
 870 bool br_should_learn(struct net_bridge_port *p, struct sk_buff *skb, u16 *vid);
 871 struct sk_buff *br_handle_vlan(struct net_bridge *br,
 872                                const struct net_bridge_port *port,
 873                                struct net_bridge_vlan_group *vg,
 874                                struct sk_buff *skb);
 875 int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
 876                 bool *changed, struct netlink_ext_ack *extack);
 877 int br_vlan_delete(struct net_bridge *br, u16 vid);
 878 void br_vlan_flush(struct net_bridge *br);
 879 struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg, u16 vid);
 880 void br_recalculate_fwd_mask(struct net_bridge *br);
 881 int __br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
 882 int br_vlan_filter_toggle(struct net_bridge *br, unsigned long val);
 883 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto);
 884 int br_vlan_set_proto(struct net_bridge *br, unsigned long val);
 885 int br_vlan_set_stats(struct net_bridge *br, unsigned long val);
 886 int br_vlan_set_stats_per_port(struct net_bridge *br, unsigned long val);
 887 int br_vlan_init(struct net_bridge *br);
 888 int br_vlan_set_default_pvid(struct net_bridge *br, unsigned long val);
 889 int __br_vlan_set_default_pvid(struct net_bridge *br, u16 pvid,
 890                                struct netlink_ext_ack *extack);
 891 int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
 892                  bool *changed, struct netlink_ext_ack *extack);
 893 int nbp_vlan_delete(struct net_bridge_port *port, u16 vid);
 894 void nbp_vlan_flush(struct net_bridge_port *port);
 895 int nbp_vlan_init(struct net_bridge_port *port, struct netlink_ext_ack *extack);
 896 int nbp_get_num_vlan_infos(struct net_bridge_port *p, u32 filter_mask);
 897 void br_vlan_get_stats(const struct net_bridge_vlan *v,
 898                        struct br_vlan_stats *stats);
 899 void br_vlan_port_event(struct net_bridge_port *p, unsigned long event);
 900 int br_vlan_bridge_event(struct net_device *dev, unsigned long event,
 901                          void *ptr);
 902 
 903 static inline struct net_bridge_vlan_group *br_vlan_group(
 904                                         const struct net_bridge *br)
 905 {
 906         return rtnl_dereference(br->vlgrp);
 907 }
 908 
 909 static inline struct net_bridge_vlan_group *nbp_vlan_group(
 910                                         const struct net_bridge_port *p)
 911 {
 912         return rtnl_dereference(p->vlgrp);
 913 }
 914 
 915 static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
 916                                         const struct net_bridge *br)
 917 {
 918         return rcu_dereference(br->vlgrp);
 919 }
 920 
 921 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
 922                                         const struct net_bridge_port *p)
 923 {
 924         return rcu_dereference(p->vlgrp);
 925 }
 926 
 927 /* Since bridge now depends on 8021Q module, but the time bridge sees the
 928  * skb, the vlan tag will always be present if the frame was tagged.
 929  */
 930 static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)
 931 {
 932         int err = 0;
 933 
 934         if (skb_vlan_tag_present(skb)) {
 935                 *vid = skb_vlan_tag_get_id(skb);
 936         } else {
 937                 *vid = 0;
 938                 err = -EINVAL;
 939         }
 940 
 941         return err;
 942 }
 943 
 944 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
 945 {
 946         if (!vg)
 947                 return 0;
 948 
 949         smp_rmb();
 950         return vg->pvid;
 951 }
 952 
 953 #else
 954 static inline bool br_allowed_ingress(const struct net_bridge *br,
 955                                       struct net_bridge_vlan_group *vg,
 956                                       struct sk_buff *skb,
 957                                       u16 *vid)
 958 {
 959         return true;
 960 }
 961 
 962 static inline bool br_allowed_egress(struct net_bridge_vlan_group *vg,
 963                                      const struct sk_buff *skb)
 964 {
 965         return true;
 966 }
 967 
 968 static inline bool br_should_learn(struct net_bridge_port *p,
 969                                    struct sk_buff *skb, u16 *vid)
 970 {
 971         return true;
 972 }
 973 
 974 static inline struct sk_buff *br_handle_vlan(struct net_bridge *br,
 975                                              const struct net_bridge_port *port,
 976                                              struct net_bridge_vlan_group *vg,
 977                                              struct sk_buff *skb)
 978 {
 979         return skb;
 980 }
 981 
 982 static inline int br_vlan_add(struct net_bridge *br, u16 vid, u16 flags,
 983                               bool *changed, struct netlink_ext_ack *extack)
 984 {
 985         *changed = false;
 986         return -EOPNOTSUPP;
 987 }
 988 
 989 static inline int br_vlan_delete(struct net_bridge *br, u16 vid)
 990 {
 991         return -EOPNOTSUPP;
 992 }
 993 
 994 static inline void br_vlan_flush(struct net_bridge *br)
 995 {
 996 }
 997 
 998 static inline void br_recalculate_fwd_mask(struct net_bridge *br)
 999 {
1000 }
1001 
1002 static inline int br_vlan_init(struct net_bridge *br)
1003 {
1004         return 0;
1005 }
1006 
1007 static inline int nbp_vlan_add(struct net_bridge_port *port, u16 vid, u16 flags,
1008                                bool *changed, struct netlink_ext_ack *extack)
1009 {
1010         *changed = false;
1011         return -EOPNOTSUPP;
1012 }
1013 
1014 static inline int nbp_vlan_delete(struct net_bridge_port *port, u16 vid)
1015 {
1016         return -EOPNOTSUPP;
1017 }
1018 
1019 static inline void nbp_vlan_flush(struct net_bridge_port *port)
1020 {
1021 }
1022 
1023 static inline struct net_bridge_vlan *br_vlan_find(struct net_bridge_vlan_group *vg,
1024                                                    u16 vid)
1025 {
1026         return NULL;
1027 }
1028 
1029 static inline int nbp_vlan_init(struct net_bridge_port *port,
1030                                 struct netlink_ext_ack *extack)
1031 {
1032         return 0;
1033 }
1034 
1035 static inline u16 br_vlan_get_tag(const struct sk_buff *skb, u16 *tag)
1036 {
1037         return 0;
1038 }
1039 
1040 static inline u16 br_get_pvid(const struct net_bridge_vlan_group *vg)
1041 {
1042         return 0;
1043 }
1044 
1045 static inline int __br_vlan_filter_toggle(struct net_bridge *br,
1046                                           unsigned long val)
1047 {
1048         return -EOPNOTSUPP;
1049 }
1050 
1051 static inline int nbp_get_num_vlan_infos(struct net_bridge_port *p,
1052                                          u32 filter_mask)
1053 {
1054         return 0;
1055 }
1056 
1057 static inline struct net_bridge_vlan_group *br_vlan_group(
1058                                         const struct net_bridge *br)
1059 {
1060         return NULL;
1061 }
1062 
1063 static inline struct net_bridge_vlan_group *nbp_vlan_group(
1064                                         const struct net_bridge_port *p)
1065 {
1066         return NULL;
1067 }
1068 
1069 static inline struct net_bridge_vlan_group *br_vlan_group_rcu(
1070                                         const struct net_bridge *br)
1071 {
1072         return NULL;
1073 }
1074 
1075 static inline struct net_bridge_vlan_group *nbp_vlan_group_rcu(
1076                                         const struct net_bridge_port *p)
1077 {
1078         return NULL;
1079 }
1080 
1081 static inline void br_vlan_get_stats(const struct net_bridge_vlan *v,
1082                                      struct br_vlan_stats *stats)
1083 {
1084 }
1085 
1086 static inline void br_vlan_port_event(struct net_bridge_port *p,
1087                                       unsigned long event)
1088 {
1089 }
1090 
1091 static inline int br_vlan_bridge_event(struct net_device *dev,
1092                                        unsigned long event, void *ptr)
1093 {
1094         return 0;
1095 }
1096 #endif
1097 
1098 struct nf_br_ops {
1099         int (*br_dev_xmit_hook)(struct sk_buff *skb);
1100 };
1101 extern const struct nf_br_ops __rcu *nf_br_ops;
1102 
1103 /* br_netfilter.c */
1104 #if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
1105 int br_nf_core_init(void);
1106 void br_nf_core_fini(void);
1107 void br_netfilter_rtable_init(struct net_bridge *);
1108 #else
1109 static inline int br_nf_core_init(void) { return 0; }
1110 static inline void br_nf_core_fini(void) {}
1111 #define br_netfilter_rtable_init(x)
1112 #endif
1113 
1114 /* br_stp.c */
1115 void br_set_state(struct net_bridge_port *p, unsigned int state);
1116 struct net_bridge_port *br_get_port(struct net_bridge *br, u16 port_no);
1117 void br_init_port(struct net_bridge_port *p);
1118 void br_become_designated_port(struct net_bridge_port *p);
1119 
1120 void __br_set_forward_delay(struct net_bridge *br, unsigned long t);
1121 int br_set_forward_delay(struct net_bridge *br, unsigned long x);
1122 int br_set_hello_time(struct net_bridge *br, unsigned long x);
1123 int br_set_max_age(struct net_bridge *br, unsigned long x);
1124 int __set_ageing_time(struct net_device *dev, unsigned long t);
1125 int br_set_ageing_time(struct net_bridge *br, clock_t ageing_time);
1126 
1127 
1128 /* br_stp_if.c */
1129 void br_stp_enable_bridge(struct net_bridge *br);
1130 void br_stp_disable_bridge(struct net_bridge *br);
1131 void br_stp_set_enabled(struct net_bridge *br, unsigned long val);
1132 void br_stp_enable_port(struct net_bridge_port *p);
1133 void br_stp_disable_port(struct net_bridge_port *p);
1134 bool br_stp_recalculate_bridge_id(struct net_bridge *br);
1135 void br_stp_change_bridge_id(struct net_bridge *br, const unsigned char *a);
1136 void br_stp_set_bridge_priority(struct net_bridge *br, u16 newprio);
1137 int br_stp_set_port_priority(struct net_bridge_port *p, unsigned long newprio);
1138 int br_stp_set_path_cost(struct net_bridge_port *p, unsigned long path_cost);
1139 ssize_t br_show_bridge_id(char *buf, const struct bridge_id *id);
1140 
1141 /* br_stp_bpdu.c */
1142 struct stp_proto;
1143 void br_stp_rcv(const struct stp_proto *proto, struct sk_buff *skb,
1144                 struct net_device *dev);
1145 
1146 /* br_stp_timer.c */
1147 void br_stp_timer_init(struct net_bridge *br);
1148 void br_stp_port_timer_init(struct net_bridge_port *p);
1149 unsigned long br_timer_value(const struct timer_list *timer);
1150 
1151 /* br.c */
1152 #if IS_ENABLED(CONFIG_ATM_LANE)
1153 extern int (*br_fdb_test_addr_hook)(struct net_device *dev, unsigned char *addr);
1154 #endif
1155 
1156 /* br_netlink.c */
1157 extern struct rtnl_link_ops br_link_ops;
1158 int br_netlink_init(void);
1159 void br_netlink_fini(void);
1160 void br_ifinfo_notify(int event, const struct net_bridge *br,
1161                       const struct net_bridge_port *port);
1162 int br_setlink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags,
1163                struct netlink_ext_ack *extack);
1164 int br_dellink(struct net_device *dev, struct nlmsghdr *nlmsg, u16 flags);
1165 int br_getlink(struct sk_buff *skb, u32 pid, u32 seq, struct net_device *dev,
1166                u32 filter_mask, int nlflags);
1167 
1168 #ifdef CONFIG_SYSFS
1169 /* br_sysfs_if.c */
1170 extern const struct sysfs_ops brport_sysfs_ops;
1171 int br_sysfs_addif(struct net_bridge_port *p);
1172 int br_sysfs_renameif(struct net_bridge_port *p);
1173 
1174 /* br_sysfs_br.c */
1175 int br_sysfs_addbr(struct net_device *dev);
1176 void br_sysfs_delbr(struct net_device *dev);
1177 
1178 #else
1179 
1180 static inline int br_sysfs_addif(struct net_bridge_port *p) { return 0; }
1181 static inline int br_sysfs_renameif(struct net_bridge_port *p) { return 0; }
1182 static inline int br_sysfs_addbr(struct net_device *dev) { return 0; }
1183 static inline void br_sysfs_delbr(struct net_device *dev) { return; }
1184 #endif /* CONFIG_SYSFS */
1185 
1186 /* br_switchdev.c */
1187 #ifdef CONFIG_NET_SWITCHDEV
1188 int nbp_switchdev_mark_set(struct net_bridge_port *p);
1189 void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
1190                               struct sk_buff *skb);
1191 bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
1192                                   const struct sk_buff *skb);
1193 int br_switchdev_set_port_flag(struct net_bridge_port *p,
1194                                unsigned long flags,
1195                                unsigned long mask);
1196 void br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb,
1197                              int type);
1198 int br_switchdev_port_vlan_add(struct net_device *dev, u16 vid, u16 flags,
1199                                struct netlink_ext_ack *extack);
1200 int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid);
1201 
1202 static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
1203 {
1204         skb->offload_fwd_mark = 0;
1205 }
1206 #else
1207 static inline int nbp_switchdev_mark_set(struct net_bridge_port *p)
1208 {
1209         return 0;
1210 }
1211 
1212 static inline void nbp_switchdev_frame_mark(const struct net_bridge_port *p,
1213                                             struct sk_buff *skb)
1214 {
1215 }
1216 
1217 static inline bool nbp_switchdev_allowed_egress(const struct net_bridge_port *p,
1218                                                 const struct sk_buff *skb)
1219 {
1220         return true;
1221 }
1222 
1223 static inline int br_switchdev_set_port_flag(struct net_bridge_port *p,
1224                                              unsigned long flags,
1225                                              unsigned long mask)
1226 {
1227         return 0;
1228 }
1229 
1230 static inline int br_switchdev_port_vlan_add(struct net_device *dev,
1231                                              u16 vid, u16 flags,
1232                                              struct netlink_ext_ack *extack)
1233 {
1234         return -EOPNOTSUPP;
1235 }
1236 
1237 static inline int br_switchdev_port_vlan_del(struct net_device *dev, u16 vid)
1238 {
1239         return -EOPNOTSUPP;
1240 }
1241 
1242 static inline void
1243 br_switchdev_fdb_notify(const struct net_bridge_fdb_entry *fdb, int type)
1244 {
1245 }
1246 
1247 static inline void br_switchdev_frame_unmark(struct sk_buff *skb)
1248 {
1249 }
1250 #endif /* CONFIG_NET_SWITCHDEV */
1251 
1252 /* br_arp_nd_proxy.c */
1253 void br_recalculate_neigh_suppress_enabled(struct net_bridge *br);
1254 void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
1255                               u16 vid, struct net_bridge_port *p);
1256 void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
1257                        u16 vid, struct net_bridge_port *p, struct nd_msg *msg);
1258 struct nd_msg *br_is_nd_neigh_msg(struct sk_buff *skb, struct nd_msg *m);
1259 #endif

/* [<][>][^][v][top][bottom][index][help] */