Skip setting the same hwaddr to a lag port if not needed

Avoid setting the same mac address to a LAG port,
if the LAG port already has the right one.

1. Make libteam avoid changing settings of a link,
which prevents the kernel from sending multiply Netlink
messages. Netlink message listeners don't need to react
to the Netlink messages.

2. Libteam works faster. It doesn't need to use any
syscalls and go deep into libteam functions in the case
when nothing is changed. A straightforward check and
libteam avoid much work.

In the case, when libteam user has hundreds of ports,
and up to a hundred LAGs, this patch saves them significant
CPU time.

Signed-off-by: Pavel Shirshov <>
Signed-off-by: Jiri Pirko <>
diff --git a/teamd/teamd.c b/teamd/teamd.c
index 8cdc16d..f955b19 100644
--- a/teamd/teamd.c
+++ b/teamd/teamd.c
@@ -837,7 +837,14 @@
 		err = -EINVAL;
 		goto free_hwaddr;
-	err = team_hwaddr_set(ctx->th, ctx->ifindex, hwaddr, hwaddr_len);
+	if (memcmp(hwaddr, ctx->hwaddr, hwaddr_len))
+		err = team_hwaddr_set(ctx->th, ctx->ifindex, hwaddr, hwaddr_len);
+	else {
+		err = 0;
+		teamd_log_dbg(ctx, "Skip setting same hwaddr string: \"%s\".", hwaddr_str);
+	}
 	if (!err)
 		ctx->hwaddr_explicit = true;