]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: set MAC address before enslaving to bond or bridge interface
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 6 Dec 2021 20:57:29 +0000 (05:57 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 7 Dec 2021 06:58:25 +0000 (15:58 +0900)
As the master interface may inherit the slave MAC address.

src/network/networkd-setlink.c

index ff4eecf9b3b5d0090ebd96268b5573e6fb841aa0..77451e39ae72b5d31e2f6cf8bb661fca659f5817 100644 (file)
@@ -568,12 +568,19 @@ static bool link_is_ready_to_call_set_link(Request *req) {
                 break;
         case SET_LINK_MASTER: {
                 uint32_t m = 0;
+                Request req_mac = {
+                        .link = link,
+                        .type = REQUEST_TYPE_SET_LINK,
+                        .set_link_operation_ptr = INT_TO_PTR(SET_LINK_MAC),
+                };
 
                 if (link->network->batadv) {
                         if (!netdev_is_ready(link->network->batadv))
                                 return false;
                         m = link->network->batadv->ifindex;
                 } else if (link->network->bond) {
+                        if (ordered_set_contains(link->manager->request_queue, &req_mac))
+                                return false;
                         if (!netdev_is_ready(link->network->bond))
                                 return false;
                         m = link->network->bond->ifindex;
@@ -589,6 +596,8 @@ static bool link_is_ready_to_call_set_link(Request *req) {
                                 }
                         }
                 } else if (link->network->bridge) {
+                        if (ordered_set_contains(link->manager->request_queue, &req_mac))
+                                return false;
                         if (!netdev_is_ready(link->network->bridge))
                                 return false;
                         m = link->network->bridge->ifindex;