* attributes, but they have to be performed on the socket, which has
* the connection owner property set in the kernel.
*/
- if ((drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) &&
- set_owner &&
- (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_OVER_NL80211) ||
- nla_put_flag(msg, NL80211_ATTR_SOCKET_OWNER) ||
- nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, ETH_P_PAE) ||
- nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_PREAUTH)))
+ if (set_owner && nla_put_flag(msg, NL80211_ATTR_SOCKET_OWNER))
return -1;
return send_and_recv(drv->global, handle,
}
+static int nl80211_put_control_port(struct wpa_driver_nl80211_data *drv,
+ struct nl_msg *msg)
+{
+ if (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT) ||
+ nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, ETH_P_PAE) ||
+ ((drv->capa.flags2 & WPA_DRIVER_FLAGS2_CONTROL_PORT_RX) &&
+ (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_OVER_NL80211) ||
+ nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_PREAUTH))))
+ return -1;
+ return 0;
+}
+
+
struct family_data {
const char *group;
int id;
os_strlen(params->sae_password), params->sae_password))
goto fail;
+ if (nl80211_put_control_port(drv, msg) < 0)
+ goto fail;
+
if (params->key_mgmt_suites & WPA_KEY_MGMT_IEEE8021X_NO_WPA &&
(!params->pairwise_ciphers ||
params->pairwise_ciphers & (WPA_CIPHER_WEP104 | WPA_CIPHER_WEP40)) &&
- (nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, ETH_P_PAE) ||
- nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)))
+ nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT))
goto fail;
if (drv->device_ap_sme) {
params->key_mgmt_suite == WPA_KEY_MGMT_PSK_SHA256 ||
params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_SHA384) {
wpa_printf(MSG_DEBUG, " * control port");
- if (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT))
+ if (nl80211_put_control_port(drv, msg))
goto fail;
}
return -1;
}
- if (nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT))
+ if (nl80211_put_control_port(drv, msg))
return -1;
if (params->key_mgmt_suite == WPA_KEY_MGMT_IEEE8021X_NO_WPA &&
(params->pairwise_suite == WPA_CIPHER_NONE ||
params->pairwise_suite == WPA_CIPHER_WEP104 ||
params->pairwise_suite == WPA_CIPHER_WEP40) &&
- (nla_put_u16(msg, NL80211_ATTR_CONTROL_PORT_ETHERTYPE, ETH_P_PAE) ||
- nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT)))
+ nla_put_flag(msg, NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT))
return -1;
if (params->rrm_used) {