From cbff717048ad25b2fb47ea3df688f9df7e6af6c7 Mon Sep 17 00:00:00 2001 From: Tobias Jungel Date: Fri, 19 Oct 2018 13:12:35 +0200 Subject: [PATCH] networkd: keep bond slave up if already attached There is no need to disable an already correct enslaved interface. relates to #10118 --- src/network/networkd-link.c | 8 ++++++++ src/network/networkd-link.h | 1 + 2 files changed, 9 insertions(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index f4ab8aa..867322f 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -469,6 +469,10 @@ static int link_new(Manager *manager, sd_netlink_message *message, Link **ret) { return -ENOMEM; } + r = sd_netlink_message_read_u32(message, IFLA_MASTER, (uint32_t *)&link->master_ifindex); + if (r < 0) + log_link_debug_errno(link, r, "New device has no master, continuing without"); + r = sd_netlink_message_read_ether_addr(message, IFLA_ADDRESS, &link->mac); if (r < 0) log_link_debug_errno(link, r, "MAC address not found for new device, continuing without"); @@ -2358,6 +2362,10 @@ static int link_enter_join_netdev(Link *link) { return link_joined(link); if (link->network->bond) { + if (link->network->bond->state == NETDEV_STATE_READY && + link->network->bond->ifindex == link->master_ifindex) + return link_joined(link); + log_struct(LOG_DEBUG, LOG_LINK_INTERFACE(link), LOG_NETDEV_INTERFACE(link->network->bond), diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index bd66793..7261b31 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -52,6 +52,7 @@ typedef struct Link { unsigned n_ref; int ifindex; + int master_ifindex; char *ifname; char *kind; unsigned short iftype; -- 2.7.4