mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
bridge: Add port-level netlink handling for neigh_forward_grat
Add netlink handlers for the port-level neigh_forward_grat option via IFLA_BRPORT_NEIGH_FORWARD_GRAT attribute. The default value of OFF preserves existing behavior, i.e. gratuitous ARP and unsolicited NA are suppressed when neigh_suppress is enabled. Users can explicitly set it to ON to allow these packets through. Example for enabling control via 'bridge link' command: # bridge link set dev eth0 neigh_suppress on # bridge link set dev eth0 neigh_forward_grat on Reviewed-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Danielle Ratson <danieller@nvidia.com> Acked-by: Nikolay Aleksandrov <razor@blackwall.org> Link: https://patch.msgid.link/20260511065936.4173106-5-danieller@nvidia.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
committed by
Paolo Abeni
parent
27c082c600
commit
2c75c438b9
@@ -190,6 +190,7 @@ static inline size_t br_port_info_size(void)
|
||||
+ 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(1) /* IFLA_BRPORT_NEIGH_FORWARD_GRAT */
|
||||
+ 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 */
|
||||
@@ -282,7 +283,9 @@ static int br_port_fill_attrs(struct sk_buff *skb,
|
||||
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_NEIGH_VLAN_SUPPRESS,
|
||||
!!(p->flags & BR_NEIGH_VLAN_SUPPRESS)))
|
||||
!!(p->flags & BR_NEIGH_VLAN_SUPPRESS)) ||
|
||||
nla_put_u8(skb, IFLA_BRPORT_NEIGH_FORWARD_GRAT,
|
||||
!!(p->flags & BR_NEIGH_FORWARD_GRAT)))
|
||||
return -EMSGSIZE;
|
||||
|
||||
timerval = br_timer_value(&p->message_age_timer);
|
||||
@@ -902,6 +905,7 @@ static const struct nla_policy br_port_policy[IFLA_BRPORT_MAX + 1] = {
|
||||
[IFLA_BRPORT_MCAST_MAX_GROUPS] = { .type = NLA_U32 },
|
||||
[IFLA_BRPORT_NEIGH_VLAN_SUPPRESS] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
[IFLA_BRPORT_BACKUP_NHID] = { .type = NLA_U32 },
|
||||
[IFLA_BRPORT_NEIGH_FORWARD_GRAT] = NLA_POLICY_MAX(NLA_U8, 1),
|
||||
};
|
||||
|
||||
/* Change the state of the port and notify spanning tree */
|
||||
@@ -970,6 +974,8 @@ static int br_setport(struct net_bridge_port *p, struct nlattr *tb[],
|
||||
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);
|
||||
br_set_port_flag(p, tb, IFLA_BRPORT_NEIGH_FORWARD_GRAT,
|
||||
BR_NEIGH_FORWARD_GRAT);
|
||||
|
||||
if ((p->flags & BR_PORT_MAB) &&
|
||||
(!(p->flags & BR_PORT_LOCKED) || !(p->flags & BR_LEARNING))) {
|
||||
|
||||
Reference in New Issue
Block a user