From 4642371d0764078374db4175f6e6f409618b72a6 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 22 Nov 2022 14:31:31 +0900 Subject: [PATCH 1/2] network: drop unnecessary prototype Follow-up for a39a9ac8065c29330207838b70fe388bde2bc254. --- src/network/networkd-link.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index 4d397da79a..5838eb16b0 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -239,7 +239,6 @@ const char* link_state_to_string(LinkState s) _const_; LinkState link_state_from_string(const char *s) _pure_; int link_reconfigure(Link *link, bool force); -int link_reconfigure_after_sleep(Link *link); int manager_udev_process_link(Manager *m, sd_device *device, sd_device_action_t action); int manager_rtnl_process_link(sd_netlink *rtnl, sd_netlink_message *message, Manager *m); From 8a4ad01a72481a6a7c0309064dd2dbd814818c94 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 22 Nov 2022 14:24:32 +0900 Subject: [PATCH 2/2] network: wifi: try to reconfigure when connected Sometimes, RTM_NEWLINK message with carrier is received earlier than NL80211_CMD_CONNECT. To make SSID= or other WiFi related settings in [Match] section work, let's try to reconfigure the interface. Fixes a bug introduced by 96f5f9ef9a1ba5146d3357c1548fb675d3bd5b68. Fixes #25384. --- src/network/networkd-link.c | 2 +- src/network/networkd-link.h | 1 + src/network/networkd-wifi.c | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 4ed622cfe6..c46b8f5b2e 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1178,7 +1178,7 @@ static int link_get_network(Link *link, Network **ret) { return -ENOENT; } -static int link_reconfigure_impl(Link *link, bool force) { +int link_reconfigure_impl(Link *link, bool force) { Network *network = NULL; NetDev *netdev = NULL; int r; diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h index 5838eb16b0..0d601ab548 100644 --- a/src/network/networkd-link.h +++ b/src/network/networkd-link.h @@ -238,6 +238,7 @@ int link_stop_engines(Link *link, bool may_keep_dhcp); const char* link_state_to_string(LinkState s) _const_; LinkState link_state_from_string(const char *s) _pure_; +int link_reconfigure_impl(Link *link, bool force); int link_reconfigure(Link *link, bool force); int manager_udev_process_link(Manager *m, sd_device *device, sd_device_action_t action); diff --git a/src/network/networkd-wifi.c b/src/network/networkd-wifi.c index 4bf798a9eb..62cbca0cf9 100644 --- a/src/network/networkd-wifi.c +++ b/src/network/networkd-wifi.c @@ -269,6 +269,18 @@ int manager_genl_process_nl80211_mlme(sd_netlink *genl, sd_netlink_message *mess 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)); + + /* Sometimes, RTM_NEWLINK message with carrier is received earlier than NL80211_CMD_CONNECT. + * To make SSID= or other WiFi related settings in [Match] section work, let's try to + * reconfigure the interface. */ + if (link->ssid && link_has_carrier(link)) { + r = link_reconfigure_impl(link, /* force = */ false); + if (r < 0) { + log_link_warning_errno(link, r, "Failed to reconfigure interface: %m"); + link_enter_failed(link); + return 0; + } + } break; } case NL80211_CMD_DISCONNECT: