]> git.proxmox.com Git - systemd.git/blobdiff - src/network/networkd-wifi.c
New upstream version 249~rc1
[systemd.git] / src / network / networkd-wifi.c
index 57e8a0e9b5db21adefa025db29ad677c6069238b..37700afb812d8f3c4b5981b7e313ae76038337c6 100644 (file)
@@ -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,28 +39,29 @@ 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) {
-                char buf[ETHER_ADDR_TO_STRING_MAX];
+        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_string(&link->bssid, buf));
+                                      link->ssid, ETHER_ADDR_TO_STR(&link->bssid));
 
                 return 1; /* Some information is updated. */
         }