static int wpa_driver_hostap_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_hostap_data *drv = priv; int ret = 0; int allow_unencrypted_eapol; wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); if (params->mode != drv->current_mode) { /* At the moment, Host AP driver requires host_roaming=2 for * infrastructure mode and host_roaming=0 for adhoc. */ if (prism2param(drv, PRISM2_PARAM_HOST_ROAMING, params->mode == IEEE80211_MODE_IBSS ? 0 : 2) < 0) { wpa_printf(MSG_DEBUG, "%s: failed to set host_roaming", __func__); } drv->current_mode = params->mode; } if (prism2param(drv, PRISM2_PARAM_PRIVACY_INVOKED, params->key_mgmt_suite != KEY_MGMT_NONE) < 0) ret = -1; if (wpa_driver_hostap_set_wpa_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0) ret = -1; if (wpa_driver_wext_set_mode(drv->wext, params->mode) < 0) ret = -1; if (params->freq && wpa_driver_wext_set_freq(drv->wext, params->freq) < 0) ret = -1; if (wpa_driver_wext_set_ssid(drv->wext, params->ssid, params->ssid_len) < 0) ret = -1; if (wpa_driver_wext_set_bssid(drv->wext, params->bssid) < 0) ret = -1; /* Allow unencrypted EAPOL messages even if pairwise keys are set when * not using WPA. IEEE 802.1X specifies that these frames are not * encrypted, but WPA encrypts them when pairwise keys are in use. */ if (params->key_mgmt_suite == KEY_MGMT_802_1X || params->key_mgmt_suite == KEY_MGMT_PSK) allow_unencrypted_eapol = 0; else allow_unencrypted_eapol = 1; if (prism2param(drv, PRISM2_PARAM_IEEE_802_1X, allow_unencrypted_eapol) < 0) { wpa_printf(MSG_DEBUG, "hostap: Failed to configure " "ieee_802_1x param"); /* Ignore this error.. driver_hostap.c can also be used with * other drivers that do not support this prism2_param. */ } return ret; }
void * wpa_driver_wext_init(void *ctx, const char *ifname) { int s, flags; struct sockaddr_nl local; struct wpa_driver_wext_data *drv; drv = malloc(sizeof(*drv)); if (drv == NULL) return NULL; memset(drv, 0, sizeof(*drv)); drv->ctx = ctx; strncpy(drv->ifname, ifname, sizeof(drv->ifname)); drv->ioctl_sock = socket(PF_INET, SOCK_DGRAM, 0); if (drv->ioctl_sock < 0) { perror("socket(PF_INET,SOCK_DGRAM)"); free(drv); return NULL; } s = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); if (s < 0) { perror("socket(PF_NETLINK,SOCK_RAW,NETLINK_ROUTE)"); close(drv->ioctl_sock); free(drv); return NULL; } memset(&local, 0, sizeof(local)); local.nl_family = AF_NETLINK; local.nl_groups = RTMGRP_LINK; if (bind(s, (struct sockaddr *) &local, sizeof(local)) < 0) { perror("bind(netlink)"); close(s); close(drv->ioctl_sock); free(drv); return NULL; } eloop_register_read_sock(s, wpa_driver_wext_event_receive, drv, ctx); drv->event_sock = s; /* * Make sure that the driver does not have any obsolete PMKID entries. */ wpa_driver_wext_flush_pmkid(drv); if (wpa_driver_wext_set_mode(drv, 0) < 0) { printf("Could not configure driver to use managed mode\n"); } if (wpa_driver_wext_get_ifflags(drv, &flags) != 0 || wpa_driver_wext_set_ifflags(drv, flags | IFF_UP) != 0) { printf("Could not set interface '%s' UP\n", drv->ifname); } return drv; }
int wpa_driver_tista_set_mode(void *priv, int mode) { struct wpa_driver_ti_data *drv = priv; int ret; wpa_printf(MSG_DEBUG, "%s", __func__); TI_CHECK_DRIVER( drv->driver_is_loaded, -1 ); ret = wpa_driver_wext_set_mode(drv->wext, mode); return ret; }
static int wpa_driver_tista_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_ti_data *drv = priv; int allow_unencrypted_eapol; int value, flags, ret = 0; wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); TI_CHECK_DRIVER( drv->driver_is_loaded, -1 ); #ifdef WPA_SUPPLICANT_VER_0_6_X #ifdef ANDROID ((struct wpa_driver_wext_data *)(drv->wext))->skip_disconnect = 0; #endif #endif if (wpa_driver_wext_get_ifflags(drv->wext, &flags) == 0) { if (!(flags & IFF_UP)) { wpa_driver_wext_set_ifflags(drv->wext, flags | IFF_UP); } } #if 0 if (!params->bssid) wpa_driver_wext_set_bssid(drv->wext, NULL); #endif #ifdef WPA_SUPPLICANT_VER_0_5_X /* Set driver network mode (Adhoc/Infrastructure) according to supplied parameters */ wpa_driver_wext_set_mode(drv->wext, params->mode); #endif wpa_driver_tista_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len); if (params->wpa_ie == NULL || params->wpa_ie_len == 0) value = IW_AUTH_WPA_VERSION_DISABLED; #ifdef WPA_SUPPLICANT_VER_0_6_X else if (params->wpa_ie[0] == WLAN_EID_RSN) #else else if (params->wpa_ie[0] == RSN_INFO_ELEM) #endif value = IW_AUTH_WPA_VERSION_WPA2; #ifdef CONFIG_WPS else if (params->key_mgmt_suite == KEY_MGMT_WPS) value = IW_AUTH_WPA_VERSION_DISABLED; #endif else value = IW_AUTH_WPA_VERSION_WPA; wpa_driver_tista_set_auth_param(drv, IW_AUTH_WPA_VERSION, value); value = wpa_driver_tista_cipher2wext(params->pairwise_suite); wpa_driver_tista_set_auth_param(drv, IW_AUTH_CIPHER_PAIRWISE, value); value = wpa_driver_tista_cipher2wext(params->group_suite); wpa_driver_tista_set_auth_param(drv, IW_AUTH_CIPHER_GROUP, value); value = wpa_driver_tista_keymgmt2wext(params->key_mgmt_suite); wpa_driver_tista_set_auth_param(drv, IW_AUTH_KEY_MGMT, value); value = params->key_mgmt_suite != KEY_MGMT_NONE || params->pairwise_suite != CIPHER_NONE || params->group_suite != CIPHER_NONE || #ifdef WPA_SUPPLICANT_VER_0_6_X (params->wpa_ie_len && (params->key_mgmt_suite != KEY_MGMT_WPS)); #else params->wpa_ie_len; #endif wpa_driver_tista_set_auth_param(drv, IW_AUTH_PRIVACY_INVOKED, value); /* Allow unencrypted EAPOL messages even if pairwise keys are set when * not using WPA. IEEE 802.1X specifies that these frames are not * encrypted, but WPA encrypts them when pairwise keys are in use. */ if (params->key_mgmt_suite == KEY_MGMT_802_1X || params->key_mgmt_suite == KEY_MGMT_PSK) allow_unencrypted_eapol = 0; else allow_unencrypted_eapol = 1; wpa_driver_tista_set_auth_param(drv, IW_AUTH_RX_UNENCRYPTED_EAPOL, allow_unencrypted_eapol); if (params->freq) wpa_driver_wext_set_freq(drv->wext, params->freq); if (params->bssid) { wpa_printf(MSG_DEBUG, "wpa_driver_tista_associate: BSSID=" MACSTR, MAC2STR(params->bssid)); /* if there is bssid -> set it */ if (os_memcmp(params->bssid, "\x00\x00\x00\x00\x00\x00", ETH_ALEN) != 0) { wpa_driver_wext_set_bssid(drv->wext, params->bssid); } } ret = wpa_driver_wext_set_ssid(drv->wext, params->ssid, params->ssid_len); return ret; }
int wpa_driver_awext_set_mode(void *priv, int mode) { struct wpa_driver_awext_data *drv = priv; return wpa_driver_wext_set_mode(drv->wext, mode); }
static int wpa_driver_ps3_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_wext_data *drv = priv; int ret, value; wpa_printf(MSG_DEBUG, "%s: <-", __func__); /* clear BSSID */ if (!params->bssid && wpa_driver_wext_set_bssid(drv, NULL) < 0) ret = -1; if (wpa_driver_wext_set_mode(drv, params->mode) < 0) ret = -1; if (params->wpa_ie == NULL || params->wpa_ie_len == 0) value = IW_AUTH_WPA_VERSION_DISABLED; else if (params->wpa_ie[0] == WLAN_EID_RSN) value = IW_AUTH_WPA_VERSION_WPA2; else value = IW_AUTH_WPA_VERSION_WPA; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_VERSION, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->pairwise_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_PAIRWISE, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->group_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_GROUP, value) < 0) ret = -1; value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_KEY_MGMT, value) < 0) ret = -1; /* set selected BSSID */ if (params->bssid && wpa_driver_wext_set_bssid(drv, params->bssid) < 0) ret = -1; switch (params->group_suite) { case CIPHER_NONE: ret = 0; break; case CIPHER_WEP40: case CIPHER_WEP104: ret = wpa_driver_ps3_set_wep_keys(drv, params); break; case CIPHER_TKIP: case CIPHER_CCMP: ret = wpa_driver_ps3_set_wpa_key(drv, params); break; } /* start to associate */ ret = wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len); wpa_printf(MSG_DEBUG, "%s: ->", __func__); return ret; }
static int wpa_driver_wext_associate(void *priv, struct wpa_driver_associate_params *params) { struct wpa_driver_wext_data *drv = priv; int ret = 0; int allow_unencrypted_eapol; int value; wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); if (!params->bssid && wpa_driver_wext_set_bssid(drv, NULL) < 0) ret = -1; if (wpa_driver_wext_set_mode(drv, params->mode) < 0) ret = -1; /* TODO: should consider getting wpa version and cipher/key_mgmt suites * from configuration, not from here, where only the selected suite is * available */ if (wpa_driver_wext_set_gen_ie(drv, params->wpa_ie, params->wpa_ie_len) < 0) ret = -1; if (params->wpa_ie == NULL || params->wpa_ie_len == 0) value = IW_AUTH_WPA_VERSION_DISABLED; else if (params->wpa_ie[0] == RSN_INFO_ELEM) value = IW_AUTH_WPA_VERSION_WPA2; else value = IW_AUTH_WPA_VERSION_WPA; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_WPA_VERSION, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->pairwise_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_PAIRWISE, value) < 0) ret = -1; value = wpa_driver_wext_cipher2wext(params->group_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_CIPHER_GROUP, value) < 0) ret = -1; value = wpa_driver_wext_keymgmt2wext(params->key_mgmt_suite); if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_KEY_MGMT, value) < 0) ret = -1; value = params->key_mgmt_suite != KEY_MGMT_NONE; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_PRIVACY_INVOKED, value) < 0) ret = -1; /* Allow unencrypted EAPOL messages even if pairwise keys are set when * not using WPA. IEEE 802.1X specifies that these frames are not * encrypted, but WPA encrypts them when pairwise keys are in use. */ if (params->key_mgmt_suite == KEY_MGMT_802_1X || params->key_mgmt_suite == KEY_MGMT_PSK) allow_unencrypted_eapol = 0; else allow_unencrypted_eapol = 1; if (wpa_driver_wext_set_auth_param(drv, IW_AUTH_RX_UNENCRYPTED_EAPOL, allow_unencrypted_eapol) < 0) ret = -1; if (params->freq && wpa_driver_wext_set_freq(drv, params->freq) < 0) ret = -1; if (wpa_driver_wext_set_ssid(drv, params->ssid, params->ssid_len) < 0) ret = -1; if (params->bssid && wpa_driver_wext_set_bssid(drv, params->bssid) < 0) ret = -1; return ret; }