From: Yu Watanabe Date: Tue, 29 Oct 2024 15:16:10 +0000 (+0900) Subject: network/netdev: update state file when NetDev object assignment is changed X-Git-Tag: v257-rc1~92^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d16083557b19ae5910f1f04b01085c8e8a8ccba1;p=thirdparty%2Fsystemd.git network/netdev: update state file when NetDev object assignment is changed --- diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index f7598dc7eac..bbd4a22cf60 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -34,6 +34,7 @@ #include "networkd-queue.h" #include "networkd-setlink.h" #include "networkd-sriov.h" +#include "networkd-state-file.h" #include "nlmon.h" #include "path-lookup.h" #include "siphash24.h" @@ -351,16 +352,16 @@ void link_assign_netdev(Link *link) { old = TAKE_PTR(link->netdev); if (netdev_get(link->manager, link->ifname, &netdev) < 0) - return; + goto not_found; int ifindex = NETDEV_VTABLE(netdev)->get_ifindex ? NETDEV_VTABLE(netdev)->get_ifindex(netdev, link->ifname) : netdev->ifindex; if (ifindex != link->ifindex) - return; + goto not_found; if (NETDEV_VTABLE(netdev)->iftype != link->iftype) - return; + goto not_found; if (!NETDEV_VTABLE(netdev)->skip_netdev_kind_check) { const char *kind; @@ -371,13 +372,23 @@ void link_assign_netdev(Link *link) { kind = netdev_kind_to_string(netdev->kind); if (!streq_ptr(kind, link->kind)) - return; + goto not_found; } link->netdev = netdev_ref(netdev); - if (netdev != old) - log_link_debug(link, "Found matching .netdev file: %s", netdev->filename); + if (netdev == old) + return; /* The same NetDev found. */ + + log_link_debug(link, "Found matching .netdev file: %s", netdev->filename); + link_dirty(link); + return; + +not_found: + + if (old) + /* Previously assigned NetDev is detached from Manager? Update the state file. */ + link_dirty(link); } void netdev_enter_failed(NetDev *netdev) {