]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
networkd: keep bond slave up if already attached
authorTobias Jungel <tobias.jungel@bisdn.de>
Fri, 19 Oct 2018 11:12:35 +0000 (13:12 +0200)
committerLennart Poettering <lennart@poettering.net>
Fri, 19 Oct 2018 21:00:52 +0000 (23:00 +0200)
There is no need to disable an already correct enslaved interface.

relates to #10118

src/network/networkd-link.c
src/network/networkd-link.h

index f4ab8aadb80b3eb02cdb1ae7284c21b9ecdbbf05..867322f8c7e41f7b370475d4e89c8a956fe129a6 100644 (file)
@@ -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),
index bd66793cb6abaf477d9de9238bafe902cab1ad57..7261b3142af7e5fc59ce113f052ea44bdf9c4b31 100644 (file)
@@ -52,6 +52,7 @@ typedef struct Link {
         unsigned n_ref;
 
         int ifindex;
+        int master_ifindex;
         char *ifname;
         char *kind;
         unsigned short iftype;