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