Re: [PATCH net-next 4/6] bridge: Add port-level netlink handling for neigh_forward_grat
Nikolay Aleksandrov <[email protected]> Mon, 4 May 2026 10:42:14 +0300
| Newsgroups | dev.linux.lists.bridge,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.netdev |
|---|---|
| Message-ID | <[email protected]> |
On 03/05/2026 10:35, Danielle Ratson wrote: > 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 > > Signed-off-by: Danielle Ratson <[email protected]> > Reviewed-by: Ido Schimmel <[email protected]> > Reviewed-by: Petr Machata <[email protected]> > --- > net/bridge/br_netlink.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/net/bridge/br_netlink.c b/net/bridge/br_netlink.c > index 6fd5386a1d64..898326c201ef 100644 > --- a/net/bridge/br_netlink.c > +++ b/net/bridge/br_netlink.c > @@ -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))) { Acked-by: Nikolay Aleksandrov <[email protected]>