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>
This commit is contained in:
parent
83f6d60079
commit
160656d720
|
@ -569,6 +569,7 @@ enum {
|
|||
IFLA_BRPORT_MAB,
|
||||
IFLA_BRPORT_MCAST_N_GROUPS,
|
||||
IFLA_BRPORT_MCAST_MAX_GROUPS,
|
||||
IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
|
||||
__IFLA_BRPORT_MAX
|
||||
};
|
||||
#define IFLA_BRPORT_MAX (__IFLA_BRPORT_MAX - 1)
|
||||
|
|
|
@ -189,6 +189,7 @@ static inline size_t br_port_info_size(void)
|
|||
+ nla_total_size(1) /* IFLA_BRPORT_ISOLATED */
|
||||
+ nla_total_size(1) /* IFLA_BRPORT_LOCKED */
|
||||
+ nla_total_size(1) /* IFLA_BRPORT_MAB */
|
||||
+ nla_total_size(1) /* IFLA_BRPORT_NEIGH_VLAN_SUPPRESS */
|
||||
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_ROOT_ID */
|
||||
+ nla_total_size(sizeof(struct ifla_bridge_id)) /* IFLA_BRPORT_BRIDGE_ID */
|
||||
+ nla_total_size(sizeof(u16)) /* IFLA_BRPORT_DESIGNATED_PORT */
|
||||
|
@ -278,7 +279,9 @@ static int br_port_fill_attrs(struct sk_buff *skb,
|
|||
!!(p->flags & BR_MRP_LOST_IN_CONT)) ||
|
||||
nla_put_u8(skb, IFLA_BRPORT_ISOLATED, !!(p->flags & BR_ISOLATED)) ||
|
||||
nla_put_u8(skb, IFLA_BRPORT_LOCKED, !!(p->flags & BR_PORT_LOCKED)) ||
|
||||
nla_put_u8(skb, IFLA_BRPORT_MAB, !!(p->flags & BR_PORT_MAB)))
|
||||
nla_put_u8(skb, IFLA_BRPORT_MAB, !!(p->flags & BR_PORT_MAB)) ||
|
||||
nla_put_u8(skb, IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
|
||||
!!(p->flags & BR_NEIGH_VLAN_SUPPRESS)))
|
||||
return -EMSGSIZE;
|
||||
|
||||
timerval = br_timer_value(&p->message_age_timer);
|
||||
|
@ -891,6 +894,7 @@ static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
|
|||
[IFLA_BRPORT_MCAST_EHT_HOSTS_LIMIT] = { .type = NLA_U32 },
|
||||
[IFLA_BRPORT_MCAST_N_GROUPS] = { .type = NLA_REJECT },
|
||||
[IFLA_BRPORT_MCAST_MAX_GROUPS] = { .type = NLA_U32 },
|
||||
[IFLA_BRPORT_NEIGH_VLAN_SUPPRESS] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
};
|
||||
|
||||
/* 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[],
|
|||
br_set_port_flag(p, tb, IFLA_BRPORT_ISOLATED, BR_ISOLATED);
|
||||
br_set_port_flag(p, tb, IFLA_BRPORT_LOCKED, BR_PORT_LOCKED);
|
||||
br_set_port_flag(p, tb, IFLA_BRPORT_MAB, BR_PORT_MAB);
|
||||
br_set_port_flag(p, tb, IFLA_BRPORT_NEIGH_VLAN_SUPPRESS,
|
||||
BR_NEIGH_VLAN_SUPPRESS);
|
||||
|
||||
if ((p->flags & BR_PORT_MAB) &&
|
||||
(!(p->flags & BR_PORT_LOCKED) || !(p->flags & BR_LEARNING))) {
|
||||
|
|
|
@ -61,7 +61,7 @@
|
|||
#include "dev.h"
|
||||
|
||||
#define RTNL_MAX_TYPE 50
|
||||
#define RTNL_SLAVE_MAX_TYPE 42
|
||||
#define RTNL_SLAVE_MAX_TYPE 43
|
||||
|
||||
struct rtnl_link {
|
||||
rtnl_doit_func doit;
|
||||
|
|
Loading…
Reference in New Issue