Thread: [zd1211-devs] Zydas wpa_supplicant 1_2_0_0 port to wpa_supplicant 0.4.7
Status: Beta
Brought to you by:
mayne
From: Remco <re...@d-...> - 2005-12-27 17:44:45
Attachments:
wpa_supplicant-0.4.7.diff
wpa_psk.conf
|
This is an attempt to port the Zydas wpa_supplicant 1_2_0_0 to wpa_supplicant 0.4.7. It's supposed to be a near copy of the original Zydas code and should behave the same. Therefore do NOT expect it to solve any possible issues with the original code. Changes I made: - I automatically/accidentilly changed the zydas naming to zd1211. - let 'zd1211_ioctl' and 'zd1211_set_param' use the same socket. This socket is only opened/closed during init/deinit and not every time these functions are called. - replaced the Zydas scan routine with the stock wireless extensions one. For a test I used: AP: FreeBSD 6.0 HostAP client: zd1211 with driver r48 and wpa_supplicant-0.4.7 + patch. I did NOT modify the driver in any way. (no changes in 'zd1205_init_card_setting' as was suggested on the list) The wpa_supplicant should be configured and built according its instructions. (most important copy defconfig to .config and set config options to your liking) The driver parameter is called zd1211 (wpa_supplicant -Dzd1211) and the config option in .config CONFIG_DRIVER_ZD1211. It works for me with a simple config like the attached 'wpa_psk.conf'. I hope its useful. |
From: Emanuel G. <gu...@it...> - 2005-12-27 18:49:36
|
Thank you very much Remco, a short test run on x86_64 shows that wpa_supplicant now works for 64 bit systems too (the old zydas driver did not do that, because wpa_supplicant was not 64 bit compatible) Again thanks! Emanuel BTW: the following (harmless, only for debugging) warning messages appear: cc -MMD -O2 -Wall -g -I. -I../utils -I../hostapd -DCONFIG_DRIVER_HOSTAP -DCONFIG_DRIVER_WEXT -DCONFIG_DRIVER_ATMEL -DCONFIG_DRIVER_ZD1211 -DCONFIG_DRIVER_WIRED -DEAP_TLS -DEAP_PEAP -DEAP_TTLS -DEAP_MD5 -DEAP_MSCHAPv2 -DEAP_GTC -DEAP_OTP -DEAP_LEAP -DEAP_TLV -DIEEE8021X_EAPOL -DEAP_TLS_FUNCS -DPKCS12_FUNCS -DCONFIG_SMARTCARD -DCONFIG_WIRELESS_EXTENSION -DCONFIG_CTRL_IFACE -c -o driver_zd1211.o driver_zd1211.c driver_zd1211.c: In function 'wpa_driver_zd1211_set_key': driver_zd1211.c:151: warning: format '%d' expects type 'int', but argument 7 has type 'size_t' driver_zd1211.c:151: warning: format '%d' expects type 'int', but argument 8 has type 'size_t' driver_zd1211.c:179: warning: pointer targets in passing argument 1 of '__builtin_strncpy' differ in signedness |
From: John H. <mis...@gm...> - 2005-12-28 11:14:35
|
YESSSSSSSSSSSs!!! I am on wpa network now, thanks!!!!! On 12/27/05, Emanuel Gull <gu...@it...> wrote: > Thank you very much Remco, > > a short test run on x86_64 shows that wpa_supplicant now works for 64 > bit systems too (the old zydas driver did not do that, because > wpa_supplicant was not 64 bit compatible) > > Again thanks! > > Emanuel > > BTW: the following (harmless, only for debugging) warning messages appear= : > > cc -MMD -O2 -Wall -g -I. -I../utils -I../hostapd -DCONFIG_DRIVER_HOSTAP > -DCONFIG_DRIVER_WEXT -DCONFIG_DRIVER_ATMEL -DCONFIG_DRIVER_ZD1211 > -DCONFIG_DRIVER_WIRED -DEAP_TLS -DEAP_PEAP -DEAP_TTLS -DEAP_MD5 > -DEAP_MSCHAPv2 -DEAP_GTC -DEAP_OTP -DEAP_LEAP -DEAP_TLV > -DIEEE8021X_EAPOL -DEAP_TLS_FUNCS -DPKCS12_FUNCS -DCONFIG_SMARTCARD > -DCONFIG_WIRELESS_EXTENSION -DCONFIG_CTRL_IFACE -c -o driver_zd1211.o > driver_zd1211.c > driver_zd1211.c: In function 'wpa_driver_zd1211_set_key': > driver_zd1211.c:151: warning: format '%d' expects type 'int', but > argument 7 has type 'size_t' > driver_zd1211.c:151: warning: format '%d' expects type 'int', but > argument 8 has type 'size_t' > driver_zd1211.c:179: warning: pointer targets in passing argument 1 of > '__builtin_strncpy' differ in signedness > > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi= les > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > _______________________________________________ > Zd1211-devs mailing list > Zd1...@li... > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > |
From: Mayne <zd1...@co...> - 2005-12-28 11:27:27
|
On Wed, 28 Dec 2005, John H. wrote: > YESSSSSSSSSSSs!!! > I am on wpa network now, thanks!!!!! Could you document the steps necessary to set up WPA? http://zd1211.ath.cx/wiki/WPAHowTo?action=edit Thanks! Regards |
From: John H. <mis...@gm...> - 2005-12-28 14:57:47
|
well, i tried, but the formatting got screwed up, so here's the howto i did= . Using zd1211 with WPA 1. Patch wpa_supplicant 4.7 source with below diff, by doing patch -p0 < file.diff from above source tree. 2. Copy defconfig to .config in wpa_supplicant dir, and make sure you uncomment the # to make it compiled the zd1211 driver, then compile with "make." 3. In /etc/wpa_supplicant.conf(which you can get from src dir), you can set ap_scan=3D1 and eapol_version=3D1, near bottom your config for that SSID can be something like network=3D{ ssid=3D"myssid" scan_ssid=3D1 pairwise=3DTKIP #psk=3D"myasciipass" psk=3D0efae6a466cfc69fd992034d81543db538dac17dfbb93baa49c9a75232d3b700 group=3DTKIP key_mgmt=3DWPA-PSK proto=3DWPA } --- you get psk from running wpa_passphrase 4. Modprobe zd1211 5. ifconfig wlan0 up 6. You may or may not have to set SSID with 'iwconfig wlan0 essid myssid' 7. Run the following command from the dir wpa_supplicant is in, which will run it in the background ./wpa_supplicant -Bw -i wlan0 -c /etc/wpa_supplicant.conf -D zd1211 8. If DHCP, run dhclient wlan0 Ta daa!!! diff -Nur wpa_supplicant-0.4.7/defconfig wpa_supplicant-0.4.7.new/defconfig --- wpa_supplicant-0.4.7/defconfig=092005-09-24 20:30:43.000000000 +0200 +++ wpa_supplicant-0.4.7.new/defconfig=092005-12-26 19:18:14.000000000 +010= 0 @@ -68,6 +68,9 @@ # Driver interface for Intel ipw2100/2200 driver #CONFIG_DRIVER_IPW=3Dy +# Driver interface for Zydas zd1211 driver +#CONFIG_DRIVER_ZD1211=3Dy + # Driver interface for generic Linux wireless extensions CONFIG_DRIVER_WEXT=3Dy diff -Nur wpa_supplicant-0.4.7/drivers.c wpa_supplicant-0.4.7.new/drivers.c --- wpa_supplicant-0.4.7/drivers.c=092005-02-20 01:15:54.000000000 +0100 +++ wpa_supplicant-0.4.7.new/drivers.c=092005-12-26 19:19:16.000000000 +010= 0 @@ -55,6 +55,9 @@ #ifdef CONFIG_DRIVER_TEST extern struct wpa_driver_ops wpa_driver_test_ops; /* driver_test.c */ #endif /* CONFIG_DRIVER_TEST */ +#ifdef CONFIG_DRIVER_ZD1211 +extern struct wpa_driver_ops wpa_driver_zd1211_ops; /* driver_zd1211.c */ +#endif /* CONFIG_DRIVER_ZD1211 */ struct wpa_driver_ops *wpa_supplicant_drivers[] =3D @@ -98,5 +101,8 @@ #ifdef CONFIG_DRIVER_TEST =09&wpa_driver_test_ops, #endif /* CONFIG_DRIVER_TEST */ +#ifdef CONFIG_DRIVER_ZD1211 +=09&wpa_driver_zd1211_ops, +#endif /* CONFIG_DRIVER_ZD1211 */ =09NULL }; diff -Nur wpa_supplicant-0.4.7/driver_zd1211.c wpa_supplicant-0.4.7.new/driver_zd1211.c --- wpa_supplicant-0.4.7/driver_zd1211.c=091970-01-01 01:00:00.000000000 +0= 100 +++ wpa_supplicant-0.4.7.new/driver_zd1211.c=092005-12-27 16:28:46.00000000= 0 +0100 @@ -0,0 +1,408 @@ +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <sys/ioctl.h> +#include <errno.h> + +#include "common.h" +#include "driver.h" +#include "driver_wext.h" +#include "eloop.h" +#include "wireless_copy.h" +#include "wpa_supplicant.h" + +#include "zd1211_common.h" + + +struct wpa_driver_zd1211_data { +=09void *ctx; +=09void *wext; /* private data for driver_wext */ +=09char ifname[IFNAMSIZ + 1]; +=09int sock; +}; + + +static int zd1211_ioctl(struct wpa_driver_zd1211_data *zd1211_drv, struct zd1211_wlan_param *param, int len, int show_err) { +=09struct iwreq iwr; + +=09memset(&iwr, 0, sizeof(iwr)); +=09strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); +=09iwr.u.data.pointer =3D (caddr_t) param; +=09iwr.u.data.length =3D len; + +=09if (ioctl(zd1211_drv->sock, ZD_IOCTL_WPA, &iwr) < 0) { +=09=09int ret; + +=09=09ret =3D errno; +=09=09if (show_err) +=09=09=09perror("ioctl[ZD_IOCTL_WPA]"); +=09=09return ret; +=09} + +=09return 0; +} + + +static int zd1211_set_param(struct wpa_driver_zd1211_data *zd1211_drv, int op, int arg, int show_err) { +=09struct iwreq iwr; +=09int *i, ret =3D 0; + +=09memset(&iwr, 0, sizeof(iwr)); +=09strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); +=09i =3D (int *) iwr.u.name; +=09*i++ =3D op; +=09*i++ =3D arg; + +=09if (ioctl(zd1211_drv->sock, ZD_IOCTL_PARAM, &iwr) < 0) { +=09=09perror("ioctl[ZD_IOCTL_PARAM]"); +=09=09ret =3D -1; +=09} + +=09return ret; +} + + +static int wpa_driver_zd1211_get_scan_results(void *priv, struct wpa_scan_result *results, size_t max_size) { +=09struct wpa_driver_zd1211_data *zd1211_drv; + +=09zd1211_drv =3D priv; +=09return wpa_driver_wext_get_scan_results(zd1211_drv->wext, results, max_= size); +} + + +static int wpa_driver_zd1211_get_bssid(void *priv, u8 *bssid) { +=09struct wpa_driver_zd1211_data *zd1211_drv; + +=09zd1211_drv =3D priv; +=09return wpa_driver_wext_get_bssid(zd1211_drv->wext, bssid); +} + + +static int wpa_driver_zd1211_get_ssid(void *priv, u8 *ssid) { +=09struct wpa_driver_zd1211_data *zd1211_drv; + +=09zd1211_drv =3D priv; +=09return wpa_driver_wext_get_ssid(zd1211_drv->wext, ssid); +} + + +static int wpa_driver_zd1211_set_auth_alg(void *priv, int auth_alg) { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09int algs =3D 0; + +=09if (auth_alg & AUTH_ALG_OPEN_SYSTEM) +=09=09algs =3D 0; +=09if (auth_alg & AUTH_ALG_SHARED_KEY) +=09=09algs =3D 1; + +=09return zd1211_set_param(zd1211_drv, ZD_PARAM_AUTH_ALGS, algs, 1); +} + + +static int wpa_driver_zd1211_set_countermeasures(void *priv, int enabled) = { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; + +=09/* Enable the countermeasure */ +=09wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); +=09return zd1211_set_param(zd1211_drv, ZD_PARAM_COUNTERMEASURES, enabled, = 1); +} + + +static int wpa_driver_zd1211_set_drop_unencrypted(void *priv, int enabled)= { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; + +=09/* Enable the countermeasure */ +=09wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); +=09return zd1211_set_param(zd1211_drv, ZD_PARAM_DROPUNENCRYPTED, enabled, = 1); +} + + +static int wpa_driver_zd1211_set_key(void *priv, wpa_alg alg, +=09=09=09=09=09const u8 *addr, int key_idx, +=09=09=09=09=09int set_tx, const u8 *seq, size_t seq_len, +=09=09=09=09=09const u8 *key, size_t key_len) { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09struct zd1211_wlan_param *param; +=09u8 *buf; +=09size_t blen; +=09int ret =3D 0; +=09char *alg_name; + +=09switch (alg) { +=09=09case WPA_ALG_NONE: +=09=09=09alg_name =3D "NONE"; +=09=09=09break; +=09=09case WPA_ALG_WEP: +=09=09=09alg_name =3D "WEP"; +=09=09=09break; +=09=09case WPA_ALG_TKIP: +=09=09=09alg_name =3D "TKIP"; +=09=09=09break; +=09=09case WPA_ALG_CCMP: +=09=09=09alg_name =3D "CCMP"; +=09=09=09break; +=09=09default: +=09=09=09return -1; +=09} + +=09wpa_printf(MSG_DEBUG, "%s: alg=3D%s key_idx=3D%d set_tx=3D%d seq_len=3D= %d " +=09=09 "key_len=3D%d", __FUNCTION__, alg_name, key_idx, set_tx, +=09=09 seq_len, key_len); + +=09if (seq_len > 8) +=09=09return -2; + +=09blen =3D sizeof(*param) + key_len; +=09buf =3D malloc(blen); +=09if (buf =3D=3D NULL) +=09=09return -1; +=09memset(buf, 0, blen); + +=09param =3D (struct zd1211_wlan_param *) buf; +=09param->cmd =3D ZD_CMD_SET_ENCRYPT_KEY; +=09/* TODO: In theory, STA in client mode can use five keys; four default +=09 * keys for receiving (with keyidx 0..3) and one individual key for +=09 * both transmitting and receiving (keyidx 0) _unicast_ packets. Now, +=09 * keyidx 0 is reserved for this unicast use and default keys can only +=09 * use keyidx 1..3 (i.e., default key with keyidx 0 is not supported). +=09 * This should be fine for more or less all cases, but for completeness +=09 * sake, the driver could be enhanced to support the missing key. */ +#if 0 +=09if (addr =3D=3D NULL) +=09=09memset(param->sta_addr, 0xff, ETH_ALEN); +=09else +=09=09memcpy(param->sta_addr, addr, ETH_ALEN); +#else +=09memset(param->sta_addr, 0xff, ETH_ALEN); +#endif +=09strncpy(param->u.crypt.alg, alg_name, ZD_CRYPT_ALG_NAME_LEN); +=09param->u.crypt.flags =3D set_tx ? ZD_FLAG_SET_TX_KEY : 0; +=09param->u.crypt.idx =3D key_idx; +=09memcpy(param->u.crypt.seq, seq, seq_len); +=09param->u.crypt.key_len =3D key_len; +=09memcpy((u8 *) param->u.crypt.key, key, key_len); + +=09/* Dump key context */ +=09if(alg =3D=3D WPA_ALG_TKIP) { +=09=09int ii; + +=09=09wpa_printf(MSG_DEBUG, "Key Context:"); +=09=09for(ii =3D 0; ii < key_len; ) { +=09=09=09printf("0x%02x ", key[ii]); + +=09=09=09if((++ii % 16) =3D=3D 0) +=09=09=09=09printf("\n"); +=09=09} + +=09=09printf("\n"); +=09} + +=09if (zd1211_ioctl(zd1211_drv, param, blen, 1)) { +=09=09wpa_printf(MSG_WARNING, "Failed to set encryption."); +=09=09//show_set_key_error(param); +=09=09ret =3D -1; +=09} +=09free(buf); + +=09return ret; +} + + +static int wpa_driver_zd1211_set_wpa_ie(struct wpa_driver_zd1211_data *zd1211_drv, const u8 *wpa_ie, size_t wpa_ie_len) { +=09int res; +=09struct zd1211_wlan_param *param; +=09size_t blen =3D ZD_GENERIC_ELEMENT_HDR_LEN + wpa_ie_len; + +=09if (blen < sizeof(*param)) +=09=09blen =3D sizeof(*param); + +=09param =3D (struct zd1211_wlan_param *) malloc(blen); +=09if (param =3D=3D NULL) +=09=09return -1; + +=09memset(param, 0, blen); +=09param->cmd =3D ZD_CMD_SET_GENERIC_ELEMENT; +=09param->u.generic_elem.len =3D wpa_ie_len; +=09memcpy(param->u.generic_elem.data, wpa_ie, wpa_ie_len); +=09res =3D zd1211_ioctl(zd1211_drv, param, blen, 1); + +=09free(param); + +=09return res; +} + + +static int wpa_driver_zd1211_set_wpa(void *priv, int enabled) { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09int ret =3D 0; + +=09wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); + +=09if (!enabled && wpa_driver_zd1211_set_wpa_ie(zd1211_drv, NULL, 0) < 0) +=09=09ret =3D -1; +=09if (zd1211_set_param(zd1211_drv, ZD_PARAM_ROAMING, enabled, 1) < 0) +=09=09ret =3D -1; +=09if (zd1211_set_param(zd1211_drv, ZD_PARAM_PRIVACY, enabled, 1) < 0) +=09=09ret =3D -1; +=09if (zd1211_set_param(zd1211_drv, ZD_PARAM_WPA, enabled, 1) < 0) +=09=09ret =3D -1; + +=09return ret; +} + + +static int wpa_driver_zd1211_associate(void *priv, struct wpa_driver_associate_params *params) { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09int ret =3D 0; + +=09wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); + +=09/* Because there might be the case, two or more APs with the same +=09 * SSID, in order to identify them, we need to set the BSSID. */ +=09if (wpa_driver_zd1211_set_wpa_ie(zd1211_drv, params->wpa_ie, params->wpa_ie_len) < 0) +=09=09ret =3D -1; +=09if (wpa_driver_wext_set_ssid(zd1211_drv->wext, params->ssid, params->ssid_len) < 0) +=09=09ret =3D -1; + +=09// Mark for test +=09//if (wpa_driver_wext_set_bssid(ifname, bssid) < 0) +=09//=09ret =3D -1; + +#if 0 +=09/* Allow unencrypted EAPOL messages even if pairwise keys are set when +=09 * not using WPA. IEEE 802.1X specifies that these frames are not +=09 * encrypted, but WPA encrypts them when pairwise keys are in use. */ +=09if (key_mgmt_suite =3D=3D KEY_MGMT_802_1X || +=09 key_mgmt_suite =3D=3D KEY_MGMT_PSK) +=09=09allow_unencrypted_eapol =3D 0; +=09else +=09=09allow_unencrypted_eapol =3D 1; +=09 +=09if (prism2param(ifname, PRISM2_PARAM_IEEE_802_1X, +=09=09=09allow_unencrypted_eapol) < 0) { +=09=09wpa_printf(MSG_DEBUG, "hostap: Failed to configure " +=09=09=09 "ieee_802_1x param"); +=09=09/* Ignore this error.. driver_hostap.c can also be used with +=09=09 * other drivers that do not support this prism2_param. */ +=09} +#endif + +=09return ret; +} + + +static int wpa_driver_zd1211_deauthenticate(void *priv, const u8 *addr, int reason_code) { +=09struct zd1211_wlan_param *param; +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09int blen; + int ret; + +=09wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); + +=09blen =3D sizeof(*param); +=09param =3D (struct zd1211_wlan_param *) malloc(blen); +=09if (param =3D=3D NULL) +=09=09return -1; + +=09memset(param, 0, blen); +=09param->cmd =3D ZD_CMD_SET_MLME; +=09param->u.mlme.cmd =3D MLME_STA_DEAUTH; +=09param->u.mlme.reason_code =3D reason_code; +=09memcpy(param->sta_addr, addr, ETH_ALEN); +=09ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); + usleep(100000); + free(param); + return ret; +} + + +static int wpa_driver_zd1211_disassociate(void *priv, const u8 *addr, int reason_code) { +=09struct zd1211_wlan_param *param; +=09struct wpa_driver_zd1211_data *zd1211_drv =3D priv; +=09int blen; + int ret; + +=09wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); + +=09blen =3D sizeof(*param); +=09param =3D (struct zd1211_wlan_param *) malloc(blen); +=09if (param =3D=3D NULL) +=09=09return -1; + +=09memset(param, 0, blen); +=09param->cmd =3D ZD_CMD_SET_MLME; +=09param->u.mlme.cmd =3D MLME_STA_DISASSOC; +=09param->u.mlme.reason_code =3D reason_code; +=09memcpy(param->sta_addr, addr, ETH_ALEN); +=09ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); + free(param); + return ret; +} + + +static int wpa_driver_zd1211_scan(void *priv, const u8 *ssid, size_t ssid_len) { +=09struct wpa_driver_zd1211_data *zd1211_drv; + +=09zd1211_drv =3D priv; +=09return wpa_driver_wext_scan(zd1211_drv->wext, ssid, ssid_len); +} + + +static void * wpa_driver_zd1211_init(void *ctx, const char *ifname) { +=09struct wpa_driver_zd1211_data *zd1211_drv; + +=09zd1211_drv =3D malloc(sizeof(*zd1211_drv)); +=09if (zd1211_drv =3D=3D NULL) +=09=09return NULL; +=09memset(zd1211_drv, 0, sizeof(*zd1211_drv)); + +=09zd1211_drv->wext =3D wpa_driver_wext_init(ctx, ifname); +=09if (zd1211_drv->wext =3D=3D NULL) +=09=09goto exit_no_wext; + +=09zd1211_drv->ctx =3D ctx; +=09strncpy(zd1211_drv->ifname, ifname, sizeof(zd1211_drv->ifname)); + +=09zd1211_drv->sock =3D socket(PF_INET, SOCK_DGRAM, 0); +=09if (zd1211_drv->sock < 0) +=09=09goto exit_no_socket; + +=09return zd1211_drv; + +exit_no_socket: +=09wpa_driver_wext_deinit(zd1211_drv->wext); +exit_no_wext: +=09free(zd1211_drv); +=09return NULL; +} + + +static void wpa_driver_zd1211_deinit(void *ctx) { +=09struct wpa_driver_zd1211_data *zd1211_drv =3D ctx; + +=09wpa_driver_wext_deinit(zd1211_drv->wext); +=09close(zd1211_drv->sock); +=09free(zd1211_drv); +} + + +struct wpa_driver_ops wpa_driver_zd1211_ops =3D { +=09.name =3D "zd1211", +=09.desc =3D "Zydas zd1211 drivers", +=09.init=09=09=09=3D wpa_driver_zd1211_init, +=09.deinit=09=09=09=3D wpa_driver_zd1211_deinit, +=09.associate=09=09=3D wpa_driver_zd1211_associate, +=09.deauthenticate=09=09=3D wpa_driver_zd1211_deauthenticate, +=09.disassociate=09=09=3D wpa_driver_zd1211_disassociate, +=09.get_bssid=09=09=3D wpa_driver_zd1211_get_bssid, +=09.get_scan_results=09=3D wpa_driver_zd1211_get_scan_results, +=09.get_ssid=09=09=3D wpa_driver_zd1211_get_ssid, +//=09.get_capa=09=09=3D wpa_driver_zd1211_get_capa, +=09.scan=09=09=09=3D wpa_driver_zd1211_scan, +=09.set_auth_alg=09=09=3D wpa_driver_zd1211_set_auth_alg, +=09.set_countermeasures=09=3D wpa_driver_zd1211_set_countermeasures, +=09.set_drop_unencrypted=09=3D wpa_driver_zd1211_set_drop_unencrypted, +=09.set_key=09=09=3D wpa_driver_zd1211_set_key, +=09.set_wpa=09=09=3D wpa_driver_zd1211_set_wpa, +}; diff -Nur wpa_supplicant-0.4.7/Makefile wpa_supplicant-0.4.7.new/Makefile --- wpa_supplicant-0.4.7/Makefile=092005-11-21 02:42:12.000000000 +0100 +++ wpa_supplicant-0.4.7.new/Makefile=092005-12-26 19:17:14.000000000 +0100 @@ -107,6 +107,12 @@ CONFIG_WIRELESS_EXTENSION=3Dy endif +ifdef CONFIG_DRIVER_ZD1211 +CFLAGS +=3D -DCONFIG_DRIVER_ZD1211 +OBJS_d +=3D driver_zd1211.o +CONFIG_WIRELESS_EXTENSION=3Dy +endif + ifdef CONFIG_DRIVER_BSD CFLAGS +=3D -DCONFIG_DRIVER_BSD OBJS_d +=3D driver_bsd.o diff -Nur wpa_supplicant-0.4.7/zd1211_common.h wpa_supplicant-0.4.7.new/zd1211_common.h --- wpa_supplicant-0.4.7/zd1211_common.h=091970-01-01 01:00:00.000000000 +0= 100 +++ wpa_supplicant-0.4.7.new/zd1211_common.h=092005-12-27 16:00:36.00000000= 0 +0100 @@ -0,0 +1,68 @@ +#ifndef ZD1211_COMMON_H +#define ZD1211_COMMON_H + + +#define ZD_IOCTL_WPA=09=09=09(SIOCDEVPRIVATE + 1) +#define ZD_IOCTL_PARAM=09=09=09(SIOCDEVPRIVATE + 2) + +#define ZD_PARAM_ROAMING=09=090x0001 +#define ZD_PARAM_PRIVACY=09=090x0002 +#define ZD_PARAM_WPA=09=09=090x0003 +#define ZD_PARAM_COUNTERMEASURES=090x0004 +#define ZD_PARAM_DROPUNENCRYPTED=090x0005 +#define ZD_PARAM_AUTH_ALGS=09=090x0006 + +#define ZD_CMD_SET_ENCRYPT_KEY=09=090x0001 +#define ZD_CMD_SET_MLME=09=09=090x0002 +//#define ZD_CMD_SCAN_REQ=09=09=090x0003 +#define ZD_CMD_SET_GENERIC_ELEMENT=090x0004 + +#define ZD_FLAG_SET_TX_KEY 0x0001 + +#define ZD_GENERIC_ELEMENT_HDR_LEN \ +((int) (&((struct zd1211_wlan_param *) 0)->u.generic_elem.data)) + +#define ZD_CRYPT_ALG_NAME_LEN=09=0916 +#define ZD_MAX_KEY_SIZE=09=09=0932 +#define ZD_MAX_GENERIC_SIZE=09=0964 + +/* structure definition */ + +struct zd1211_wlan_param { +=09u32 cmd; +=09u8 sta_addr[ETH_ALEN]; +=09union { +=09=09struct { +=09=09=09u8 alg[ZD_CRYPT_ALG_NAME_LEN]; +=09=09=09u32 flags; +=09=09=09u32 err; +=09=09=09u8 idx; +=09=09=09u8 seq[8]; /* sequence counter (set: RX, get: TX) */ +=09=09=09u16 key_len; +=09=09=09u8 key[ZD_MAX_KEY_SIZE]; +=09=09} crypt; +/* +=09=09struct { +=09=09=09u32 flags_and; +=09=09=09u32 flags_or; +=09=09} set_flags_sta; +*/ +=09=09struct { +=09=09=09u8 len; +=09=09=09u8 data[ZD_MAX_GENERIC_SIZE]; +=09=09} generic_elem; +=09=09struct { +#define MLME_STA_DEAUTH 0 +#define MLME_STA_DISASSOC 1 +=09=09=09u16 cmd; +=09=09=09u16 reason_code; +=09=09} mlme; +=09=09struct { +=09=09=09u8 ssid_len; +=09=09=09u8 ssid[32]; +=09=09} scan_req; +=09} u; +}; + + +#endif On 12/28/05, Mayne <zd1...@co...> wrote: > On Wed, 28 Dec 2005, John H. wrote: > > > YESSSSSSSSSSSs!!! > > I am on wpa network now, thanks!!!!! > > Could you document the steps necessary to set up WPA? > http://zd1211.ath.cx/wiki/WPAHowTo?action=3Dedit > > Thanks! > > Regards > > > ------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. Do you grep through log fi= les > for problems? Stop! Download the new AJAX search engine that makes > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > _______________________________________________ > Zd1211-devs mailing list > Zd1...@li... > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > |
From: John H. <mis...@gm...> - 2005-12-29 17:23:48
|
here is the script I use now. # # bring up the wireless nic # ifconfig wlan0 down rmmod zd1211 ifconfig wlan0 up # # connect to the node using wpa # /usr/src/wpasupplicant//wpa_supplicant -Bw -i wlan0 -c /etc/wpa_supplicant.conf -D zd1211 # # get us an ip address # dhclient wlan0 On 12/28/05, John H. <mis...@gm...> wrote: > well, i tried, but the formatting got screwed up, so here's the howto i d= id. > > > Using zd1211 with WPA > > 1. Patch wpa_supplicant 4.7 source with below diff, by doing patch -p0 > < file.diff from above source tree. > 2. Copy defconfig to .config in wpa_supplicant dir, and make sure you > uncomment the # to make it compiled the zd1211 driver, then compile > with "make." > 3. In /etc/wpa_supplicant.conf(which you can get from src dir), you > can set ap_scan=3D1 and eapol_version=3D1, near bottom your config for > that SSID can be something like > > network=3D{ > ssid=3D"myssid" > scan_ssid=3D1 > pairwise=3DTKIP > #psk=3D"myasciipass" > psk=3D0efae6a466cfc69fd992034d81543db538dac17dfbb93baa49c9a75232d3b700 > group=3DTKIP > key_mgmt=3DWPA-PSK > proto=3DWPA > } > --- you get psk from running wpa_passphrase > > 4. Modprobe zd1211 > 5. ifconfig wlan0 up > 6. You may or may not have to set SSID with 'iwconfig wlan0 essid myssid' > 7. Run the following command from the dir wpa_supplicant is in, which > will run it in the background > ./wpa_supplicant -Bw -i wlan0 -c /etc/wpa_supplicant.conf -D zd1211 > 8. If DHCP, run dhclient wlan0 > > Ta daa!!! > > > > > > > diff -Nur wpa_supplicant-0.4.7/defconfig wpa_supplicant-0.4.7.new/defconf= ig > --- wpa_supplicant-0.4.7/defconfig 2005-09-24 20:30:43.000000000 +02= 00 > +++ wpa_supplicant-0.4.7.new/defconfig 2005-12-26 19:18:14.000000000 +01= 00 > @@ -68,6 +68,9 @@ > # Driver interface for Intel ipw2100/2200 driver > #CONFIG_DRIVER_IPW=3Dy > > +# Driver interface for Zydas zd1211 driver > +#CONFIG_DRIVER_ZD1211=3Dy > + > # Driver interface for generic Linux wireless extensions > CONFIG_DRIVER_WEXT=3Dy > > diff -Nur wpa_supplicant-0.4.7/drivers.c wpa_supplicant-0.4.7.new/drivers= .c > --- wpa_supplicant-0.4.7/drivers.c 2005-02-20 01:15:54.000000000 +01= 00 > +++ wpa_supplicant-0.4.7.new/drivers.c 2005-12-26 19:19:16.000000000 +01= 00 > @@ -55,6 +55,9 @@ > #ifdef CONFIG_DRIVER_TEST > extern struct wpa_driver_ops wpa_driver_test_ops; /* driver_test.c */ > #endif /* CONFIG_DRIVER_TEST */ > +#ifdef CONFIG_DRIVER_ZD1211 > +extern struct wpa_driver_ops wpa_driver_zd1211_ops; /* driver_zd1211.c *= / > +#endif /* CONFIG_DRIVER_ZD1211 */ > > > struct wpa_driver_ops *wpa_supplicant_drivers[] =3D > @@ -98,5 +101,8 @@ > #ifdef CONFIG_DRIVER_TEST > &wpa_driver_test_ops, > #endif /* CONFIG_DRIVER_TEST */ > +#ifdef CONFIG_DRIVER_ZD1211 > + &wpa_driver_zd1211_ops, > +#endif /* CONFIG_DRIVER_ZD1211 */ > NULL > }; > diff -Nur wpa_supplicant-0.4.7/driver_zd1211.c > wpa_supplicant-0.4.7.new/driver_zd1211.c > --- wpa_supplicant-0.4.7/driver_zd1211.c 1970-01-01 01:00:00.00000= 0000 +0100 > +++ wpa_supplicant-0.4.7.new/driver_zd1211.c 2005-12-27 16:28:46.00000= 0000 +0100 > @@ -0,0 +1,408 @@ > +#include <stdlib.h> > +#include <stdio.h> > +#include <unistd.h> > +#include <string.h> > +#include <sys/ioctl.h> > +#include <errno.h> > + > +#include "common.h" > +#include "driver.h" > +#include "driver_wext.h" > +#include "eloop.h" > +#include "wireless_copy.h" > +#include "wpa_supplicant.h" > + > +#include "zd1211_common.h" > + > + > +struct wpa_driver_zd1211_data { > + void *ctx; > + void *wext; /* private data for driver_wext */ > + char ifname[IFNAMSIZ + 1]; > + int sock; > +}; > + > + > +static int zd1211_ioctl(struct wpa_driver_zd1211_data *zd1211_drv, > struct zd1211_wlan_param *param, int len, int show_err) { > + struct iwreq iwr; > + > + memset(&iwr, 0, sizeof(iwr)); > + strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); > + iwr.u.data.pointer =3D (caddr_t) param; > + iwr.u.data.length =3D len; > + > + if (ioctl(zd1211_drv->sock, ZD_IOCTL_WPA, &iwr) < 0) { > + int ret; > + > + ret =3D errno; > + if (show_err) > + perror("ioctl[ZD_IOCTL_WPA]"); > + return ret; > + } > + > + return 0; > +} > + > + > +static int zd1211_set_param(struct wpa_driver_zd1211_data > *zd1211_drv, int op, int arg, int show_err) { > + struct iwreq iwr; > + int *i, ret =3D 0; > + > + memset(&iwr, 0, sizeof(iwr)); > + strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); > + i =3D (int *) iwr.u.name; > + *i++ =3D op; > + *i++ =3D arg; > + > + if (ioctl(zd1211_drv->sock, ZD_IOCTL_PARAM, &iwr) < 0) { > + perror("ioctl[ZD_IOCTL_PARAM]"); > + ret =3D -1; > + } > + > + return ret; > +} > + > + > +static int wpa_driver_zd1211_get_scan_results(void *priv, struct > wpa_scan_result *results, size_t max_size) { > + struct wpa_driver_zd1211_data *zd1211_drv; > + > + zd1211_drv =3D priv; > + return wpa_driver_wext_get_scan_results(zd1211_drv->wext, results= , max_size); > +} > + > + > +static int wpa_driver_zd1211_get_bssid(void *priv, u8 *bssid) { > + struct wpa_driver_zd1211_data *zd1211_drv; > + > + zd1211_drv =3D priv; > + return wpa_driver_wext_get_bssid(zd1211_drv->wext, bssid); > +} > + > + > +static int wpa_driver_zd1211_get_ssid(void *priv, u8 *ssid) { > + struct wpa_driver_zd1211_data *zd1211_drv; > + > + zd1211_drv =3D priv; > + return wpa_driver_wext_get_ssid(zd1211_drv->wext, ssid); > +} > + > + > +static int wpa_driver_zd1211_set_auth_alg(void *priv, int auth_alg) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + int algs =3D 0; > + > + if (auth_alg & AUTH_ALG_OPEN_SYSTEM) > + algs =3D 0; > + if (auth_alg & AUTH_ALG_SHARED_KEY) > + algs =3D 1; > + > + return zd1211_set_param(zd1211_drv, ZD_PARAM_AUTH_ALGS, algs, 1); > +} > + > + > +static int wpa_driver_zd1211_set_countermeasures(void *priv, int enabled= ) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + > + /* Enable the countermeasure */ > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); > + return zd1211_set_param(zd1211_drv, ZD_PARAM_COUNTERMEASURES, ena= bled, 1); > +} > + > + > +static int wpa_driver_zd1211_set_drop_unencrypted(void *priv, int enable= d) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + > + /* Enable the countermeasure */ > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); > + return zd1211_set_param(zd1211_drv, ZD_PARAM_DROPUNENCRYPTED, ena= bled, 1); > +} > + > + > +static int wpa_driver_zd1211_set_key(void *priv, wpa_alg alg, > + const u8 *addr, int key_idx, > + int set_tx, const u8 *seq, size_t= seq_len, > + const u8 *key, size_t key_len) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + struct zd1211_wlan_param *param; > + u8 *buf; > + size_t blen; > + int ret =3D 0; > + char *alg_name; > + > + switch (alg) { > + case WPA_ALG_NONE: > + alg_name =3D "NONE"; > + break; > + case WPA_ALG_WEP: > + alg_name =3D "WEP"; > + break; > + case WPA_ALG_TKIP: > + alg_name =3D "TKIP"; > + break; > + case WPA_ALG_CCMP: > + alg_name =3D "CCMP"; > + break; > + default: > + return -1; > + } > + > + wpa_printf(MSG_DEBUG, "%s: alg=3D%s key_idx=3D%d set_tx=3D%d seq_= len=3D%d " > + "key_len=3D%d", __FUNCTION__, alg_name, key_idx, set_t= x, > + seq_len, key_len); > + > + if (seq_len > 8) > + return -2; > + > + blen =3D sizeof(*param) + key_len; > + buf =3D malloc(blen); > + if (buf =3D=3D NULL) > + return -1; > + memset(buf, 0, blen); > + > + param =3D (struct zd1211_wlan_param *) buf; > + param->cmd =3D ZD_CMD_SET_ENCRYPT_KEY; > + /* TODO: In theory, STA in client mode can use five keys; four de= fault > + * keys for receiving (with keyidx 0..3) and one individual key f= or > + * both transmitting and receiving (keyidx 0) _unicast_ packets. = Now, > + * keyidx 0 is reserved for this unicast use and default keys can= only > + * use keyidx 1..3 (i.e., default key with keyidx 0 is not suppor= ted). > + * This should be fine for more or less all cases, but for comple= teness > + * sake, the driver could be enhanced to support the missing key.= */ > +#if 0 > + if (addr =3D=3D NULL) > + memset(param->sta_addr, 0xff, ETH_ALEN); > + else > + memcpy(param->sta_addr, addr, ETH_ALEN); > +#else > + memset(param->sta_addr, 0xff, ETH_ALEN); > +#endif > + strncpy(param->u.crypt.alg, alg_name, ZD_CRYPT_ALG_NAME_LEN); > + param->u.crypt.flags =3D set_tx ? ZD_FLAG_SET_TX_KEY : 0; > + param->u.crypt.idx =3D key_idx; > + memcpy(param->u.crypt.seq, seq, seq_len); > + param->u.crypt.key_len =3D key_len; > + memcpy((u8 *) param->u.crypt.key, key, key_len); > + > + /* Dump key context */ > + if(alg =3D=3D WPA_ALG_TKIP) { > + int ii; > + > + wpa_printf(MSG_DEBUG, "Key Context:"); > + for(ii =3D 0; ii < key_len; ) { > + printf("0x%02x ", key[ii]); > + > + if((++ii % 16) =3D=3D 0) > + printf("\n"); > + } > + > + printf("\n"); > + } > + > + if (zd1211_ioctl(zd1211_drv, param, blen, 1)) { > + wpa_printf(MSG_WARNING, "Failed to set encryption."); > + //show_set_key_error(param); > + ret =3D -1; > + } > + free(buf); > + > + return ret; > +} > + > + > +static int wpa_driver_zd1211_set_wpa_ie(struct wpa_driver_zd1211_data > *zd1211_drv, const u8 *wpa_ie, size_t wpa_ie_len) { > + int res; > + struct zd1211_wlan_param *param; > + size_t blen =3D ZD_GENERIC_ELEMENT_HDR_LEN + wpa_ie_len; > + > + if (blen < sizeof(*param)) > + blen =3D sizeof(*param); > + > + param =3D (struct zd1211_wlan_param *) malloc(blen); > + if (param =3D=3D NULL) > + return -1; > + > + memset(param, 0, blen); > + param->cmd =3D ZD_CMD_SET_GENERIC_ELEMENT; > + param->u.generic_elem.len =3D wpa_ie_len; > + memcpy(param->u.generic_elem.data, wpa_ie, wpa_ie_len); > + res =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > + > + free(param); > + > + return res; > +} > + > + > +static int wpa_driver_zd1211_set_wpa(void *priv, int enabled) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + int ret =3D 0; > + > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled); > + > + if (!enabled && wpa_driver_zd1211_set_wpa_ie(zd1211_drv, NULL, 0)= < 0) > + ret =3D -1; > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_ROAMING, enabled, 1) < = 0) > + ret =3D -1; > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_PRIVACY, enabled, 1) < = 0) > + ret =3D -1; > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_WPA, enabled, 1) < 0) > + ret =3D -1; > + > + return ret; > +} > + > + > +static int wpa_driver_zd1211_associate(void *priv, struct > wpa_driver_associate_params *params) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + int ret =3D 0; > + > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > + > + /* Because there might be the case, two or more APs with the same > + * SSID, in order to identify them, we need to set the BSSID. */ > + if (wpa_driver_zd1211_set_wpa_ie(zd1211_drv, params->wpa_ie, > params->wpa_ie_len) < 0) > + ret =3D -1; > + if (wpa_driver_wext_set_ssid(zd1211_drv->wext, params->ssid, > params->ssid_len) < 0) > + ret =3D -1; > + > + // Mark for test > + //if (wpa_driver_wext_set_bssid(ifname, bssid) < 0) > + // ret =3D -1; > + > +#if 0 > + /* 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 (key_mgmt_suite =3D=3D KEY_MGMT_802_1X || > + key_mgmt_suite =3D=3D KEY_MGMT_PSK) > + allow_unencrypted_eapol =3D 0; > + else > + allow_unencrypted_eapol =3D 1; > + > + if (prism2param(ifname, 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 w= ith > + * other drivers that do not support this prism2_param. *= / > + } > +#endif > + > + return ret; > +} > + > + > +static int wpa_driver_zd1211_deauthenticate(void *priv, const u8 > *addr, int reason_code) { > + struct zd1211_wlan_param *param; > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + int blen; > + int ret; > + > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > + > + blen =3D sizeof(*param); > + param =3D (struct zd1211_wlan_param *) malloc(blen); > + if (param =3D=3D NULL) > + return -1; > + > + memset(param, 0, blen); > + param->cmd =3D ZD_CMD_SET_MLME; > + param->u.mlme.cmd =3D MLME_STA_DEAUTH; > + param->u.mlme.reason_code =3D reason_code; > + memcpy(param->sta_addr, addr, ETH_ALEN); > + ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > + usleep(100000); > + free(param); > + return ret; > +} > + > + > +static int wpa_driver_zd1211_disassociate(void *priv, const u8 *addr, > int reason_code) { > + struct zd1211_wlan_param *param; > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > + int blen; > + int ret; > + > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > + > + blen =3D sizeof(*param); > + param =3D (struct zd1211_wlan_param *) malloc(blen); > + if (param =3D=3D NULL) > + return -1; > + > + memset(param, 0, blen); > + param->cmd =3D ZD_CMD_SET_MLME; > + param->u.mlme.cmd =3D MLME_STA_DISASSOC; > + param->u.mlme.reason_code =3D reason_code; > + memcpy(param->sta_addr, addr, ETH_ALEN); > + ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > + free(param); > + return ret; > +} > + > + > +static int wpa_driver_zd1211_scan(void *priv, const u8 *ssid, size_t > ssid_len) { > + struct wpa_driver_zd1211_data *zd1211_drv; > + > + zd1211_drv =3D priv; > + return wpa_driver_wext_scan(zd1211_drv->wext, ssid, ssid_len); > +} > + > + > +static void * wpa_driver_zd1211_init(void *ctx, const char *ifname) { > + struct wpa_driver_zd1211_data *zd1211_drv; > + > + zd1211_drv =3D malloc(sizeof(*zd1211_drv)); > + if (zd1211_drv =3D=3D NULL) > + return NULL; > + memset(zd1211_drv, 0, sizeof(*zd1211_drv)); > + > + zd1211_drv->wext =3D wpa_driver_wext_init(ctx, ifname); > + if (zd1211_drv->wext =3D=3D NULL) > + goto exit_no_wext; > + > + zd1211_drv->ctx =3D ctx; > + strncpy(zd1211_drv->ifname, ifname, sizeof(zd1211_drv->ifname)); > + > + zd1211_drv->sock =3D socket(PF_INET, SOCK_DGRAM, 0); > + if (zd1211_drv->sock < 0) > + goto exit_no_socket; > + > + return zd1211_drv; > + > +exit_no_socket: > + wpa_driver_wext_deinit(zd1211_drv->wext); > +exit_no_wext: > + free(zd1211_drv); > + return NULL; > +} > + > + > +static void wpa_driver_zd1211_deinit(void *ctx) { > + struct wpa_driver_zd1211_data *zd1211_drv =3D ctx; > + > + wpa_driver_wext_deinit(zd1211_drv->wext); > + close(zd1211_drv->sock); > + free(zd1211_drv); > +} > + > + > +struct wpa_driver_ops wpa_driver_zd1211_ops =3D { > + .name =3D "zd1211", > + .desc =3D "Zydas zd1211 drivers", > + .init =3D wpa_driver_zd1211_init, > + .deinit =3D wpa_driver_zd1211_deinit, > + .associate =3D wpa_driver_zd1211_associate, > + .deauthenticate =3D wpa_driver_zd1211_deauthenticate, > + .disassociate =3D wpa_driver_zd1211_disassociate, > + .get_bssid =3D wpa_driver_zd1211_get_bssid, > + .get_scan_results =3D wpa_driver_zd1211_get_scan_results, > + .get_ssid =3D wpa_driver_zd1211_get_ssid, > +// .get_capa =3D wpa_driver_zd1211_get_capa, > + .scan =3D wpa_driver_zd1211_scan, > + .set_auth_alg =3D wpa_driver_zd1211_set_auth_alg, > + .set_countermeasures =3D wpa_driver_zd1211_set_countermeasures= , > + .set_drop_unencrypted =3D wpa_driver_zd1211_set_drop_unencrypte= d, > + .set_key =3D wpa_driver_zd1211_set_key, > + .set_wpa =3D wpa_driver_zd1211_set_wpa, > +}; > diff -Nur wpa_supplicant-0.4.7/Makefile wpa_supplicant-0.4.7.new/Makefile > --- wpa_supplicant-0.4.7/Makefile 2005-11-21 02:42:12.000000000 +01= 00 > +++ wpa_supplicant-0.4.7.new/Makefile 2005-12-26 19:17:14.000000000 +01= 00 > @@ -107,6 +107,12 @@ > CONFIG_WIRELESS_EXTENSION=3Dy > endif > > +ifdef CONFIG_DRIVER_ZD1211 > +CFLAGS +=3D -DCONFIG_DRIVER_ZD1211 > +OBJS_d +=3D driver_zd1211.o > +CONFIG_WIRELESS_EXTENSION=3Dy > +endif > + > ifdef CONFIG_DRIVER_BSD > CFLAGS +=3D -DCONFIG_DRIVER_BSD > OBJS_d +=3D driver_bsd.o > diff -Nur wpa_supplicant-0.4.7/zd1211_common.h > wpa_supplicant-0.4.7.new/zd1211_common.h > --- wpa_supplicant-0.4.7/zd1211_common.h 1970-01-01 01:00:00.00000= 0000 +0100 > +++ wpa_supplicant-0.4.7.new/zd1211_common.h 2005-12-27 16:00:36.00000= 0000 +0100 > @@ -0,0 +1,68 @@ > +#ifndef ZD1211_COMMON_H > +#define ZD1211_COMMON_H > + > + > +#define ZD_IOCTL_WPA (SIOCDEVPRIVATE + 1) > +#define ZD_IOCTL_PARAM (SIOCDEVPRIVATE + 2) > + > +#define ZD_PARAM_ROAMING 0x0001 > +#define ZD_PARAM_PRIVACY 0x0002 > +#define ZD_PARAM_WPA 0x0003 > +#define ZD_PARAM_COUNTERMEASURES 0x0004 > +#define ZD_PARAM_DROPUNENCRYPTED 0x0005 > +#define ZD_PARAM_AUTH_ALGS 0x0006 > + > +#define ZD_CMD_SET_ENCRYPT_KEY 0x0001 > +#define ZD_CMD_SET_MLME 0x0002 > +//#define ZD_CMD_SCAN_REQ 0x0003 > +#define ZD_CMD_SET_GENERIC_ELEMENT 0x0004 > + > +#define ZD_FLAG_SET_TX_KEY 0x0001 > + > +#define ZD_GENERIC_ELEMENT_HDR_LEN \ > +((int) (&((struct zd1211_wlan_param *) 0)->u.generic_elem.data)) > + > +#define ZD_CRYPT_ALG_NAME_LEN 16 > +#define ZD_MAX_KEY_SIZE 32 > +#define ZD_MAX_GENERIC_SIZE 64 > + > +/* structure definition */ > + > +struct zd1211_wlan_param { > + u32 cmd; > + u8 sta_addr[ETH_ALEN]; > + union { > + struct { > + u8 alg[ZD_CRYPT_ALG_NAME_LEN]; > + u32 flags; > + u32 err; > + u8 idx; > + u8 seq[8]; /* sequence counter (set: RX, get: TX)= */ > + u16 key_len; > + u8 key[ZD_MAX_KEY_SIZE]; > + } crypt; > +/* > + struct { > + u32 flags_and; > + u32 flags_or; > + } set_flags_sta; > +*/ > + struct { > + u8 len; > + u8 data[ZD_MAX_GENERIC_SIZE]; > + } generic_elem; > + struct { > +#define MLME_STA_DEAUTH 0 > +#define MLME_STA_DISASSOC 1 > + u16 cmd; > + u16 reason_code; > + } mlme; > + struct { > + u8 ssid_len; > + u8 ssid[32]; > + } scan_req; > + } u; > +}; > + > + > +#endif > > > > > On 12/28/05, Mayne <zd1...@co...> wrote: > > On Wed, 28 Dec 2005, John H. wrote: > > > > > YESSSSSSSSSSSs!!! > > > I am on wpa network now, thanks!!!!! > > > > Could you document the steps necessary to set up WPA? > > http://zd1211.ath.cx/wiki/WPAHowTo?action=3Dedit > > > > Thanks! > > > > Regards > > > > > > ------------------------------------------------------- > > This SF.net email is sponsored by: Splunk Inc. Do you grep through log = files > > for problems? Stop! Download the new AJAX search engine that makes > > searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! > > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > > _______________________________________________ > > Zd1211-devs mailing list > > Zd1...@li... > > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > > > |
From: John H. <mis...@gm...> - 2005-12-31 09:58:32
|
hmm, that script didn't quite work. try this one instead. btw, if i want to use a hidden wpa network as well, do i need to do anything diff in wpa_supplicant.conf other than just add it like the other one i have? # # bring up the wireless nic # killall -9 dhclient killall -9 wpa_supplicant rm -rf /var/run/wpa_supplicant ifconfig wlan0 down rmmod zd1211 sleep 2 modprobe zd1211 sleep 3 ifconfig wlan0 up # # connect to the node using wpa # sleep 2 /usr/src/wpasupplicant//wpa_supplicant -Bw -i wlan0 -c /etc/wpa_supplicant.conf -D zd1211 # # get us an ip address # sleep 5 dhclient wlan0 On 12/29/05, John H. <mis...@gm...> wrote: > here is the script I use now. > > # > # bring up the wireless nic > # > ifconfig wlan0 down > rmmod zd1211 > ifconfig wlan0 up > > # > # connect to the node using wpa > # > /usr/src/wpasupplicant//wpa_supplicant -Bw -i wlan0 -c > /etc/wpa_supplicant.conf -D zd1211 > > # > # get us an ip address > # > dhclient wlan0 > > > > > On 12/28/05, John H. <mis...@gm...> wrote: > > well, i tried, but the formatting got screwed up, so here's the howto i= did. > > > > > > Using zd1211 with WPA > > > > 1. Patch wpa_supplicant 4.7 source with below diff, by doing patch -p0 > > < file.diff from above source tree. > > 2. Copy defconfig to .config in wpa_supplicant dir, and make sure you > > uncomment the # to make it compiled the zd1211 driver, then compile > > with "make." > > 3. In /etc/wpa_supplicant.conf(which you can get from src dir), you > > can set ap_scan=3D1 and eapol_version=3D1, near bottom your config for > > that SSID can be something like > > > > network=3D{ > > ssid=3D"myssid" > > scan_ssid=3D1 > > pairwise=3DTKIP > > #psk=3D"myasciipass" > > psk=3D0efae6a466cfc69fd992034d81543db538dac17dfbb93baa49c9a75232d3b7= 00 > > group=3DTKIP > > key_mgmt=3DWPA-PSK > > proto=3DWPA > > } > > --- you get psk from running wpa_passphrase > > > > 4. Modprobe zd1211 > > 5. ifconfig wlan0 up > > 6. You may or may not have to set SSID with 'iwconfig wlan0 essid myssi= d' > > 7. Run the following command from the dir wpa_supplicant is in, which > > will run it in the background > > ./wpa_supplicant -Bw -i wlan0 -c /etc/wpa_supplicant.conf -D zd1211 > > 8. If DHCP, run dhclient wlan0 > > > > Ta daa!!! > > > > > > > > > > > > > > diff -Nur wpa_supplicant-0.4.7/defconfig wpa_supplicant-0.4.7.new/defco= nfig > > --- wpa_supplicant-0.4.7/defconfig 2005-09-24 20:30:43.000000000 += 0200 > > +++ wpa_supplicant-0.4.7.new/defconfig 2005-12-26 19:18:14.000000000 += 0100 > > @@ -68,6 +68,9 @@ > > # Driver interface for Intel ipw2100/2200 driver > > #CONFIG_DRIVER_IPW=3Dy > > > > +# Driver interface for Zydas zd1211 driver > > +#CONFIG_DRIVER_ZD1211=3Dy > > + > > # Driver interface for generic Linux wireless extensions > > CONFIG_DRIVER_WEXT=3Dy > > > > diff -Nur wpa_supplicant-0.4.7/drivers.c wpa_supplicant-0.4.7.new/drive= rs.c > > --- wpa_supplicant-0.4.7/drivers.c 2005-02-20 01:15:54.000000000 += 0100 > > +++ wpa_supplicant-0.4.7.new/drivers.c 2005-12-26 19:19:16.000000000 += 0100 > > @@ -55,6 +55,9 @@ > > #ifdef CONFIG_DRIVER_TEST > > extern struct wpa_driver_ops wpa_driver_test_ops; /* driver_test.c */ > > #endif /* CONFIG_DRIVER_TEST */ > > +#ifdef CONFIG_DRIVER_ZD1211 > > +extern struct wpa_driver_ops wpa_driver_zd1211_ops; /* driver_zd1211.c= */ > > +#endif /* CONFIG_DRIVER_ZD1211 */ > > > > > > struct wpa_driver_ops *wpa_supplicant_drivers[] =3D > > @@ -98,5 +101,8 @@ > > #ifdef CONFIG_DRIVER_TEST > > &wpa_driver_test_ops, > > #endif /* CONFIG_DRIVER_TEST */ > > +#ifdef CONFIG_DRIVER_ZD1211 > > + &wpa_driver_zd1211_ops, > > +#endif /* CONFIG_DRIVER_ZD1211 */ > > NULL > > }; > > diff -Nur wpa_supplicant-0.4.7/driver_zd1211.c > > wpa_supplicant-0.4.7.new/driver_zd1211.c > > --- wpa_supplicant-0.4.7/driver_zd1211.c 1970-01-01 01:00:00.000= 000000 +0100 > > +++ wpa_supplicant-0.4.7.new/driver_zd1211.c 2005-12-27 16:28:46.000= 000000 +0100 > > @@ -0,0 +1,408 @@ > > +#include <stdlib.h> > > +#include <stdio.h> > > +#include <unistd.h> > > +#include <string.h> > > +#include <sys/ioctl.h> > > +#include <errno.h> > > + > > +#include "common.h" > > +#include "driver.h" > > +#include "driver_wext.h" > > +#include "eloop.h" > > +#include "wireless_copy.h" > > +#include "wpa_supplicant.h" > > + > > +#include "zd1211_common.h" > > + > > + > > +struct wpa_driver_zd1211_data { > > + void *ctx; > > + void *wext; /* private data for driver_wext */ > > + char ifname[IFNAMSIZ + 1]; > > + int sock; > > +}; > > + > > + > > +static int zd1211_ioctl(struct wpa_driver_zd1211_data *zd1211_drv, > > struct zd1211_wlan_param *param, int len, int show_err) { > > + struct iwreq iwr; > > + > > + memset(&iwr, 0, sizeof(iwr)); > > + strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); > > + iwr.u.data.pointer =3D (caddr_t) param; > > + iwr.u.data.length =3D len; > > + > > + if (ioctl(zd1211_drv->sock, ZD_IOCTL_WPA, &iwr) < 0) { > > + int ret; > > + > > + ret =3D errno; > > + if (show_err) > > + perror("ioctl[ZD_IOCTL_WPA]"); > > + return ret; > > + } > > + > > + return 0; > > +} > > + > > + > > +static int zd1211_set_param(struct wpa_driver_zd1211_data > > *zd1211_drv, int op, int arg, int show_err) { > > + struct iwreq iwr; > > + int *i, ret =3D 0; > > + > > + memset(&iwr, 0, sizeof(iwr)); > > + strncpy(iwr.ifr_name, zd1211_drv->ifname, IFNAMSIZ); > > + i =3D (int *) iwr.u.name; > > + *i++ =3D op; > > + *i++ =3D arg; > > + > > + if (ioctl(zd1211_drv->sock, ZD_IOCTL_PARAM, &iwr) < 0) { > > + perror("ioctl[ZD_IOCTL_PARAM]"); > > + ret =3D -1; > > + } > > + > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_get_scan_results(void *priv, struct > > wpa_scan_result *results, size_t max_size) { > > + struct wpa_driver_zd1211_data *zd1211_drv; > > + > > + zd1211_drv =3D priv; > > + return wpa_driver_wext_get_scan_results(zd1211_drv->wext, resul= ts, max_size); > > +} > > + > > + > > +static int wpa_driver_zd1211_get_bssid(void *priv, u8 *bssid) { > > + struct wpa_driver_zd1211_data *zd1211_drv; > > + > > + zd1211_drv =3D priv; > > + return wpa_driver_wext_get_bssid(zd1211_drv->wext, bssid); > > +} > > + > > + > > +static int wpa_driver_zd1211_get_ssid(void *priv, u8 *ssid) { > > + struct wpa_driver_zd1211_data *zd1211_drv; > > + > > + zd1211_drv =3D priv; > > + return wpa_driver_wext_get_ssid(zd1211_drv->wext, ssid); > > +} > > + > > + > > +static int wpa_driver_zd1211_set_auth_alg(void *priv, int auth_alg) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + int algs =3D 0; > > + > > + if (auth_alg & AUTH_ALG_OPEN_SYSTEM) > > + algs =3D 0; > > + if (auth_alg & AUTH_ALG_SHARED_KEY) > > + algs =3D 1; > > + > > + return zd1211_set_param(zd1211_drv, ZD_PARAM_AUTH_ALGS, algs, 1= ); > > +} > > + > > + > > +static int wpa_driver_zd1211_set_countermeasures(void *priv, int enabl= ed) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + > > + /* Enable the countermeasure */ > > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled= ); > > + return zd1211_set_param(zd1211_drv, ZD_PARAM_COUNTERMEASURES, e= nabled, 1); > > +} > > + > > + > > +static int wpa_driver_zd1211_set_drop_unencrypted(void *priv, int enab= led) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + > > + /* Enable the countermeasure */ > > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled= ); > > + return zd1211_set_param(zd1211_drv, ZD_PARAM_DROPUNENCRYPTED, e= nabled, 1); > > +} > > + > > + > > +static int wpa_driver_zd1211_set_key(void *priv, wpa_alg alg, > > + const u8 *addr, int key_idx, > > + int set_tx, const u8 *seq, size= _t seq_len, > > + const u8 *key, size_t key_len) = { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + struct zd1211_wlan_param *param; > > + u8 *buf; > > + size_t blen; > > + int ret =3D 0; > > + char *alg_name; > > + > > + switch (alg) { > > + case WPA_ALG_NONE: > > + alg_name =3D "NONE"; > > + break; > > + case WPA_ALG_WEP: > > + alg_name =3D "WEP"; > > + break; > > + case WPA_ALG_TKIP: > > + alg_name =3D "TKIP"; > > + break; > > + case WPA_ALG_CCMP: > > + alg_name =3D "CCMP"; > > + break; > > + default: > > + return -1; > > + } > > + > > + wpa_printf(MSG_DEBUG, "%s: alg=3D%s key_idx=3D%d set_tx=3D%d se= q_len=3D%d " > > + "key_len=3D%d", __FUNCTION__, alg_name, key_idx, set= _tx, > > + seq_len, key_len); > > + > > + if (seq_len > 8) > > + return -2; > > + > > + blen =3D sizeof(*param) + key_len; > > + buf =3D malloc(blen); > > + if (buf =3D=3D NULL) > > + return -1; > > + memset(buf, 0, blen); > > + > > + param =3D (struct zd1211_wlan_param *) buf; > > + param->cmd =3D ZD_CMD_SET_ENCRYPT_KEY; > > + /* TODO: In theory, STA in client mode can use five keys; four = default > > + * keys for receiving (with keyidx 0..3) and one individual key= for > > + * both transmitting and receiving (keyidx 0) _unicast_ packets= . Now, > > + * keyidx 0 is reserved for this unicast use and default keys c= an only > > + * use keyidx 1..3 (i.e., default key with keyidx 0 is not supp= orted). > > + * This should be fine for more or less all cases, but for comp= leteness > > + * sake, the driver could be enhanced to support the missing ke= y. */ > > +#if 0 > > + if (addr =3D=3D NULL) > > + memset(param->sta_addr, 0xff, ETH_ALEN); > > + else > > + memcpy(param->sta_addr, addr, ETH_ALEN); > > +#else > > + memset(param->sta_addr, 0xff, ETH_ALEN); > > +#endif > > + strncpy(param->u.crypt.alg, alg_name, ZD_CRYPT_ALG_NAME_LEN); > > + param->u.crypt.flags =3D set_tx ? ZD_FLAG_SET_TX_KEY : 0; > > + param->u.crypt.idx =3D key_idx; > > + memcpy(param->u.crypt.seq, seq, seq_len); > > + param->u.crypt.key_len =3D key_len; > > + memcpy((u8 *) param->u.crypt.key, key, key_len); > > + > > + /* Dump key context */ > > + if(alg =3D=3D WPA_ALG_TKIP) { > > + int ii; > > + > > + wpa_printf(MSG_DEBUG, "Key Context:"); > > + for(ii =3D 0; ii < key_len; ) { > > + printf("0x%02x ", key[ii]); > > + > > + if((++ii % 16) =3D=3D 0) > > + printf("\n"); > > + } > > + > > + printf("\n"); > > + } > > + > > + if (zd1211_ioctl(zd1211_drv, param, blen, 1)) { > > + wpa_printf(MSG_WARNING, "Failed to set encryption."); > > + //show_set_key_error(param); > > + ret =3D -1; > > + } > > + free(buf); > > + > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_set_wpa_ie(struct wpa_driver_zd1211_data > > *zd1211_drv, const u8 *wpa_ie, size_t wpa_ie_len) { > > + int res; > > + struct zd1211_wlan_param *param; > > + size_t blen =3D ZD_GENERIC_ELEMENT_HDR_LEN + wpa_ie_len; > > + > > + if (blen < sizeof(*param)) > > + blen =3D sizeof(*param); > > + > > + param =3D (struct zd1211_wlan_param *) malloc(blen); > > + if (param =3D=3D NULL) > > + return -1; > > + > > + memset(param, 0, blen); > > + param->cmd =3D ZD_CMD_SET_GENERIC_ELEMENT; > > + param->u.generic_elem.len =3D wpa_ie_len; > > + memcpy(param->u.generic_elem.data, wpa_ie, wpa_ie_len); > > + res =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > > + > > + free(param); > > + > > + return res; > > +} > > + > > + > > +static int wpa_driver_zd1211_set_wpa(void *priv, int enabled) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + int ret =3D 0; > > + > > + wpa_printf(MSG_DEBUG, "%s: enabled=3D%d", __FUNCTION__, enabled= ); > > + > > + if (!enabled && wpa_driver_zd1211_set_wpa_ie(zd1211_drv, NULL, = 0) < 0) > > + ret =3D -1; > > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_ROAMING, enabled, 1) = < 0) > > + ret =3D -1; > > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_PRIVACY, enabled, 1) = < 0) > > + ret =3D -1; > > + if (zd1211_set_param(zd1211_drv, ZD_PARAM_WPA, enabled, 1) < 0) > > + ret =3D -1; > > + > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_associate(void *priv, struct > > wpa_driver_associate_params *params) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + int ret =3D 0; > > + > > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > > + > > + /* Because there might be the case, two or more APs with the sa= me > > + * SSID, in order to identify them, we need to set the BSSID. *= / > > + if (wpa_driver_zd1211_set_wpa_ie(zd1211_drv, params->wpa_ie, > > params->wpa_ie_len) < 0) > > + ret =3D -1; > > + if (wpa_driver_wext_set_ssid(zd1211_drv->wext, params->ssid, > > params->ssid_len) < 0) > > + ret =3D -1; > > + > > + // Mark for test > > + //if (wpa_driver_wext_set_bssid(ifname, bssid) < 0) > > + // ret =3D -1; > > + > > +#if 0 > > + /* Allow unencrypted EAPOL messages even if pairwise keys are s= et when > > + * not using WPA. IEEE 802.1X specifies that these frames are n= ot > > + * encrypted, but WPA encrypts them when pairwise keys are in u= se. */ > > + if (key_mgmt_suite =3D=3D KEY_MGMT_802_1X || > > + key_mgmt_suite =3D=3D KEY_MGMT_PSK) > > + allow_unencrypted_eapol =3D 0; > > + else > > + allow_unencrypted_eapol =3D 1; > > + > > + if (prism2param(ifname, 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.= */ > > + } > > +#endif > > + > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_deauthenticate(void *priv, const u8 > > *addr, int reason_code) { > > + struct zd1211_wlan_param *param; > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + int blen; > > + int ret; > > + > > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > > + > > + blen =3D sizeof(*param); > > + param =3D (struct zd1211_wlan_param *) malloc(blen); > > + if (param =3D=3D NULL) > > + return -1; > > + > > + memset(param, 0, blen); > > + param->cmd =3D ZD_CMD_SET_MLME; > > + param->u.mlme.cmd =3D MLME_STA_DEAUTH; > > + param->u.mlme.reason_code =3D reason_code; > > + memcpy(param->sta_addr, addr, ETH_ALEN); > > + ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > > + usleep(100000); > > + free(param); > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_disassociate(void *priv, const u8 *addr, > > int reason_code) { > > + struct zd1211_wlan_param *param; > > + struct wpa_driver_zd1211_data *zd1211_drv =3D priv; > > + int blen; > > + int ret; > > + > > + wpa_printf(MSG_DEBUG, "%s", __FUNCTION__); > > + > > + blen =3D sizeof(*param); > > + param =3D (struct zd1211_wlan_param *) malloc(blen); > > + if (param =3D=3D NULL) > > + return -1; > > + > > + memset(param, 0, blen); > > + param->cmd =3D ZD_CMD_SET_MLME; > > + param->u.mlme.cmd =3D MLME_STA_DISASSOC; > > + param->u.mlme.reason_code =3D reason_code; > > + memcpy(param->sta_addr, addr, ETH_ALEN); > > + ret =3D zd1211_ioctl(zd1211_drv, param, blen, 1); > > + free(param); > > + return ret; > > +} > > + > > + > > +static int wpa_driver_zd1211_scan(void *priv, const u8 *ssid, size_t > > ssid_len) { > > + struct wpa_driver_zd1211_data *zd1211_drv; > > + > > + zd1211_drv =3D priv; > > + return wpa_driver_wext_scan(zd1211_drv->wext, ssid, ssid_len); > > +} > > + > > + > > +static void * wpa_driver_zd1211_init(void *ctx, const char *ifname) { > > + struct wpa_driver_zd1211_data *zd1211_drv; > > + > > + zd1211_drv =3D malloc(sizeof(*zd1211_drv)); > > + if (zd1211_drv =3D=3D NULL) > > + return NULL; > > + memset(zd1211_drv, 0, sizeof(*zd1211_drv)); > > + > > + zd1211_drv->wext =3D wpa_driver_wext_init(ctx, ifname); > > + if (zd1211_drv->wext =3D=3D NULL) > > + goto exit_no_wext; > > + > > + zd1211_drv->ctx =3D ctx; > > + strncpy(zd1211_drv->ifname, ifname, sizeof(zd1211_drv->ifname))= ; > > + > > + zd1211_drv->sock =3D socket(PF_INET, SOCK_DGRAM, 0); > > + if (zd1211_drv->sock < 0) > > + goto exit_no_socket; > > + > > + return zd1211_drv; > > + > > +exit_no_socket: > > + wpa_driver_wext_deinit(zd1211_drv->wext); > > +exit_no_wext: > > + free(zd1211_drv); > > + return NULL; > > +} > > + > > + > > +static void wpa_driver_zd1211_deinit(void *ctx) { > > + struct wpa_driver_zd1211_data *zd1211_drv =3D ctx; > > + > > + wpa_driver_wext_deinit(zd1211_drv->wext); > > + close(zd1211_drv->sock); > > + free(zd1211_drv); > > +} > > + > > + > > +struct wpa_driver_ops wpa_driver_zd1211_ops =3D { > > + .name =3D "zd1211", > > + .desc =3D "Zydas zd1211 drivers", > > + .init =3D wpa_driver_zd1211_init, > > + .deinit =3D wpa_driver_zd1211_deinit, > > + .associate =3D wpa_driver_zd1211_associate, > > + .deauthenticate =3D wpa_driver_zd1211_deauthenticate, > > + .disassociate =3D wpa_driver_zd1211_disassociate, > > + .get_bssid =3D wpa_driver_zd1211_get_bssid, > > + .get_scan_results =3D wpa_driver_zd1211_get_scan_results, > > + .get_ssid =3D wpa_driver_zd1211_get_ssid, > > +// .get_capa =3D wpa_driver_zd1211_get_capa, > > + .scan =3D wpa_driver_zd1211_scan, > > + .set_auth_alg =3D wpa_driver_zd1211_set_auth_alg, > > + .set_countermeasures =3D wpa_driver_zd1211_set_countermeasur= es, > > + .set_drop_unencrypted =3D wpa_driver_zd1211_set_drop_unencryp= ted, > > + .set_key =3D wpa_driver_zd1211_set_key, > > + .set_wpa =3D wpa_driver_zd1211_set_wpa, > > +}; > > diff -Nur wpa_supplicant-0.4.7/Makefile wpa_supplicant-0.4.7.new/Makefi= le > > --- wpa_supplicant-0.4.7/Makefile 2005-11-21 02:42:12.000000000 += 0100 > > +++ wpa_supplicant-0.4.7.new/Makefile 2005-12-26 19:17:14.000000000 += 0100 > > @@ -107,6 +107,12 @@ > > CONFIG_WIRELESS_EXTENSION=3Dy > > endif > > > > +ifdef CONFIG_DRIVER_ZD1211 > > +CFLAGS +=3D -DCONFIG_DRIVER_ZD1211 > > +OBJS_d +=3D driver_zd1211.o > > +CONFIG_WIRELESS_EXTENSION=3Dy > > +endif > > + > > ifdef CONFIG_DRIVER_BSD > > CFLAGS +=3D -DCONFIG_DRIVER_BSD > > OBJS_d +=3D driver_bsd.o > > diff -Nur wpa_supplicant-0.4.7/zd1211_common.h > > wpa_supplicant-0.4.7.new/zd1211_common.h > > --- wpa_supplicant-0.4.7/zd1211_common.h 1970-01-01 01:00:00.000= 000000 +0100 > > +++ wpa_supplicant-0.4.7.new/zd1211_common.h 2005-12-27 16:00:36.000= 000000 +0100 > > @@ -0,0 +1,68 @@ > > +#ifndef ZD1211_COMMON_H > > +#define ZD1211_COMMON_H > > + > > + > > +#define ZD_IOCTL_WPA (SIOCDEVPRIVATE + 1) > > +#define ZD_IOCTL_PARAM (SIOCDEVPRIVATE + 2) > > + > > +#define ZD_PARAM_ROAMING 0x0001 > > +#define ZD_PARAM_PRIVACY 0x0002 > > +#define ZD_PARAM_WPA 0x0003 > > +#define ZD_PARAM_COUNTERMEASURES 0x0004 > > +#define ZD_PARAM_DROPUNENCRYPTED 0x0005 > > +#define ZD_PARAM_AUTH_ALGS 0x0006 > > + > > +#define ZD_CMD_SET_ENCRYPT_KEY 0x0001 > > +#define ZD_CMD_SET_MLME 0x0002 > > +//#define ZD_CMD_SCAN_REQ 0x0003 > > +#define ZD_CMD_SET_GENERIC_ELEMENT 0x0004 > > + > > +#define ZD_FLAG_SET_TX_KEY 0x0001 > > + > > +#define ZD_GENERIC_ELEMENT_HDR_LEN \ > > +((int) (&((struct zd1211_wlan_param *) 0)->u.generic_elem.data)) > > + > > +#define ZD_CRYPT_ALG_NAME_LEN 16 > > +#define ZD_MAX_KEY_SIZE 32 > > +#define ZD_MAX_GENERIC_SIZE 64 > > + > > +/* structure definition */ > > + > > +struct zd1211_wlan_param { > > + u32 cmd; > > + u8 sta_addr[ETH_ALEN]; > > + union { > > + struct { > > + u8 alg[ZD_CRYPT_ALG_NAME_LEN]; > > + u32 flags; > > + u32 err; > > + u8 idx; > > + u8 seq[8]; /* sequence counter (set: RX, get: T= X) */ > > + u16 key_len; > > + u8 key[ZD_MAX_KEY_SIZE]; > > + } crypt; > > +/* > > + struct { > > + u32 flags_and; > > + u32 flags_or; > > + } set_flags_sta; > > +*/ > > + struct { > > + u8 len; > > + u8 data[ZD_MAX_GENERIC_SIZE]; > > + } generic_elem; > > + struct { > > +#define MLME_STA_DEAUTH 0 > > +#define MLME_STA_DISASSOC 1 > > + u16 cmd; > > + u16 reason_code; > > + } mlme; > > + struct { > > + u8 ssid_len; > > + u8 ssid[32]; > > + } scan_req; > > + } u; > > +}; > > + > > + > > +#endif > > > > > > > > > > On 12/28/05, Mayne <zd1...@co...> wrote: > > > On Wed, 28 Dec 2005, John H. wrote: > > > > > > > YESSSSSSSSSSSs!!! > > > > I am on wpa network now, thanks!!!!! > > > > > > Could you document the steps necessary to set up WPA? > > > http://zd1211.ath.cx/wiki/WPAHowTo?action=3Dedit > > > > > > Thanks! > > > > > > Regards > > > > > > > > > ------------------------------------------------------- > > > This SF.net email is sponsored by: Splunk Inc. Do you grep through lo= g files > > > for problems? Stop! Download the new AJAX search engine that makes > > > searching your log files as easy as surfing the web. DOWNLOAD SPLUN= K! > > > http://ads.osdn.com/?ad_id=3D7637&alloc_id=3D16865&op=3Dclick > > > _______________________________________________ > > > Zd1211-devs mailing list > > > Zd1...@li... > > > https://lists.sourceforge.net/lists/listinfo/zd1211-devs > > > > > > |