Avoid setting the same mac address to a LAG port,
if the LAG port already has the right one.
Benefits:
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 <pavel.contrib(a)gmail.com>
---
teamd/teamd.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
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 @@ static int teamd_set_hwaddr(struct teamd_context *ctx)
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;
free_hwaddr:
--
2.7.4