Skip to content

Commit 7582f5b

Browse files
committed
bridge: add br_vlan_get_pvid_rcu()
This new function allows you to fetch bridge pvid from packet path. Signed-off-by: Pablo Neira Ayuso <[email protected]> Acked-by: Nikolay Aleksandrov <[email protected]>
1 parent 9d6a1ec commit 7582f5b

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

include/linux/if_bridge.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ static inline bool br_multicast_router(const struct net_device *dev)
8888
#if IS_ENABLED(CONFIG_BRIDGE) && IS_ENABLED(CONFIG_BRIDGE_VLAN_FILTERING)
8989
bool br_vlan_enabled(const struct net_device *dev);
9090
int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid);
91+
int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid);
9192
int br_vlan_get_info(const struct net_device *dev, u16 vid,
9293
struct bridge_vlan_info *p_vinfo);
9394
#else
@@ -101,6 +102,11 @@ static inline int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
101102
return -EINVAL;
102103
}
103104

105+
static inline int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
106+
{
107+
return -EINVAL;
108+
}
109+
104110
static inline int br_vlan_get_info(const struct net_device *dev, u16 vid,
105111
struct bridge_vlan_info *p_vinfo)
106112
{

net/bridge/br_vlan.c

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,13 +1227,11 @@ void br_vlan_get_stats(const struct net_bridge_vlan *v,
12271227
}
12281228
}
12291229

1230-
int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
1230+
static int __br_vlan_get_pvid(const struct net_device *dev,
1231+
struct net_bridge_port *p, u16 *p_pvid)
12311232
{
12321233
struct net_bridge_vlan_group *vg;
1233-
struct net_bridge_port *p;
12341234

1235-
ASSERT_RTNL();
1236-
p = br_port_get_check_rtnl(dev);
12371235
if (p)
12381236
vg = nbp_vlan_group(p);
12391237
else if (netif_is_bridge_master(dev))
@@ -1244,8 +1242,21 @@ int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
12441242
*p_pvid = br_get_pvid(vg);
12451243
return 0;
12461244
}
1245+
1246+
int br_vlan_get_pvid(const struct net_device *dev, u16 *p_pvid)
1247+
{
1248+
ASSERT_RTNL();
1249+
1250+
return __br_vlan_get_pvid(dev, br_port_get_check_rtnl(dev), p_pvid);
1251+
}
12471252
EXPORT_SYMBOL_GPL(br_vlan_get_pvid);
12481253

1254+
int br_vlan_get_pvid_rcu(const struct net_device *dev, u16 *p_pvid)
1255+
{
1256+
return __br_vlan_get_pvid(dev, br_port_get_check_rcu(dev), p_pvid);
1257+
}
1258+
EXPORT_SYMBOL_GPL(br_vlan_get_pvid_rcu);
1259+
12491260
int br_vlan_get_info(const struct net_device *dev, u16 vid,
12501261
struct bridge_vlan_info *p_vinfo)
12511262
{

0 commit comments

Comments
 (0)