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