cmd_state_t cmd_setkey(int argc, char* argv[], void* ctx) { int idx, len; char key[13]; struct wl_mac_addr_t bssid; const char *usage = "usage: setkey <key_idx (0-3)> <key in hex>\n\t "\ "or: setkey none\n"; memset(&bssid.octet, 0xff, sizeof bssid.octet); if (argc == 2 && strcmp(argv[1], "none") == 0) { printk("Deleting WEP keys\n"); wl_delete_wep_key(0, &bssid); wl_delete_wep_key(1, &bssid); wl_delete_wep_key(2, &bssid); wl_delete_wep_key(3, &bssid); return CMD_DONE; } if (argc < 3) { printk(usage); return CMD_DONE; } idx = atoi(argv[1]); len = strlen(argv[2]); /* Pass phrase? */ if ( 5 == len || 13 == len ) { strncpy(key, argv[2], len); } /* Otherwise it's a hex string */ else { len = ascii_to_key(key, argv[2]); if (0 == len || idx > 3 || idx < 0 || (idx == 0 && *argv[1] != '0')) { printk(usage); return CMD_DONE; } if (len != 5 && len != 13) { printk(" WEP key must be 10 (WEP-40) or 26 (WEP-104) digits\n"); return CMD_DONE; } } wl_add_wep_key(idx, len, key, &bssid); wl_set_default_wep_key(idx); return CMD_DONE; }
int set_key_cmd_cb(int numParam, char* buf, void* ctx) { struct wl_ssid_t ssid; struct wl_mac_addr_t bssid; uint8_t idx=0, len=0; char key[13], key_hex[27]; char keyIdx[2]; wl_err_t err = WL_SUCCESS; tParam* params = (tParam*) buf; INFO_SPI("%s params=%d\n", __FUNCTION__, numParam); // SSID memset(&ssid, 0, sizeof ssid); if (params->paramLen < WL_SSID_MAX_LENGTH) { memcpy(ssid.ssid, ¶ms->param, params->paramLen); ssid.len = params->paramLen; INFO_SPI("%s\n", ssid.ssid); } else { //printk("SSID len out of range"); RETURN_ERR(WL_FAILURE) } params = (tParam*)((char*)buf+PARAM_LEN_SIZE+params->paramLen); strncpy(keyIdx, (const char*)¶ms->param, params->paramLen); keyIdx[(uint8_t)params->paramLen]='\0'; idx = (uint8_t)atoi(keyIdx); // KEY IDX if ((params->paramLen != 1)||(idx < 0)||(idx > 3)){ //printk("KEY IDX out of range %d\n", idx); RETURN_ERR(WL_FAILURE) } params = (tParam*)((char*)params+PARAM_LEN_SIZE+params->paramLen); strncpy(key_hex, (const char*)¶ms->param, params->paramLen); key_hex[(uint8_t)params->paramLen]='\0'; len = ascii_to_key(key, key_hex); // KEY if (( len != 5)&&(len != 13)) { //printk("KEY len out of range %d", len); RETURN_ERR(WL_FAILURE) } #if 0 printk("KEY IDX = %d\n", idx); dump(key, len); printk("KEY len %d\n", len); #endif memset(&bssid.octet, 0xff, sizeof bssid.octet); wl_add_wep_key(idx, len, key, &bssid); //wl_set_auth_mode(AUTH_MODE_SHARED_KEY); wl_set_default_wep_key(idx); //Connect err = wl_cm_set_network(&ssid, NULL); if (err != 1) WARN("err=%d\n", err); RETURN_ERR(err) }