mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-29 05:39:24 +01:00
netdev: factor out scan_bss from CMD_CONNECT builder
In order to support OWE in the CMD_CONNECT path the scan_bss parameter needs to be removed since this is lost after netdev_connect returns. Nearly everything needed is also stored in the handshake except the privacy capability which is now being mirrored in the netdev object itself.
This commit is contained in:
parent
3975e4eb6d
commit
db2f14225d
23
src/netdev.c
23
src/netdev.c
@ -181,6 +181,7 @@ struct netdev {
|
|||||||
bool events_ready : 1;
|
bool events_ready : 1;
|
||||||
bool retry_auth : 1;
|
bool retry_auth : 1;
|
||||||
bool in_reassoc : 1;
|
bool in_reassoc : 1;
|
||||||
|
bool privacy : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct netdev_preauth_state {
|
struct netdev_preauth_state {
|
||||||
@ -788,6 +789,7 @@ static void netdev_connect_free(struct netdev *netdev)
|
|||||||
netdev->ignore_connect_event = false;
|
netdev->ignore_connect_event = false;
|
||||||
netdev->expect_connect_failure = false;
|
netdev->expect_connect_failure = false;
|
||||||
netdev->cur_rssi_low = false;
|
netdev->cur_rssi_low = false;
|
||||||
|
netdev->privacy = false;
|
||||||
|
|
||||||
if (netdev->connect_cmd) {
|
if (netdev->connect_cmd) {
|
||||||
l_genl_msg_unref(netdev->connect_cmd);
|
l_genl_msg_unref(netdev->connect_cmd);
|
||||||
@ -2901,7 +2903,6 @@ static void netdev_fils_tx_associate(struct iovec *fils_iov, size_t n_fils_iov,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static struct l_genl_msg *netdev_build_cmd_connect(struct netdev *netdev,
|
static struct l_genl_msg *netdev_build_cmd_connect(struct netdev *netdev,
|
||||||
struct scan_bss *bss,
|
|
||||||
struct handshake_state *hs,
|
struct handshake_state *hs,
|
||||||
const uint8_t *prev_bssid,
|
const uint8_t *prev_bssid,
|
||||||
const struct iovec *vendor_ies,
|
const struct iovec *vendor_ies,
|
||||||
@ -2924,10 +2925,9 @@ static struct l_genl_msg *netdev_build_cmd_connect(struct netdev *netdev,
|
|||||||
msg = l_genl_msg_new_sized(NL80211_CMD_CONNECT, 512);
|
msg = l_genl_msg_new_sized(NL80211_CMD_CONNECT, 512);
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index);
|
l_genl_msg_append_attr(msg, NL80211_ATTR_IFINDEX, 4, &netdev->index);
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_WIPHY_FREQ,
|
l_genl_msg_append_attr(msg, NL80211_ATTR_WIPHY_FREQ,
|
||||||
4, &bss->frequency);
|
4, &netdev->frequency);
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_MAC, ETH_ALEN, bss->addr);
|
l_genl_msg_append_attr(msg, NL80211_ATTR_MAC, ETH_ALEN, hs->aa);
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_SSID,
|
l_genl_msg_append_attr(msg, NL80211_ATTR_SSID, hs->ssid_len, hs->ssid);
|
||||||
bss->ssid_len, bss->ssid);
|
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_AUTH_TYPE, 4, &auth_type);
|
l_genl_msg_append_attr(msg, NL80211_ATTR_AUTH_TYPE, 4, &auth_type);
|
||||||
|
|
||||||
switch (nhs->type) {
|
switch (nhs->type) {
|
||||||
@ -2950,7 +2950,7 @@ static struct l_genl_msg *netdev_build_cmd_connect(struct netdev *netdev,
|
|||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_PREV_BSSID, ETH_ALEN,
|
l_genl_msg_append_attr(msg, NL80211_ATTR_PREV_BSSID, ETH_ALEN,
|
||||||
prev_bssid);
|
prev_bssid);
|
||||||
|
|
||||||
if (bss->capability & IE_BSS_CAP_PRIVACY)
|
if (netdev->privacy)
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_PRIVACY, 0, NULL);
|
l_genl_msg_append_attr(msg, NL80211_ATTR_PRIVACY, 0, NULL);
|
||||||
|
|
||||||
l_genl_msg_append_attr(msg, NL80211_ATTR_SOCKET_OWNER, 0, NULL);
|
l_genl_msg_append_attr(msg, NL80211_ATTR_SOCKET_OWNER, 0, NULL);
|
||||||
@ -3476,6 +3476,10 @@ static void netdev_connect_common(struct netdev *netdev,
|
|||||||
bool is_rsn = hs->supplicant_ie != NULL;
|
bool is_rsn = hs->supplicant_ie != NULL;
|
||||||
const uint8_t *prev_bssid = prev_bss ? prev_bss->addr : NULL;
|
const uint8_t *prev_bssid = prev_bss ? prev_bss->addr : NULL;
|
||||||
|
|
||||||
|
netdev->frequency = bss->frequency;
|
||||||
|
netdev->privacy = bss->capability & IE_BSS_CAP_PRIVACY;
|
||||||
|
handshake_state_set_authenticator_address(hs, bss->addr);
|
||||||
|
|
||||||
if (!is_rsn)
|
if (!is_rsn)
|
||||||
goto build_cmd_connect;
|
goto build_cmd_connect;
|
||||||
|
|
||||||
@ -3519,8 +3523,8 @@ static void netdev_connect_common(struct netdev *netdev,
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
build_cmd_connect:
|
build_cmd_connect:
|
||||||
cmd_connect = netdev_build_cmd_connect(netdev, bss, hs,
|
cmd_connect = netdev_build_cmd_connect(netdev, hs, prev_bssid,
|
||||||
prev_bssid, vendor_ies, num_vendor_ies);
|
vendor_ies, num_vendor_ies);
|
||||||
|
|
||||||
if (!is_offload(hs) && (is_rsn || hs->settings_8021x)) {
|
if (!is_offload(hs) && (is_rsn || hs->settings_8021x)) {
|
||||||
sm = eapol_sm_new(hs);
|
sm = eapol_sm_new(hs);
|
||||||
@ -3536,13 +3540,10 @@ build_cmd_connect:
|
|||||||
netdev->user_data = user_data;
|
netdev->user_data = user_data;
|
||||||
netdev->handshake = hs;
|
netdev->handshake = hs;
|
||||||
netdev->sm = sm;
|
netdev->sm = sm;
|
||||||
netdev->frequency = bss->frequency;
|
|
||||||
netdev->cur_rssi = bss->signal_strength / 100;
|
netdev->cur_rssi = bss->signal_strength / 100;
|
||||||
netdev_rssi_level_init(netdev);
|
netdev_rssi_level_init(netdev);
|
||||||
netdev_cqm_rssi_update(netdev);
|
netdev_cqm_rssi_update(netdev);
|
||||||
|
|
||||||
handshake_state_set_authenticator_address(hs, bss->addr);
|
|
||||||
|
|
||||||
if (!wiphy_has_ext_feature(netdev->wiphy,
|
if (!wiphy_has_ext_feature(netdev->wiphy,
|
||||||
NL80211_EXT_FEATURE_CAN_REPLACE_PTK0))
|
NL80211_EXT_FEATURE_CAN_REPLACE_PTK0))
|
||||||
handshake_state_set_no_rekey(hs, true);
|
handshake_state_set_no_rekey(hs, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user