linux/include/linux/if_bridge.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#ifndef _LINUX_IF_BRIDGE_H
   9#define _LINUX_IF_BRIDGE_H
  10
  11
  12#include <linux/netdevice.h>
  13#include <uapi/linux/if_bridge.h>
  14#include <linux/bitops.h>
  15
  16struct br_ip {
  17        union {
  18                __be32  ip4;
  19#if IS_ENABLED(CONFIG_IPV6)
  20                struct in6_addr ip6;
  21#endif
  22        } u;
  23        __be16          proto;
  24        __u16           vid;
  25};
  26
  27struct br_ip_list {
  28        struct list_head list;
  29        struct br_ip addr;
  30};
  31
  32#define BR_HAIRPIN_MODE         BIT(0)
  33#define BR_BPDU_GUARD           BIT(1)
  34#define BR_ROOT_BLOCK           BIT(2)
  35#define BR_MULTICAST_FAST_LEAVE BIT(3)
  36#define BR_ADMIN_COST           BIT(4)
  37#define BR_LEARNING             BIT(5)
  38#define BR_FLOOD                BIT(6)
  39#define BR_AUTO_MASK            (BR_FLOOD | BR_LEARNING)
  40#define BR_PROMISC              BIT(7)
  41#define BR_PROXYARP             BIT(8)
  42#define BR_LEARNING_SYNC        BIT(9)
  43#define BR_PROXYARP_WIFI        BIT(10)
  44#define BR_MCAST_FLOOD          BIT(11)
  45#define BR_MULTICAST_TO_UNICAST BIT(12)
  46#define BR_VLAN_TUNNEL          BIT(13)
  47#define BR_BCAST_FLOOD          BIT(14)
  48#define BR_NEIGH_SUPPRESS       BIT(15)
  49#define BR_ISOLATED             BIT(16)
  50
  51#define BR_DEFAULT_AGEING_TIME  (300 * HZ)
  52
  53extern void brioctl_set(int (*ioctl_hook)(struct net *, unsigned int, void __user *));
  54
  55#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_IGMP_SNOOPING)
  56int br_multicast_list_adjacent(struct net_device *dev,
  57                               struct list_head *br_ip_list);
  58bool br_multicast_has_querier_anywhere(struct net_device *dev, int proto);
  59bool br_multicast_has_querier_adjacent(struct net_device *dev, int proto);
  60bool br_multicast_enabled(const struct net_device *dev);
  61bool br_multicast_router(const struct net_device *dev);
  62#else
  63static inline int br_multicast_list_adjacent(struct net_device *dev,
  64                                             struct list_head *br_ip_list)
  65{
  66        return 0;
  67}
  68static inline bool br_multicast_has_querier_anywhere(struct net_device *dev,
  69                                                     int proto)
  70{
  71        return false;
  72}
  73static inline bool br_multicast_has_querier_adjacent(struct net_device *dev,
  74                                                     int proto)
  75{
  76        return false;
  77}
  78static inline bool br_multicast_enabled(const struct net_device *dev)
  79{
  80        return false;
  81}
  82static inline bool br_multicast_router(const struct net_device *dev)
  83{
  84        return false;
  85}
  86#endif
  87
  88#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
  89bool br_vlan_enabled(const struct net_device *dev);
  90int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid);
  91int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid);
  92int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto);
  93int br_vlan_get_info(const struct net_device *dev, u16 vid,
  94                     struct bridge_vlan_info *p_vinfo);
  95#else
  96static inline bool br_vlan_enabled(const struct net_device *dev)
  97{
  98        return false;
  99}
 100
 101static inline int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
 102{
 103        return -EINVAL;
 104}
 105
 106static inline int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
 107{
 108        return -EINVAL;
 109}
 110
 111static inline int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
 112{
 113        return -EINVAL;
 114}
 115
 116static inline int br_vlan_get_info(const struct net_device *dev, u16 vid,
 117                                   struct bridge_vlan_info *p_vinfo)
 118{
 119        return -EINVAL;
 120}
 121#endif
 122
 123#if IS_ENABLED(CONFIG_BRIDGE)
 124struct net_device *br_fdb_find_port(const struct net_device *br_dev,
 125                                    const unsigned char *addr,
 126                                    __u16 vid);
 127void br_fdb_clear_offload(const struct net_device *dev, u16 vid);
 128bool br_port_flag_is_set(const struct net_device *dev, unsigned long flag);
 129#else
 130static inline struct net_device *
 131br_fdb_find_port(const struct net_device *br_dev,
 132                 const unsigned char *addr,
 133                 __u16 vid)
 134{
 135        return NULL;
 136}
 137
 138static inline void br_fdb_clear_offload(const struct net_device *dev, u16 vid)
 139{
 140}
 141
 142static inline bool
 143br_port_flag_is_set(const struct net_device *dev, unsigned long flag)
 144{
 145        return false;
 146}
 147#endif
 148
 149#endif
 150