bridge: add br_vlan_get_proto()
authorwenxu <wenxu@ucloud.cn>
Fri, 5 Jul 2019 13:16:36 +0000 (21:16 +0800)
committerPablo Neira Ayuso <pablo@netfilter.org>
Fri, 5 Jul 2019 19:34:50 +0000 (21:34 +0200)
This new function allows you to fetch the bridge port vlan protocol.

Signed-off-by: wenxu <wenxu@ucloud.cn>
Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/linux/if_bridge.h
net/bridge/br_vlan.c

index 950db1dad83092f7263c7a9d4cb7c6e424882512..9e57c4411734915a83c8c5fdc52ae334e22e8452 100644 (file)
@@ -89,6 +89,7 @@ static inline bool br_multicast_router(const struct net_device *dev)
 bool br_vlan_enabled(const struct net_device *dev);
 int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid);
 int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid);
+int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto);
 int br_vlan_get_info(const struct net_device *dev, u16 vid,
                     struct bridge_vlan_info *p_vinfo);
 #else
@@ -102,6 +103,11 @@ static inline int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
        return -EINVAL;
 }
 
+static inline int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
+{
+       return -EINVAL;
+}
+
 static inline int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
 {
        return -EINVAL;
index 8d97b91ad503e045e1eae670fc1ebd6d04eecdca..021cc9f66804d6db567d7a139d6e68ab10798665 100644 (file)
@@ -797,6 +797,16 @@ bool br_vlan_enabled(const struct net_device *dev)
 }
 EXPORT_SYMBOL_GPL(br_vlan_enabled);
 
+int br_vlan_get_proto(const struct net_device *dev, u16 *p_proto)
+{
+       struct net_bridge *br = netdev_priv(dev);
+
+       *p_proto = ntohs(br->vlan_proto);
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(br_vlan_get_proto);
+
 int __br_vlan_set_proto(struct net_bridge *br, __be16 proto)
 {
        int err = 0;