Skip to content

Commit 160656d

Browse files
idoschdavem330
authored andcommitted
bridge: Allow setting per-{Port, VLAN} neighbor suppression state
Add a new bridge port attribute that allows user space to enable per-{Port, VLAN} neighbor suppression. Example: # bridge -d -j -p link show dev swp1 | jq '.[]["neigh_vlan_suppress"]' false # bridge link set dev swp1 neigh_vlan_suppress on # bridge -d -j -p link show dev swp1 | jq '.[]["neigh_vlan_suppress"]' true # bridge link set dev swp1 neigh_vlan_suppress off # bridge -d -j -p link show dev swp1 | jq '.[]["neigh_vlan_suppress"]' false Signed-off-by: Ido Schimmel <idosch@nvidia.com> Acked-by: Nikolay Aleksandrov <razor@blackwall.org> Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent 83f6d60 commit 160656d

3 files changed

Lines changed: 9 additions & 2 deletions

File tree

include/uapi/linux/if_link.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,7 @@ enum {
569569
IFLA_BRPORT_MAB,
570570
IFLA_BRPORT_MCAST_N_GROUPS,
571571
IFLA_BRPORT_MCAST_MAX_GROUPS,
572+
IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
572573
__IFLA_BRPORT_MAX
573574
};
574575
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)

net/bridge/br_netlink.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ static inline size_t br_port_info_size(void)
189189
+ nla_total_size(1) /* IFLA_BRPORT_ISOLATED */
190190
+ nla_total_size(1) /* IFLA_BRPORT_LOCKED */
191191
+ nla_total_size(1) /* IFLA_BRPORT_MAB */
192+
+ nla_total_size(1) /* IFLA_BRPORT_NEIGH_VLAN_SUPPRESS */
192193
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */
193194
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_BRIDGE_ID */
194195
+ nla_total_size(sizeof(u16)) /* IFLA_BRPORT_DESIGNATED_PORT */
@@ -278,7 +279,9 @@ static int br_port_fill_attrs(struct sk_buff *skb,
278279
!!(p->flags & BR_MRP_LOST_IN_CONT)) ||
279280
nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)) ||
280281
nla_put_u8(skb, IFLA_BRPORT_LOCKED, !!(p->flags & BR_PORT_LOCKED)) ||
281-
nla_put_u8(skb, IFLA_BRPORT_MAB, !!(p->flags & BR_PORT_MAB)))
282+
nla_put_u8(skb, IFLA_BRPORT_MAB, !!(p->flags & BR_PORT_MAB)) ||
283+
nla_put_u8(skb, IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
284+
!!(p->flags & BR_NEIGH_VLAN_SUPPRESS)))
282285
return -EMSGSIZE;
283286

284287
timerval = br_timer_value(&p->message_age_timer);
@@ -891,6 +894,7 @@ static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
891894
[IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT] = { .type = NLA_U32 },
892895
[IFLA_BRPORT_MCAST_N_GROUPS] = { .type = NLA_REJECT },
893896
[IFLA_BRPORT_MCAST_MAX_GROUPS] = { .type = NLA_U32 },
897+
[IFLA_BRPORT_NEIGH_VLAN_SUPPRESS] = NLA_POLICY_MAX(NLA_U8, 1),
894898
};
895899

896900
/* Change the state of the port and notify spanning tree */
@@ -957,6 +961,8 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[],
957961
br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED);
958962
br_set_port_flag(p, tb, IFLA_BRPORT_LOCKED, BR_PORT_LOCKED);
959963
br_set_port_flag(p, tb, IFLA_BRPORT_MAB, BR_PORT_MAB);
964+
br_set_port_flag(p, tb, IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
965+
BR_NEIGH_VLAN_SUPPRESS);
960966

961967
if ((p->flags & BR_PORT_MAB) &&
962968
(!(p->flags & BR_PORT_LOCKED) || !(p->flags & BR_LEARNING))) {

net/core/rtnetlink.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
#include "dev.h"
6262

6363
#define RTNL_MAX_TYPE 50
64-
#define RTNL_SLAVE_MAX_TYPE 42
64+
#define RTNL_SLAVE_MAX_TYPE 43
6565

6666
struct rtnl_link {
6767
rtnl_doit_func doit;

0 commit comments

Comments
 (0)