From: Yu Watanabe Date: Mon, 28 Oct 2024 14:42:38 +0000 (+0900) Subject: network/netdev: reconfigure netdev if possible X-Git-Tag: v257-rc1~87^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=890bd7225a68cc9ff9207442b37285f8b009eb47;p=thirdparty%2Fsystemd.git network/netdev: reconfigure netdev if possible Some netdev configs can be modified after the interface is created. Let's allow to reconfigure existing interfaces. --- diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 0cfe6ebb9ee..0a311544b27 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -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;