bridge: Allow querying bridge port flags
authorIdo Schimmel <idosch@mellanox.com>
Wed, 21 Nov 2018 08:02:41 +0000 (08:02 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 22 Nov 2018 01:10:31 +0000 (17:10 -0800)
Allow querying bridge port flags so that drivers capable of performing
VxLAN learning will update the bridge driver only if learning is enabled
on its bridge port corresponding to the VxLAN device.

Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Reviewed-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/if_bridge.h
net/bridge/br_if.c

index c20c7e197d0731e58b0f68b87531299080e8421a..ef7c3d376b21dc596a12f302e76e92fb665dcfef 100644 (file)
@@ -119,6 +119,7 @@ static inline int br_vlan_get_info(const struct net_device *dev, u16 vid,
 struct net_device *br_fdb_find_port(const struct net_device *br_dev,
                                    const unsigned char *addr,
                                    __u16 vid);
+bool br_port_flag_is_set(const struct net_device *dev, unsigned long flag);
 #else
 static inline struct net_device *
 br_fdb_find_port(const struct net_device *br_dev,
@@ -127,6 +128,11 @@ br_fdb_find_port(const struct net_device *br_dev,
 {
        return NULL;
 }
+static inline bool
+br_port_flag_is_set(const struct net_device *dev, unsigned long flag)
+{
+       return false;
+}
 #endif
 
 #endif
index 9b46d2dc4c224e39e865adf3956c5528da9b68f9..d4863f5679acc897e382a88f98560ecd00e2bbbc 100644 (file)
@@ -741,3 +741,15 @@ void br_port_flags_change(struct net_bridge_port *p, unsigned long mask)
        if (mask & BR_NEIGH_SUPPRESS)
                br_recalculate_neigh_suppress_enabled(br);
 }
+
+bool br_port_flag_is_set(const struct net_device *dev, unsigned long flag)
+{
+       struct net_bridge_port *p;
+
+       p = br_port_get_rtnl_rcu(dev);
+       if (!p)
+               return false;
+
+       return p->flags & flag;
+}
+EXPORT_SYMBOL_GPL(br_port_flag_is_set);