On Wed, Mar 18, 2026 at 05:36:28PM +0100, David Marchand wrote:
> Re-enable debug logs unconditionally, this helps understanding why mac
> deletions were silently failing (while a bridge fdb del command was
> working fine).
>
> testpmd> mac_addr add 0 FA:35:44:3F:58:31
> testpmd> mac_addr remove 0 FA:35:44:3F:58:31
> mlx5_common: Interface 35 cannot remove MAC address FA:35:44:3F:58:31
> Operation not supported
>
> Then, fix mac deletion as the NLM_F_CREATE == 0x200 flag is relevant
> with a RTM_NEWNEIGH op.
> For a RTM_DELNEIGH op, 0x200 == NLM_F_BULK and passing this flag
> makes the deletion fail miserably for a single mac.
>
> Fixes: ccdcba53a3f4 ("net/mlx5: use Netlink to add/remove MAC addresses")
> Cc: [email protected]
>
> Signed-off-by: David Marchand <[email protected]>
> ---
> drivers/common/mlx5/linux/mlx5_nl.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/common/mlx5/linux/mlx5_nl.c
> b/drivers/common/mlx5/linux/mlx5_nl.c
> index eceb3d796f..b50431fb61 100644
> --- a/drivers/common/mlx5/linux/mlx5_nl.c
> +++ b/drivers/common/mlx5/linux/mlx5_nl.c
> @@ -581,8 +581,8 @@ mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int
> iface_idx,
> } req = {
> .hdr = {
> .nlmsg_len = NLMSG_LENGTH(sizeof(struct ndmsg)),
> - .nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE |
> - NLM_F_EXCL | NLM_F_ACK,
> + .nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK |
> + add ? NLM_F_CREATE | NLM_F_EXCL : 0,
It seems that this expression is constructed incorrectly.
IIUC this will be "parenthesised" as follows:
((NLM_F_REQUEST | NLM_F_ACK) | add) ? (NLM_F_CREATE | NLM_F_EXCL) : 0
Since bitwise OR has higher precendence.
So "add" value will be ignored and only "NLM_F_CREATE | NLM_F_EXCL"
will be returned.
Could you please add parenthesis around the ternary?
> .nlmsg_type = add ? RTM_NEWNEIGH : RTM_DELNEIGH,
> },
> .ndm = {
> @@ -612,7 +612,6 @@ mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int
> iface_idx,
> goto error;
> return 0;
> error:
> -#ifdef RTE_PMD_MLX5_DEBUG
> {
> char m[RTE_ETHER_ADDR_FMT_SIZE];
>
> @@ -622,7 +621,6 @@ mlx5_nl_mac_addr_modify(int nlsk_fd, unsigned int
> iface_idx,
> iface_idx,
> add ? "add" : "remove", m, strerror(rte_errno));
> }
> -#endif
> return -rte_errno;
> }
>
Best regards,
Dariusz Sosnowski