]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: unset master ifindex only when necessary
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 12 May 2022 23:36:50 +0000 (08:36 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 5 Aug 2022 12:49:27 +0000 (21:49 +0900)
src/network/networkd-setlink.c

index e2b5acc0864f9b10345e7a24dcd8f11249135be7..29e1192a83606d81ada7cbbaaff333f6b2c6eb78 100644 (file)
@@ -797,20 +797,28 @@ int link_request_to_set_master(Link *link) {
         assert(link->network);
 
         if (link->network->keep_master) {
+                /* When KeepMaster=yes, BatmanAdvanced=, Bond=, Bridge=, and VRF= are ignored. */
                 link->master_set = true;
                 return 0;
-        }
-
-        link->master_set = false;
 
-        if (link->network->batadv || link->network->bond || link->network->bridge || link->network->vrf)
+        } else if (link->network->batadv || link->network->bond || link->network->bridge || link->network->vrf) {
+                link->master_set = false;
                 return link_request_set_link(link, REQUEST_TYPE_SET_LINK_MASTER,
                                              link_set_master_handler,
                                              NULL);
-        else
+
+        } else if (link->master_ifindex != 0) {
+                /* Unset master only when it is set. */
+                link->master_set = false;
                 return link_request_set_link(link, REQUEST_TYPE_SET_LINK_MASTER,
                                              link_unset_master_handler,
                                              NULL);
+
+        } else {
+                /* Nothing we need to do. */
+                link->master_set = true;
+                return 0;
+        }
 }
 
 int link_request_to_set_mtu(Link *link, uint32_t mtu) {