From: Yu Watanabe Date: Sun, 13 Jun 2021 21:34:01 +0000 (+0900) Subject: network: do not partially update wlan information on failure X-Git-Tag: v249-rc1~20^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ecb3deccdcc22499d6384bf393803aedca6db4e2;p=thirdparty%2Fsystemd.git network: do not partially update wlan information on failure --- diff --git a/src/network/networkd-wifi.c b/src/network/networkd-wifi.c index 49f2f011f1c..37700afb812 100644 --- a/src/network/networkd-wifi.c +++ b/src/network/networkd-wifi.c @@ -18,8 +18,9 @@ int wifi_get_info(Link *link) { _cleanup_free_ char *ssid = NULL; enum nl80211_iftype iftype; + bool updated = false; const char *type; - int r, s = 0; + int r; assert(link); @@ -38,23 +39,26 @@ int wifi_get_info(Link *link) { r = wifi_get_interface(link->manager->genl, link->ifindex, &iftype, &ssid); if (r < 0) return r; - if (r > 0 && link->wlan_iftype == iftype && streq_ptr(link->ssid, ssid)) - r = 0; + if (r == 0) + iftype = link->wlan_iftype; /* Assume iftype is not changed. */ - link->wlan_iftype = iftype; - free_and_replace(link->ssid, ssid); + if (iftype == NL80211_IFTYPE_STATION) { + struct ether_addr bssid; - if (link->wlan_iftype == NL80211_IFTYPE_STATION) { - struct ether_addr old_bssid = link->bssid; + r = wifi_get_station(link->manager->genl, link->ifindex, &bssid); + if (r < 0) + return r; - s = wifi_get_station(link->manager->genl, link->ifindex, &link->bssid); - if (s < 0) - return s; - if (s > 0 && memcmp(&old_bssid, &link->bssid, sizeof old_bssid) == 0) - s = 0; + updated = !ether_addr_equal(&link->bssid, &bssid); + link->bssid = bssid; } - if (r > 0 || s > 0) { + updated = updated || link->wlan_iftype != iftype; + link->wlan_iftype = iftype; + updated = updated || !streq_ptr(link->ssid, ssid); + free_and_replace(link->ssid, ssid); + + if (updated) { if (link->wlan_iftype == NL80211_IFTYPE_STATION && link->ssid) log_link_info(link, "Connected WiFi access point: %s (%s)", link->ssid, ETHER_ADDR_TO_STR(&link->bssid));