コード例 #1
0
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;
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: driver_ti.c プロジェクト: alephzain/archos-gpl-gen8
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;
}
コード例 #4
0
ファイル: driver_ti.c プロジェクト: alephzain/archos-gpl-gen8
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;
}
コード例 #5
0
ファイル: driver_awext.c プロジェクト: kamejoko80/my_km233
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);
}
コード例 #6
0
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;
}
コード例 #7
0
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;
}