]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/netdev: reconfigure netdev if possible
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 28 Oct 2024 14:42:38 +0000 (23:42 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 30 Oct 2024 20:30:40 +0000 (05:30 +0900)
Some netdev configs can be modified after the interface is created.
Let's allow to reconfigure existing interfaces.

src/network/netdev/netdev.c

index 0cfe6ebb9ee9bd73751263a30da988d8660251ac..0a311544b27203fa37c245f91276cb2c2692d3ea 100644 (file)
@@ -724,7 +724,7 @@ static int independent_netdev_create(NetDev *netdev) {
                 return 0;
         }
 
-        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
+        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, netdev->ifindex);
         if (r < 0)
                 return r;
 
@@ -753,7 +753,7 @@ static int stacked_netdev_create(NetDev *netdev, Link *link, Request *req) {
         assert(link);
         assert(req);
 
-        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, 0);
+        r = sd_rtnl_message_new_link(netdev->manager->rtnl, &m, RTM_NEWLINK, netdev->ifindex);
         if (r < 0)
                 return r;
 
@@ -798,9 +798,6 @@ static bool link_is_ready_to_create_stacked_netdev(Link *link) {
 static int netdev_is_ready_to_create(NetDev *netdev, Link *link) {
         assert(netdev);
 
-        if (netdev->state != NETDEV_STATE_LOADING)
-                return false;
-
         if (link && !link_is_ready_to_create_stacked_netdev(link))
                 return false;
 
@@ -862,9 +859,6 @@ int link_request_stacked_netdev(Link *link, NetDev *netdev) {
         if (!netdev_is_stacked(netdev))
                 return -EINVAL;
 
-        if (!IN_SET(netdev->state, NETDEV_STATE_LOADING, NETDEV_STATE_FAILED) || netdev->ifindex > 0)
-                return 0; /* Already created. */
-
         if (!netdev_is_managed(netdev))
                 return 0; /* Already detached, due to e.g. reloading .netdev files. */
 
@@ -921,6 +915,9 @@ static int netdev_request_to_create(NetDev *netdev) {
         if (!netdev_is_managed(netdev))
                 return 0; /* Already detached, due to e.g. reloading .netdev files. */
 
+        if (netdev->state != NETDEV_STATE_LOADING)
+                return 0; /* Already configured (at least tried previously). Not necessary to reconfigure. */
+
         r = netdev_is_ready_to_create(netdev, NULL);
         if (r < 0)
                 return r;