/* * */ /* System include files */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "rtk_arch.h" #define WLAN_FAST_INIT #define BR_SHORTCUT #define NUM_WLAN_INTERFACE 1 #define DEFAULT_CONFIG_PATH (WIFI_CONFIG_ROOT_DIR "/wlan0/") #define PIN_LEN 8 typedef enum { BANDMODE2G=0, BANDMODE5G=1, BANDMODEBOTH=2, BANDMODESINGLE=3 } WLANBAND2G5GMODE_TYPE_T; typedef enum { AP_MODE=0, CLIENT_MODE=1, WDS_MODE=2, AP_WDS_MODE=3 } WLAN_MODE_T; typedef enum { ENCRYPT_DISABLED=0, ENCRYPT_WEP=1, ENCRYPT_WPA=2, ENCRYPT_WPA2=4, ENCRYPT_WPA2_MIXED=6 ,ENCRYPT_WAPI=7} ENCRYPT_T; typedef enum { WEP_DISABLED=0, WEP64=1, WEP128=2 } WEP_T; typedef enum { KEY_ASCII=0, KEY_HEX=1} KEY_TYPE_T; typedef enum { WPA_AUTH_AUTO=1, WPA_AUTH_PSK=2 } WPA_AUTH_T; typedef enum { WPA_CIPHER_TKIP=1, WPA_CIPHER_AES=2, WPA_CIPHER_MIXED=3 } WPA_CIPHER_T; enum { WSC_AUTH_OPEN=1, WSC_AUTH_WPAPSK=2, WSC_AUTH_SHARED=4, WSC_AUTH_WPA=8, WSC_AUTH_WPA2=0x10, WSC_AUTH_WPA2PSK=0x20, WSC_AUTH_WPA2PSKMIXED=0x22 }; enum { WSC_ENCRYPT_NONE=1, WSC_ENCRYPT_WEP=2, WSC_ENCRYPT_TKIP=4, WSC_ENCRYPT_AES=8, WSC_ENCRYPT_TKIPAES=12 }; enum { CONFIG_METHOD_ETH=0x2, CONFIG_METHOD_PIN=0x4, CONFIG_METHOD_PBC=0x80 }; enum { CONFIG_BY_INTERNAL_REGISTRAR=1, CONFIG_BY_EXTERNAL_REGISTRAR=2}; /* Constand definitions */ #define DEC_FORMAT ("%d") #define BYTE5_FORMAT ("%02x%02x%02x%02x%02x") #define BYTE6_FORMAT ("%02x%02x%02x%02x%02x%02x") #define BYTE13_FORMAT ("%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x") #define STR_FORMAT ("%s") #define HEX_FORMAT ("%02x") #define SCHEDULE_FORMAT ("%d,%d,%d,%d") #ifdef HOME_GATEWAY #define PORTFW_FORMAT ("%s, %d, %d, %d") #define PORTFILTER_FORMAT ("%d, %d, %d") #define IPFILTER_FORMAT ("%s, %d") #define TRIGGERPORT_FORMAT ("%d, %d, %d, %d, %d, %d") #endif #define MACFILTER_FORMAT ("%02x%02x%02x%02x%02x%02x") #define MACFILTER_COLON_FORMAT ("%02x:%02x:%02x:%02x:%02x:%02x") #define WDS_FORMAT ("%02x%02x%02x%02x%02x%02x,%d") #define DHCPRSVDIP_FORMAT ("%02x%02x%02x%02x%02x%02x,%s,%s") #define VLANCONFIG_FORMAT ("%s,%d,%d,%d,%d,%d,%d") #ifdef HOME_GATEWAY #ifdef VPN_SUPPORT //#define IPSECTUNNEL_FORMAT ("%d, %d, %s, %d, %s, %d, %d, %s , %d, %s, %d, %d, %d, %d, %d, %d, %s, %d, %d, %d, %lu, %lu, %d, %s, %s, %s") #define IPSECTUNNEL_FORMAT ("%d, %d, %s, %d, %s, %d, %d, %s , %d, %s, %d, %d, %d, %d, %s, %d, %d, %d, %lu, %lu, %d, %s, %s, %s, %d, %s, %s, %d, %d, %s") #endif #ifdef CONFIG_IPV6 #define RADVD_FORMAT ("%d, %s, %d, %d, %d, %d, %d, %d, %d, %d ,%d, %d, %s, %d, %d, %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, %d, %d, %d, %d, %d, %d, %s, %d, %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, %d, %d, %d, %d, %d, %d, %s, %d") #define DNSV6_FORMAT ("%d, %s") #define DHCPV6S_FORMAT ("%d, %s, %s, %s, %s") #define ADDR6_FORMAT ("%d, %d, %d, %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x, %04x:%04x:%04x:%04x:%04x:%04x:%04x:%04x") #endif #endif #define SPACE (' ') #define EOL ('\n') #define LOCAL_ADMIN_BIT 0x02 #define READ_MIB_FROM_DEVICE 0 /* Macro definition */ static int _is_hex(char c) { return (((c >= '0') && (c <= '9')) || ((c >= 'A') && (c <= 'F')) || ((c >= 'a') && (c <= 'f'))); } static int string_to_hex(char *string, char *key, int len) { char tmpBuf[4]; int idx, ii=0; for (idx=0; idx 0) { if (data[idx] != ' ') break; idx++; } len -= idx; /* delete bracing '"' */ if (data[idx] == '"') { for (i=idx+len-1; i>idx; i--) { if (data[i] == '"') { idx++; len = i - idx; } break; } } if (len > 0) { memcpy(value, &data[idx], len); value[len] = '\0'; } return len; } ////////////////////////////////////////////////////////////////////// /* SSID=WPS05bdad67c1 WSC_SSID=WPS05bdad67c1 ENCRYPT=6 WSC_AUTH=34 WPA_AUTH=2 WPA_PSK=5cde41ec70fd0dcf75a766 PSK_FORMAT=0 WSC_PSK=5cde41ec70fd0dcf75a766 WPA_CIPHER_SUITE=3 WPA2_CIPHER_SUITE=3 WSC_ENC=12 WSC_CONFIGBYEXTREG=1 WSC_CONFIGURED=1 */ static void readFileSetParam(char *file, char *wlanif_name) { FILE *fp; char line[200], token[40], value[100], *ptr; char config_path[64]={0}; char file_name[40]; char full_path[100]; fp = fopen(file, "r"); if (fp == NULL) { printf("read file [%s] failed!\n", file); return; } sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s/", wlanif_name); while ( fgets(line, 200, fp) ) { ptr = get_token(line, token); if (ptr == NULL) continue; if (get_value(ptr, value)==0) continue; if(strstr(token, "WEP")){ if(!strcmp(token, "WEP64_KEY1")){ sprintf(file_name, "%s", "wepkey1_64_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP64_KEY2")){ sprintf(file_name, "%s", "wepkey2_64_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP64_KEY3")){ sprintf(file_name, "%s", "wepkey3_64_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP64_KEY4")){ sprintf(file_name, "%s", "wepkey4_64_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP128_KEY1")){ sprintf(file_name, "%s", "wepkey1_128_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP128_KEY2")){ sprintf(file_name, "%s", "wepkey2_128_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP128_KEY3")){ sprintf(file_name, "%s", "wepkey3_128_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP128_KEY4")){ sprintf(file_name, "%s", "wepkey4_128_hex"); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP")){ //set WEP 64 or 128 sprintf(file_name, "%s", token); convert_lower(file_name); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); }else if(!strcmp(token, "WEP_KEY_TYPE")){ //set HEX key type sprintf(file_name, "%s", token); convert_lower(file_name); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); } } else{ sprintf(file_name, "%s", token); convert_lower(file_name); sprintf(full_path, "%s%s",config_path,file_name); write_line_to_file(full_path, 1,value); } } fclose(fp); } static void write_mib_content_to_file(char *mib_name, char *mib_value) { char file_name[40]; char full_path[100]; sprintf(file_name, "%s", mib_name); convert_lower(file_name); sprintf(full_path, "%s%s",DEFAULT_CONFIG_PATH,file_name); write_line_to_file(full_path, 1,mib_value); } static void read_mib_content_from_file(char *mib_name, char *mib_value) { char file_name[40]; char full_path[100]; sprintf(file_name, "%s", mib_name); convert_lower(file_name); sprintf(full_path, "%s%s",DEFAULT_CONFIG_PATH,file_name); get_file_content(full_path, mib_value); } ////////////////////////////////////////////////////////////////////// int main(int argc, char** argv) { int argNum=1; // int i; // int wlan_idx=0; if ( argc > 1 ) { // for debugging #if 0 printf("Flash Receive Command: "); for (i=0;i= NUM_WLAN_INTERFACE) { printf("invalid wlan interface index number!\n"); return 0; } #endif readFileSetParam(argv[argNum+1], argv[argNum]); } else printf("Miss arguments [wlan_interface param_file]!\n"); return 0; } else if ( !strcmp(argv[argNum], "upd-wsc-conf") ) { return updateWscConf(argv[argNum+1], argv[argNum+2], 0, argv[argNum+3]); } else if ( !strcmp(argv[argNum], "gen-pin") ) { return updateWscConf(0, 0, 1, argv[argNum+1]); }else if ( !strcmp(argv[argNum], "set") ) { write_mib_content_to_file(argv[argNum+1], argv[argNum+2]); }else if ( !strcmp(argv[argNum], "sethw") ) { //flash sethw unsigned char pwr; char mib[100]={0}; char mibvalue[256+1]={0}; argNum++; if (!memcmp((argv[argNum]+9), "TX_POWER", 8)) { sprintf(mib, "%s", (argv[argNum++]+9)); while( (argNum < argc) && (argNum < 31) ) { pwr = atoi(argv[argNum++]); sprintf(mibvalue, "%s%02x", mibvalue, pwr); } // printf("Flash: write file %s:%s\n", mib, mibvalue); write_mib_content_to_file(mib, mibvalue); } else { while((argNum + 1) < argc) { if((!strcmp(argv[argNum], "HW_WLAN0_WLAN_ADDR")) ) { sprintf(mib, "wlan0_addr"); argNum++; } else if (!memcmp(argv[argNum], "HW_WLAN", 7)) { sprintf(mib, "%s", (argv[argNum++]+9)); } else { strcpy(mib, argv[argNum++]); } sscanf(argv[argNum++], "%s", mibvalue); // printf("Flash: write file %s:%s\n", mib, mibvalue); write_mib_content_to_file(mib, mibvalue); } } } else if ( !strcmp(argv[argNum], "gethw") ) { char buffer[512]; char mib[100]={0}; argNum++; while(argNum < argc) { if((!strcmp(argv[argNum], "HW_NIC0_ADDR")) || (!strcmp(argv[argNum], "HW_WLAN0_WLAN_ADDR")) ) { sprintf(mib, "wlan0_addr"); } else if (!memcmp(argv[argNum], "HW_WLAN", 7)) { sprintf(mib, "%s", (argv[argNum]+9)); } else { strcpy(mib, argv[argNum]); } read_mib_content_from_file(mib, buffer); printf("%s=%s",argv[argNum],buffer); argNum++; } } else { printf("flash: Unknown Command: %s\n", argv[argNum]); } } return 0; } #if 0 //////////////////////////////////////////////////////////////////////////////// static void getVal2(char *value, char **p1, char **p2) { value = getVal(value, p1); if ( value ) getVal(value, p2); else *p2 = NULL; } //////////////////////////////////////////////////////////////////////////////// static int getdir(char *fullname, char *path, int loop) { char tmpBuf[100], *p, *p1; strcpy(tmpBuf, fullname); path[0] = '\0'; p1 = tmpBuf; while (1) { if ((p=strchr(p1, '/'))) { if (--loop == 0) { *p = '\0'; strcpy(path, tmpBuf); return 0; } p1 = ++p; } else break; } return -1; } #endif //////////////////////////////////////////////////////////////////////////////// static void __inline__ WRITE_WPA_FILE(int fh, char *buf) { if ( write(fh, buf, strlen(buf)) != strlen(buf) ) { printf("Write WPA config file error!\n"); close(fh); exit(1); } } #if READ_MIB_FROM_DEVICE #else //////////////////////////////////////////////////////////////////////////////// static void generateWpaConf(char *outputFile, int isWds, char *iface) { int fh, intVal , auth_val , encrypt, enable1x, wep; char buf1[1024], buf2[1024]; char config_path[100]={0}; char config_value[100]={0}; char tmp1[100], tmpbuf[100]; int get_result=0; char default_config_path[64]={0}; int repeater_enabled=0; #ifdef CONFIG_IEEE80211W int pmf_enabled=0; #endif /* CONFIG_IEEE80211W */ sprintf(default_config_path, WIFI_CONFIG_ROOT_DIR "/%s/", iface); fh = open(outputFile, O_RDWR|O_CREAT|O_TRUNC, S_IRGRP|S_IWGRP); if (fh == -1) { printf("Create WPA config file error!\n"); return; } if (!isWds) { //apmib_get( MIB_WLAN_ENCRYPT, (void *)&encrypt); sprintf(config_path, "%s%s", default_config_path, "encrypt"); get_result = get_file_content(config_path, config_value); encrypt = atoi(config_value); sprintf(buf2, "encryption = %d\n", encrypt); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_SSID, (void *)buf1); if(!strcmp(iface, "wlan0-vxd")){ sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "repeater_enabled"); get_result = get_file_content(config_path, config_value); repeater_enabled = atoi(config_value); if(repeater_enabled==1){ sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "repeater_ssid"); get_result = get_file_content(config_path, config_value); }else{ sprintf(config_path, "%s%s", default_config_path, "ssid"); } }else{ sprintf(config_path, "%s%s", default_config_path, "ssid"); } get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1,"%s", config_value); sprintf(buf2, "ssid = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ENABLE_1X, (void *)&enable1x); sprintf(config_path, "%s%s", default_config_path, "enable_1x"); get_result = get_file_content(config_path, config_value); enable1x = atoi(config_value); sprintf(buf2, "enable1x = %d\n", enable1x); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_MAC_AUTH_ENABLED, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "mac_auth_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "enableMacAuth = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ENABLE_SUPP_NONWPA, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "enable_supp_nonwpa"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); if (intVal){ //apmib_get( MIB_WLAN_SUPP_NONWPA, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "supp_nonwpa"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); } sprintf(buf2, "supportNonWpaClient = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WEP, (void *)&wep); sprintf(config_path, "%s%s", default_config_path, "wep"); get_result = get_file_content(config_path, config_value); wep = atoi(config_value); sprintf(buf2, "wepKey = %d\n", wep); WRITE_WPA_FILE(fh, buf2); if ( encrypt==1 && enable1x ) { if (wep == 1) { //apmib_get( MIB_WLAN_WEP64_KEY1, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "wepkey1_64_asc"); if( get_file_content(config_path, config_value)<0 ) { strcpy(buf2, "wepGroupKey = \"\"\n"); } else { sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; sprintf(buf2, "wepGroupKey = \"%02x%02x%02x%02x%02x\"\n", tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4]); } } else { //apmib_get( MIB_WLAN_WEP128_KEY1, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "wepkey1_128_asc"); if( get_file_content(config_path, config_value)<0 ) { strcpy(buf2, "wepGroupKey = \"\"\n"); } else { sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; sprintf(buf2, "wepGroupKey = \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\"\n", tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4], tmp1[5],tmp1[6],tmp1[7],tmp1[8],tmp1[9], tmp1[10],tmp1[11],tmp1[12]); } } } else strcpy(buf2, "wepGroupKey = \"\"\n"); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WPA_AUTH, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "wpa_auth"); get_result = get_file_content(config_path, config_value); auth_val = atoi(config_value); #ifndef CONFIG_IEEE80211W sprintf(buf2, "authentication = %d\n", auth_val ); WRITE_WPA_FILE(fh, buf2); #else sprintf(config_path, "%s%s", default_config_path, "wpa11w"); get_result = get_file_content(config_path, config_value); pmf_enabled = atoi(config_value); sprintf((char *)buf2, "ieee80211w = %d\n", pmf_enabled); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "wpa2EnableSHA256"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); if (pmf_enabled == 0) { intVal = 0; } else if (pmf_enabled == 1) { if (intVal != 0 && intVal != 1) { intVal = 0; } } else if (pmf_enabled == 2) { intVal = 1; } sprintf((char *)buf2, "sha256 = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); if( (intVal==1) && (auth_val==1) ) { sprintf(buf2, "authentication = 5\n" ); WRITE_WPA_FILE(fh, buf2); } else { sprintf(buf2, "authentication = %d\n", auth_val ); WRITE_WPA_FILE(fh, buf2); } #endif //apmib_get( MIB_WLAN_WPA_CIPHER_SUITE, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "wpa_cipher"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "unicastCipher = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WPA2_CIPHER_SUITE, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "wpa2_cipher"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "wpa2UnicastCipher = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WPA2_PRE_AUTH, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "wpa2_pre_auth"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "enablePreAuth = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_PSK_FORMAT, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "psk_format"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); if (intVal==0) sprintf(buf2, "usePassphrase = 1\n"); else sprintf(buf2, "usePassphrase = 0\n"); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WPA_PSK, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "wpa_psk"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1, "%s", config_value); sprintf(buf2, "psk = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_WPA_GROUP_REKEY_TIME, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "gk_rekey"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "groupRekeyTime = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_RS_PORT, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "rs_port"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsPort = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_RS_IP, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "rs_ip"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1, "%s", config_value); sprintf(buf2, "rsIP = %s\n",buf1); //sprintf(buf2, "rsIP = %s\n", inet_ntoa(*((struct in_addr *)buf1))); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_RS_PASSWORD, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "rs_password"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1, "%s", config_value); sprintf(buf2, "rsPassword = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs2_port"); if( get_result = get_file_content(config_path, config_value)>0 ) { intVal = atoi(config_value); sprintf(buf2, "rs2Port = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); } sprintf(config_path, "%s%s", default_config_path, "rs2_ip"); if( get_result = get_file_content(config_path, config_value)>0 ) { intVal = atoi(config_value); sprintf(buf2, "rs2IP = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); } sprintf(config_path, "%s%s", default_config_path, "rs2_password"); if( get_result = get_file_content(config_path, config_value)>0 ) { intVal = atoi(config_value); sprintf(buf2, "rs2Password = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); } //apmib_get( MIB_WLAN_RS_MAXRETRY, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "rs_maxretry"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsMaxReq = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); // apmib_get( MIB_WLAN_RS_INTERVAL_TIME, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "rs_interval_time"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsAWhile = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_ENABLED, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsEnabled = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_PORT, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_port"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsPort = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_IP, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "account_rs_ip"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1, "%s", config_value); sprintf(buf2, "accountRsIP = %s\n", buf1); //sprintf(buf2, "accountRsIP = %s\n", inet_ntoa(*((struct in_addr *)buf1))); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_PASSWORD, (void *)buf1); sprintf(config_path, "%s%s", default_config_path, "account_rs_password"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(buf1, "%s", config_value); sprintf(buf2, "accountRsPassword = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_UPDATE_ENABLED, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_update_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsUpdateEnabled = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_UPDATE_DELAY, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_update_delay"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsUpdateTime = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_MAXRETRY, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_maxretry"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsMaxReq = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); //apmib_get( MIB_WLAN_ACCOUNT_RS_INTERVAL_TIME, (void *)&intVal); sprintf(config_path, "%s%s", default_config_path, "account_rs_interval_time"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsAWhile = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); } close(fh); } #endif //////////////////////////////////////////////////////////////////////////////// #if 0 void calc_incr(unsigned char *mac, int idx) { if( (*mac+idx) == 0x0 ) calc_incr(mac-1,1); else *mac += idx; } int get_root_mac(unsigned char *mac) { int fd; struct ifreq ifr; unsigned char zero_mac[6]={0}, broadcat_mac[6]={0xff}; fd = socket(AF_INET, SOCK_DGRAM, 0); ifr.ifr_addr.sa_family = AF_INET; strcpy(ifr.ifr_name, "wlan0"); if( ioctl(fd, SIOCGIFHWADDR, &ifr) < 0 ) return -1; close(fd); if( !memcmp(ifr.ifr_hwaddr.sa_data,zero_mac,6) || !memcmp(ifr.ifr_hwaddr.sa_data,broadcat_mac,6) ) return -1; memcpy(mac,ifr.ifr_hwaddr.sa_data,6); return 0; } #endif enum { MODE_AP_UNCONFIG=1, // AP unconfigured (enrollee) MODE_CLIENT_UNCONFIG=2, // client unconfigured (enrollee) MODE_CLIENT_CONFIG=3, // client configured (registrar) MODE_AP_PROXY=4, // AP configured (proxy) MODE_AP_PROXY_REGISTRAR=5, // AP configured (proxy and registrar) MODE_CLIENT_UNCONFIG_REGISTRAR=6 // client unconfigured (registrar) }; #define WRITE_WSC_PARAM(dst, tmp, str, val) { \ sprintf(tmp, str, val); \ memcpy(dst, tmp, strlen(tmp)); \ dst += strlen(tmp); \ } static void convert_bin_to_str(char *bin, int len, char *out) { int i; char tmpbuf[10]; out[0] = '\0'; for (i=0; i struct timeval tod; unsigned long num; gettimeofday(&tod , NULL); sprintf(tmp_config_path, "%s%s", default_config_path, "nic0_addr"); get_result = get_file_content(tmp_config_path, tmp_config_value); //apmib_get(MIB_HW_NIC0_ADDR, (void *)&tmp1); if(get_result != -1){ string_to_hex(tmp_config_value,tmp1, 12); tod.tv_sec += tmp1[4]+tmp1[5]; srand(tod.tv_sec); num = rand() % 10000000; num = num*10 + compute_pin_checksum(num); convert_hex_to_ascii((unsigned long)num, tmpbuf); //apmib_set(MIB_HW_WSC_PIN, (void *)tmpbuf); write_line_to_file(config_path, 1,tmpbuf); write_line_to_file(WIFI_CONFIG_ROOT_DIR "/wlan1/wsc_pin", 1,tmpbuf); printf("Generated PIN = %s\n", tmpbuf); } if (genpin) return 0; } if (stat(in, &status) < 0) { printf("stat() error [%s]!\n", in); return -1; } buf = malloc(status.st_size+2048); if (buf == NULL) { printf("malloc() error [%d]!\n", (int)status.st_size+2048); return -1; } ptr = buf; if (is_client == CLIENT_MODE) { { if (is_registrar) { if (!is_config) intVal = MODE_CLIENT_UNCONFIG_REGISTRAR; else intVal = MODE_CLIENT_CONFIG; } else intVal = MODE_CLIENT_UNCONFIG; } } else { if (!is_config) intVal = MODE_AP_UNCONFIG; else intVal = MODE_AP_PROXY_REGISTRAR; } WRITE_WSC_PARAM(ptr, tmpbuf, "mode = %d\n", intVal); if (is_client == CLIENT_MODE) { intVal = 0; } else intVal = isUpnpEnabled; WRITE_WSC_PARAM(ptr, tmpbuf, "upnp = %d\n", intVal); intVal = 0; intVal = wsc_method; //Ethernet(0x2)+Label(0x4)+PushButton(0x80) Bitwise OR if (intVal == 1) //Pin+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PIN); else if (intVal == 2) //PBC+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PBC); if (intVal == 3) //Pin+PBC+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PIN | CONFIG_METHOD_PBC); WRITE_WSC_PARAM(ptr, tmpbuf, "config_method = %d\n", intVal); // 1104 WRITE_WSC_PARAM(ptr, tmpbuf, "wlan0_wsc_disabled = %d\n", wlan0_wsc_disabled); WRITE_WSC_PARAM(ptr, tmpbuf, "auth_type = %d\n", wsc_auth); WRITE_WSC_PARAM(ptr, tmpbuf, "encrypt_type = %d\n", wsc_enc); if (wsc_enc == WSC_ENCRYPT_WEP) is_wep = 1; if(wlanif_name != NULL && (strcmp(wlanif_name,"wlan0") == 0 || strcmp(wlanif_name,"wlan1") == 0)) { if (is_client == CLIENT_MODE) { if (wlan_network_type == 0) intVal = 1; else intVal = 2; } else intVal = 1; } else intVal = 1; WRITE_WSC_PARAM(ptr, tmpbuf, "connection_type = %d\n", intVal); WRITE_WSC_PARAM(ptr, tmpbuf, "manual_config = %d\n", wsc_manual_enabled); if (is_wep) { // only allow WEP in none-MANUAL mode (configured by external registrar) if (wlan_encrpty != ENCRYPT_WEP) { printf("WEP mismatched between WPS and host system\n"); free(buf); return -1; } if (wlan_wep <= WEP_DISABLED || wlan_wep > WEP128) { printf("WEP encrypt length error\n"); free(buf); return -1; } wep_transmit_key++; WRITE_WSC_PARAM(ptr, tmpbuf, "wep_transmit_key = %d\n", wep_transmit_key); /*whatever key type is ASSIC or HEX always use String-By-Hex fromat ;2011-0419,fixed,need patch with wscd daemon , search 2011-0419*/ if (wlan_wep == WEP64) { // apmib_get(MIB_WLAN_WEP64_KEY1, (void *)&wlan_wep64_key1); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey1_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey1_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "network_key = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY2, (void *)&wlan_wep64_key2); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey2_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey2_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key2 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY3, (void *)&wlan_wep64_key3); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey3_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey3_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key3 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY4, (void *)&wlan_wep64_key4); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey4_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey4_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key4 = %s\n", tmp1); } else { //apmib_get(MIB_WLAN_WEP128_KEY1, (void *)&wlan_wep128_key1); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey1_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey1_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "network_key = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY2, (void *)&wlan_wep128_key2); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey2_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey2_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key2 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY3, (void *)&wlan_wep128_key3); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey3_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey3_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key3 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY4, (void *)&wlan_wep128_key4); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey4_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey4_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key4 = %s\n", tmp1); } } else { sprintf(config_path, "%s%s", default_config_path, "wpa_psk"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); WRITE_WSC_PARAM(ptr, tmpbuf, "network_key = %s\n", tmp1); } sprintf(config_path, "%s%s", default_config_path, "ssid"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); WRITE_WSC_PARAM(ptr, tmpbuf, "ssid = \"%s\"\n", tmp1); sprintf(config_path, "%s%s", default_config_path, "wsc_pin"); get_result = get_file_content(config_path, config_value); //config_value[strlen(config_value)-1]='\0'; sprintf(tmp1, "%s", config_value); WRITE_WSC_PARAM(ptr, tmpbuf, "pin_code = %s\n", tmp1); if (wlan_chan_num > 14) intVal = 2; else intVal = 1; WRITE_WSC_PARAM(ptr, tmpbuf, "rf_band = %d\n", intVal); #ifdef FOR_DUAL_BAND /* switch to wlan1 */ sprintf(default_config_path, WIFI_CONFIG_ROOT_DIR "/%s/", "wlan1"); //apmib_get(MIB_WLAN_WSC_AUTH, (void *)&wsc_auth); sprintf(config_path, "%s%s", default_config_path, "wsc_auth"); get_result = get_file_content(config_path, config_value); wsc_auth = atoi(config_value); //apmib_get(MIB_WLAN_WSC_ENC, (void *)&wsc_enc); sprintf(config_path, "%s%s", default_config_path, "wsc_enc"); get_result = get_file_content(config_path, config_value); wsc_enc = atoi(config_value); // apmib_get(MIB_WLAN_SSID, (void *)&wlan_ssid); sprintf(config_path, "%s%s", default_config_path, "ssid"); get_result = get_file_content(config_path, config_value); sprintf(wlan_ssid, "%s", config_value); // apmib_get(MIB_WLAN_MODE, (void *)&is_client); sprintf(config_path, "%s%s", default_config_path, "wlan_mode"); get_result = get_file_content(config_path, config_value); is_client = atoi(config_value); //apmib_get(MIB_WLAN_ENCRYPT, (void *)&wlan_encrpty); sprintf(config_path, "%s%s", default_config_path, "encrypt"); get_result = get_file_content(config_path, config_value); wlan_encrpty = atoi(config_value); //apmib_get(MIB_WLAN_WEP, (void *)&wlan_wep); sprintf(config_path, "%s%s", default_config_path, "wep"); get_result = get_file_content(config_path, config_value); wlan_wep = atoi(config_value); //apmib_get(MIB_WLAN_WEP_KEY_TYPE, (void *)&wep_key_type); sprintf(config_path, "%s%s", default_config_path, "wep_key_type"); get_result = get_file_content(config_path, config_value); wep_key_type = atoi(config_value); //apmib_get(MIB_WLAN_WEP_DEFAULT_KEY, (void *)&wep_transmit_key); sprintf(config_path, "%s%s", default_config_path, "wep_default_key"); get_result = get_file_content(config_path, config_value); wep_transmit_key = atoi(config_value); //apmib_get(MIB_WLAN_WSC_DISABLE, (void *)&wlan1_wsc_disabled); // 1104 sprintf(config_path, "%s%s", default_config_path, "wsc_disabled"); get_result = get_file_content(config_path, config_value); wlan1_wsc_disabled = atoi(config_value); //apmib_get(MIB_WLAN_WLAN_DISABLED, (void *)&wlan1_wlan_disabled); // 0908 sprintf(config_path, "%s%s", default_config_path, "wlan_disabled"); get_result = get_file_content(config_path, config_value); wlan1_wlan_disabled = atoi(config_value); if(wlan1_wlan_disabled) wlan1_wsc_disabled = 1 ; // if wlan1 interface is disabled WRITE_WSC_PARAM(ptr, tmpbuf, "#=====wlan1 start==========%d\n",intVal); WRITE_WSC_PARAM(ptr, tmpbuf, "ssid2 = \"%s\"\n",wlan_ssid ); WRITE_WSC_PARAM(ptr, tmpbuf, "auth_type2 = %d\n", wsc_auth); WRITE_WSC_PARAM(ptr, tmpbuf, "encrypt_type2 = %d\n", wsc_enc); // 1104 if(band_select_5g2g!=2) // != dual band { intVal=1; WRITE_WSC_PARAM(ptr, tmpbuf, "wlan1_wsc_disabled = %d\n",intVal); } else // else see if wlan1 is enabled { WRITE_WSC_PARAM(ptr, tmpbuf, "wlan1_wsc_disabled = %d\n", wlan1_wsc_disabled); } is_wep = 0; if (wsc_enc == WSC_ENCRYPT_WEP) is_wep = 1; if (is_wep) { // only allow WEP in none-MANUAL mode (configured by external registrar) if (wlan_encrpty != ENCRYPT_WEP) { printf("WEP mismatched between WPS and host system\n"); free(buf); return -1; } if (wlan_wep <= WEP_DISABLED || wlan_wep > WEP128) { printf("WEP encrypt length error\n"); free(buf); return -1; } wep_transmit_key++; WRITE_WSC_PARAM(ptr, tmpbuf, "wep_transmit_key2 = %d\n", wep_transmit_key); /*whatever key type is ASSIC or HEX always use String-By-Hex fromat ;2011-0419,fixed,need patch with wscd daemon , search 2011-0419*/ if (wlan_wep == WEP64) { //apmib_get(MIB_WLAN_WEP64_KEY1, (void *)&wlan_wep64_key1); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey1_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey1_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "network_key2 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY2, (void *)&wlan_wep64_key2); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey2_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey2_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key22 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY3, (void *)&wlan_wep64_key3); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey3_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey3_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key32 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP64_KEY4, (void *)&wlan_wep64_key4); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey4_64_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 5); tmp1[5] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey4_64_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key42 = %s\n", tmp1); } else { //apmib_get(MIB_WLAN_WEP128_KEY1, (void *)&wlan_wep128_key1); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey1_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey1_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "network_key2 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY2, (void *)&wlan_wep128_key2); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey2_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey2_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key22 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY3, (void *)&wlan_wep128_key3); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey3_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey3_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key32 = %s\n", tmp1); //apmib_get(MIB_WLAN_WEP128_KEY4, (void *)&wlan_wep128_key4); if (wep_key_type == KEY_ASCII) { sprintf(config_path, "%s%s", default_config_path, "wepkey4_128_asc"); get_result = get_file_content(config_path, config_value); sprintf(tmpbuf, "%s", config_value); memcpy(tmp1, tmpbuf, 13); tmp1[13] = '\0'; } else { sprintf(config_path, "%s%s", default_config_path, "wepkey4_128_hex"); get_result = get_file_content(config_path, config_value); sprintf(tmp1, "%s", config_value); } WRITE_WSC_PARAM(ptr, tmpbuf, "wep_key42 = %s\n", tmp1); } } else { //apmib_get(MIB_WLAN_WPA_PSK, (void *)&wlan_wpa_psk); sprintf(config_path, "%s%s", default_config_path, "wpa_psk"); get_result = get_file_content(config_path, config_value); sprintf(wlan_wpa_psk, "%s", config_value); WRITE_WSC_PARAM(ptr, tmpbuf, "network_key2 = %s\n", wlan_wpa_psk); } intVal =2 ; WRITE_WSC_PARAM(ptr, tmpbuf, "#=====wlan1 end==========%d\n",intVal); /*sync the PIN code of wlan0 and wlan1*/ //apmib_set(MIB_HW_WSC_PIN, (void *)wsc_pin); #endif // END of FOR_DUAL_BAND WRITE_WSC_PARAM(ptr, tmpbuf, "device_name = \"%s\"\n", device_name); WRITE_WSC_PARAM(ptr, tmpbuf, "config_by_ext_reg = %d\n", wsc_config_by_ext_reg); len = (int)(((long)ptr)-((long)buf)); fh = open(in, O_RDONLY); if (fh == -1) { printf("open() error [%s]!\n", in); return -1; } lseek(fh, 0L, SEEK_SET); if (read(fh, ptr, status.st_size) != status.st_size) { printf("read() error [%s]!\n", in); return -1; } close(fh); // search UUID field, replace last 12 char with hw mac address ptr = strstr(ptr, "uuid ="); if (ptr) { char tmp2[100]; // apmib_get(MIB_HW_NIC0_ADDR, (void *)&tmp1); sprintf(tmp_config_path, "%s%s", default_config_path, "nic0_addr"); get_result = get_file_content(tmp_config_path, tmp_config_value); if(get_result != -1){ string_to_hex(tmp_config_value,tmp1, 12); convert_bin_to_str(tmp1, 6, tmp2); memcpy(ptr+27, tmp2, 12); } } fh = open(out, O_RDWR|O_CREAT|O_TRUNC, S_IWGRP|S_IRGRP); if (fh == -1) { printf("open() error [%s]!\n", out); return -1; } if (write(fh, buf, len+status.st_size) != len+status.st_size ) { printf("Write() file error [%s]!\n", out); return -1; } close(fh); free(buf); return 0; } #endif #if READ_MIB_FROM_DEVICE #define IW_MAX_PRIV_DEF 64 int get_priv_info_flag=0; int priv_info_number; int iw_get_priv_info(int skfd, char * ifname, struct iw_priv_args * priv, int maxpriv ) { struct iwreq wrq; /* Ask the driver */ wrq.u.data.pointer = (caddr_t) priv; wrq.u.data.length = maxpriv; wrq.u.data.flags = 0; strncpy(wrq.ifr_name, ifname, IFNAMSIZ); if( ioctl(skfd, SIOCGIWPRIV , &wrq)<0 ) return(-1); //if(iw_get_ext(skfd, ifname, SIOCGIWPRIV, &wrq) < 0) // return(-1); return(wrq.u.data.length); } struct iw_priv_args priv[IW_MAX_PRIV_DEF]; static int mib_cmd( char * ifname, /* Dev name */ char * cmdname, /* Command name */ char * args, /* Command line args */ char * out_buf, int out_buf_max_len ) { struct iwreq wrq,*pwrq; u_char buffer[4096]; /* Only that big in v25 and later */ int i = 0,j; /* Start with first command arg */ int k; /* Index in private description table */ int temp; int subcmd = 0; /* sub-ioctl index */ int number; /* Max of private ioctl */ int skfd; pwrq = &wrq; skfd = socket( AF_INET , SOCK_DGRAM, 0); if(skfd < 0) { printf("open socket failure skfd=%d\n",skfd); return skfd; } if( get_priv_info_flag==0 ) { memset( priv , 0 , sizeof(priv) ); number = iw_get_priv_info(skfd, ifname, priv, IW_MAX_PRIV_DEF); if(number <= 0) { /* Could skip this message ? */ fprintf(stderr, "%-8.8s no private ioctls.\n\n",ifname); close(skfd); return(-1); } get_priv_info_flag=1; priv_info_number = number; } else { number = priv_info_number; } /*for( j=0 ; ju.data.length = strlen(args) + 1; if(pwrq->u.data.length > (priv[k].set_args & IW_PRIV_SIZE_MASK)) pwrq->u.data.length = priv[k].set_args & IW_PRIV_SIZE_MASK; /* Fetch string */ memcpy(buffer, args, pwrq->u.data.length); buffer[sizeof(buffer) - 1] = '\0'; i++; break; default: printf("%s %d k=%d number=%d\n",__FUNCTION__,__LINE__,k,number); fprintf(stderr, "Not yet implemented...\n"); close(skfd); return(-1); } if((priv[k].set_args & IW_PRIV_SIZE_FIXED) && (pwrq->u.data.length != (priv[k].set_args & IW_PRIV_SIZE_MASK))) { printf("The command %s need exactly %d argument...\n",cmdname, priv[k].set_args & IW_PRIV_SIZE_MASK); close(skfd); return(-1); } } /* if args to set */ else { printf("ttt4\n"); printf("length=0?\n"); pwrq->u.data.length = 0L; } strncpy(pwrq->ifr_name, ifname, IFNAMSIZ); pwrq->u.data.pointer = (caddr_t) buffer; pwrq->u.data.flags = subcmd; printf("cmd=%d ifname=%s subcmd=%08x\n",priv[k].cmd,pwrq->ifr_name,subcmd); /* Perform the private ioctl */ if(ioctl(skfd, priv[k].cmd , pwrq) < 0) { fprintf(stderr, "Interface doesn't accept private ioctl...\n"); close(skfd); return(-1); } //printf("out_buf_max_len=%d\n",out_buf_max_len); if( pwrq->u.data.length < 4 ) { memset( out_buf , 0 , 4 ); memcpy( out_buf , pwrq->u.data.pointer , pwrq->u.data.length ); pwrq->u.data.length=4; } else { if( pwrq->u.data.length > out_buf_max_len ) { pwrq->u.data.length=out_buf_max_len; } memcpy( out_buf , pwrq->u.data.pointer , pwrq->u.data.length ); } //printf("pwrq->u.data.length=%d\n",pwrq->u.data.length); printf("data=\n"); for( i=0 ; iu.data.length ; i++ ) { printf("%02x ",out_buf[i]); } printf("\n"); close(skfd); return pwrq->u.data.length; } static void generateWpaConf(char *outputFile, int isWds, char *iface) { int fh, intVal, encrypt=0, enable1x, wep,encmode,psk_enable; char buf1[1024], buf2[1024]; char config_path[100]={0}; char config_value[100]={0}; char tmp1[100], tmpbuf[100]; int get_result=0; char default_config_path[64]={0}; int repeater_enabled=0; char buf[128]; int len,i; sprintf(default_config_path, WIFI_CONFIG_ROOT_DIR "/%s/", iface); fh = open(outputFile, O_RDWR|O_CREAT|O_TRUNC, S_IRGRP|S_IWGRP); if (fh == -1) { printf("Create WPA config file error!\n"); return; } if (!isWds) { len=mib_cmd( iface , "get_mib" , "psk_enable" , buf , sizeof(buf) ); if( len<0 ) { printf("ERROR : Execute mib_cmd wepkey1 failure\n"); return; } else { psk_enable = *(int *)buf; printf("psk_enable = %d\n", psk_enable ); } len=mib_cmd( iface , "get_mib" , "encmode" , buf , sizeof(buf) ); if( len<0 ) { printf("ERROR : Execute mib_cmd failure\n"); return; } else { encmode = *(int *)buf; if( encmode==1 || encmode==5 ) { encrypt = 1; } else { if( psk_enable==1 ) { encrypt=2; } else if( psk_enable==2 ) { encrypt=4; } else if( psk_enable==3 ) { encrypt=6; } else { printf("unknow mode psk_enable=%d encmode=%d",psk_enable,encmode); } } printf("2.encrypt=%d\n",encrypt); } sprintf(buf2, "encryption = %d\n", encrypt); WRITE_WPA_FILE(fh, buf2); if(!strcmp(iface, "wlan0-vxd")) { sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "repeater_enabled"); get_result = get_file_content(config_path, config_value); repeater_enabled = atoi(config_value); if(repeater_enabled==1) { sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "repeater_ssid"); get_result = get_file_content(config_path, config_value); } else { //sprintf(config_path, "%s%s", default_config_path, "ssid"); goto aa; } } else { aa: //sprintf(config_path, "%s%s", default_config_path, "ssid"); len=mib_cmd( iface , "get_mib" , "ssid" , config_value , sizeof(config_value) ); if( len<0 ) { printf("ERROR : Execute mib_cmd ssid failure\n"); return -1; } else { config_value[len]=0; printf("ssid=%s\n",config_value); } } sprintf(buf1,"%s", config_value); sprintf(buf2, "ssid = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "enable_1x"); get_result = get_file_content(config_path, config_value); enable1x = atoi(config_value); sprintf(buf2, "enable1x = %d\n", enable1x); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "mac_auth_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "enableMacAuth = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "enable_supp_nonwpa"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); if (intVal){ sprintf(config_path, "%s%s", default_config_path, "supp_nonwpa"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); } sprintf(buf2, "supportNonWpaClient = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); if( encmode==1 ) { sprintf(buf1,"1"); } else if( encmode==5 ) { sprintf(buf1,"2"); } else { buf1[0]=0; } sprintf(buf2, "wepKey = %s\n", buf1); WRITE_WPA_FILE(fh, buf2); if ( encrypt==1 && enable1x ) { len=mib_cmd( iface , "get_mib" , "wepkey1" , buf , sizeof(buf) ); if( len<0 ) { printf("ERROR : Execute mib_cmd wepkey1 failure\n"); return; } else { if( encmode==1 ) { len=5; } else { len=13; } memcpy( tmp1 , buf , len ); tmp1[len] = '\0'; if( len==5 ) { sprintf(buf2, "wepGroupKey = \"%02x%02x%02x%02x%02x\"\n", tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4]); } else if( len==13 ) { sprintf(buf2, "wepGroupKey = \"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\"\n", tmp1[0],tmp1[1],tmp1[2],tmp1[3],tmp1[4], tmp1[5],tmp1[6],tmp1[7],tmp1[8],tmp1[9], tmp1[10],tmp1[11],tmp1[12]); } else { strcpy(buf2, "wepGroupKey = \"\"\n"); printf("ERROR : error wepkey1 len=%d\n",len); } } } else strcpy(buf2, "wepGroupKey = \"\"\n"); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "wpa_auth"); if( get_file_content(config_path, config_value) < 0 ) { printf("ERROR : %s %d : can't open %s\n",__FUNCTION__,__LINE__,config_path); intVal=0; } else { intVal = atoi(config_value); printf("1.authentication = %d\n", intVal); } sprintf(buf2, "authentication = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); len=mib_cmd( iface , "get_mib" , "wpa_cipher" , buf , sizeof(buf) ); if( len<0 ) { printf("ERROR : Execute mib_cmd wpa_cipher failure\n"); return; } else { intVal=*(int *)buf; intVal=*(int *)buf; if( intVal==2 ) { intVal=1; } else if( intVal==8 ) { intVal=2; } else if( intVal==10 ) { intVal=3; } printf("2.wpa_cipher=%d\n",intVal); } sprintf(buf2, "unicastCipher = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); len=mib_cmd( iface , "get_mib" , "wpa2_cipher" , buf , sizeof(buf) ); if( len<0 ) { printf("ERROR : Execute mib_cmd wpa2_cipher failure\n"); return; } else { intVal=*(int *)buf; if( intVal==2 ) { intVal=1; } else if( intVal==8 ) { intVal=2; } else if( intVal==10 ) { intVal=3; } printf("2.wpa2_cipher=%d\n",intVal); } sprintf(buf2, "wpa2UnicastCipher = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "wpa2_pre_auth"); if( get_file_content(config_path, config_value) < 0 ) { printf("%s %d\n",__FUNCTION__,__LINE__); } else { intVal = atoi(config_value); sprintf(buf2, "enablePreAuth = %d\n", intVal); printf("%s\n",buf2); } WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "psk_format"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); if (intVal==0) sprintf(buf2, "usePassphrase = 1\n"); else sprintf(buf2, "usePassphrase = 0\n"); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "wpa_psk"); get_result = get_file_content(config_path, config_value); sprintf(buf1, "%s", config_value); sprintf(buf2, "psk = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "gk_rekey"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "groupRekeyTime = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs_port"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsPort = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs_ip"); get_result = get_file_content(config_path, config_value); sprintf(buf1, "%s", config_value); sprintf(buf2, "rsIP = %s\n",buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs_password"); get_result = get_file_content(config_path, config_value); sprintf(buf1, "%s", config_value); sprintf(buf2, "rsPassword = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs_maxretry"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsMaxReq = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "rs_interval_time"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "rsAWhile = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsEnabled = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_port"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsPort = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_ip"); get_result = get_file_content(config_path, config_value); sprintf(buf1, "%s", config_value); sprintf(buf2, "accountRsIP = %s\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_password"); get_result = get_file_content(config_path, config_value); sprintf(buf1, "%s", config_value); sprintf(buf2, "accountRsPassword = \"%s\"\n", buf1); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_update_enabled"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsUpdateEnabled = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_update_delay"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsUpdateTime = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_maxretry"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsMaxReq = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); sprintf(config_path, "%s%s", default_config_path, "account_rs_interval_time"); get_result = get_file_content(config_path, config_value); intVal = atoi(config_value); sprintf(buf2, "accountRsAWhile = %d\n", intVal); WRITE_WPA_FILE(fh, buf2); } } static int updateWscConf(char *in, char *out, int genpin, char *wlanif_name) { int fh=0,ret=0; struct stat status; char *buf=0, *ptr; int intVal, is_client, is_config, is_registrar, len, is_wep=0, wep_key_type=0, wep_transmit_key=0; char tmpbuf[100], tmp1[100]; char buf_1[128]; int isUpnpEnabled=0, wsc_method = 0, wsc_auth=0, wsc_enc=0; int wlan_network_type=0, wsc_manual_enabled=0, wlan_encrpty=0, wlan_wep=0; #ifdef FOR_DUAL_BAND char wlan_wpa_psk[100]; #endif char wlan_ssid[100], device_name[100];//, wsc_pin[100]; int wlan_chan_num=0, wsc_config_by_ext_reg=0; // int is_vxdif=0; char default_config_path[64]={0}; char config_path[100]={0}; char config_value[100]={0}; char wsc_pin[100]={0}; char tmp_config_value[100]={0}; char tmp_config_path[100]={0}; int get_result=0,psk_en; // WPS2DOTX int wlan0_wlan_disabled=0; int wlan0_wsc_disabled=0; #ifdef FOR_DUAL_BAND int wlan1_wlan_disabled=0; int wlan1_wsc_disabled=0; #endif // WPS2DOTX int band_select_5g2g; // 0:2.4g ; 1:5G ; 2:both printf("\r\n wlanif_name=[%s],__[%s-%u]\r\n",wlanif_name,__FILE__,__LINE__); sprintf(default_config_path, WIFI_CONFIG_ROOT_DIR "/%s/", wlanif_name); //apmib_get(MIB_WLAN_WSC_REGISTRAR_ENABLED, (void *)&is_registrar); sprintf(config_path, "%s%s", default_config_path, "wsc_registrar_enabled"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } is_registrar = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_upnp_enabled"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } isUpnpEnabled = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_method"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } wsc_method = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "network_type"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } wlan_network_type = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_manual_enabled"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } wsc_manual_enabled = atoi(config_value); printf("1.wlan_chan_num=%08x\n",wlan_chan_num); sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "device_name"); if( get_file_content(config_path, config_value) < 0 ) { //return -1; } sprintf(device_name, "%s", config_value); sprintf(config_path, WIFI_CONFIG_ROOT_DIR "/%s", "band2g5g_select"); if( get_file_content(config_path, config_value) < 0 ) { //return -1; } band_select_5g2g=atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_configured"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } is_config = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_configbyextreg"); if( get_file_content(config_path, config_value) < 0 ) { return -1; } wsc_config_by_ext_reg=atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wsc_disabled"); get_result = get_file_content(config_path, config_value); wlan0_wsc_disabled = atoi(config_value); sprintf(config_path, "%s%s", default_config_path, "wlan_disabled"); get_result = get_file_content(config_path, config_value); wlan0_wlan_disabled = atoi(config_value); /* WPS2DOTX ; 2011-0524*/ if(wlan0_wlan_disabled) wlan0_wsc_disabled=1 ; // if wlan0 interface is disabled ; sprintf(config_path, "%s%s", default_config_path, "channel"); get_result = get_file_content(config_path, config_value); wlan_chan_num=atoi(config_value); len=mib_cmd( wlanif_name , "get_mib" , "channel" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd failure\n"); return -1; } else { wlan_chan_num = *(int *)buf_1; printf("2.wlan_chan_num=%08x\n",wlan_chan_num); } len=mib_cmd( wlanif_name , "get_mib" , "psk_enable" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd psk_enable failure\n"); return -1; } else { psk_en = *(int *)buf_1; switch( psk_en ) { case 1: //WPA wsc_auth=2; wlan_encrpty=2; break; case 2: //WPA2 wsc_auth=32; wlan_encrpty=4; break; case 3: //wpa_wpa2_mixed wsc_auth=34; wlan_encrpty=6; break; default : printf("ERROR : unknow mode\n"); return -1; } printf("2.wsc_auth=%08x wlan_encrpty=%d\n",wsc_auth,wlan_encrpty); } if( psk_en==1 ) { len=mib_cmd( wlanif_name , "get_mib" , "wpa_cipher" , buf_1 , sizeof(buf_1) ); } else if( psk_en==2 ) { len=mib_cmd( wlanif_name , "get_mib" , "wpa2_cipher" , buf_1 , sizeof(buf_1) ); } else if( psk_en==3 ) { len=mib_cmd( wlanif_name , "get_mib" , "wpa2_cipher" , buf_1 , sizeof(buf_1) ); } else { printf("ERROR : Execute mode psk_en=%d\n",psk_en); } if( len<0 ) { printf("ERROR : Execute mib_cmd failure\n"); //close(fh); } else { wsc_enc = *(int *)buf_1; switch( wsc_enc ) { case 2: //TKIP wsc_enc=4; break; case 8: //AES wsc_enc=8; break; case 10: //TKIP_AES_mixed wsc_enc=12; break; default : printf("ERROR : unknow mode wsc_enc=%d\n",wsc_enc); return -1; } printf("2.wsc_enc=%08x\n",wsc_enc); } len=mib_cmd( wlanif_name , "get_mib" , "ssid" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd failure\n"); return -1; } else { strncpy( wlan_ssid , buf_1 , len ); wlan_ssid[len]=0; printf("2.wlan_ssid=%s\n",wlan_ssid); } len=mib_cmd( wlanif_name , "get_mib" , "opmode" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd opmode failure\n"); return -1; } else { get_result = *(int *)buf_1; if( get_result==16 ) { is_client=0; } else if( get_result==8 ) { is_client=1; } else { printf("ERROR : unknow opmode mode=%d\n",get_result); ret=-1; goto exit; } printf("2.is_client=%d\n",is_client); } len=mib_cmd( wlanif_name , "get_mib" , "encmode" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd encmode failure\n"); ret=-1; goto exit; } else { wlan_wep = *(int *)buf_1; //printf("2.wlan_wep=%d\n",wlan_wep); if( wlan_wep==1 ) { ; } else if( wlan_wep==1 ) { wlan_wep=5; } else { wlan_wep=0; } printf("2.wlan_wep=%d\n",wlan_wep); } sprintf(config_path, "%s%s", default_config_path, "wsc_pin"); if( get_file_content(config_path, wsc_pin ) < 0 ) { printf("ERROR : oen %s failure\n",config_path); } else { printf("wsc_pin=%s\n",wsc_pin); } if (stat(in, &status) < 0) { printf("stat() error [%s]!\n", in); return -1; } buf = malloc(status.st_size+2048); if (buf == NULL) { printf("malloc() error [%d]!\n", (int)status.st_size+2048); return -1; } ptr = buf; if (is_client == CLIENT_MODE) { { if (is_registrar) { if (!is_config) intVal = MODE_CLIENT_UNCONFIG_REGISTRAR; else intVal = MODE_CLIENT_CONFIG; } else intVal = MODE_CLIENT_UNCONFIG; } } else { if (!is_config) intVal = MODE_AP_UNCONFIG; else intVal = MODE_AP_PROXY_REGISTRAR; } WRITE_WSC_PARAM(ptr, tmpbuf, "mode = %d\n", intVal); if (is_client == CLIENT_MODE) { intVal = 0; } else intVal = isUpnpEnabled; WRITE_WSC_PARAM(ptr, tmpbuf, "upnp = %d\n", intVal); intVal = 0; intVal = wsc_method; //Ethernet(0x2)+Label(0x4)+PushButton(0x80) Bitwise OR if (intVal == 1) //Pin+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PIN); else if (intVal == 2) //PBC+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PBC); if (intVal == 3) //Pin+PBC+Ethernet intVal = (CONFIG_METHOD_ETH | CONFIG_METHOD_PIN | CONFIG_METHOD_PBC); WRITE_WSC_PARAM(ptr, tmpbuf, "config_method = %d\n", intVal); // 1104 WRITE_WSC_PARAM(ptr, tmpbuf, "wlan0_wsc_disabled = %d\n", wlan0_wsc_disabled); WRITE_WSC_PARAM(ptr, tmpbuf, "auth_type = %d\n", wsc_auth); WRITE_WSC_PARAM(ptr, tmpbuf, "encrypt_type = %d\n", wsc_enc); if (wsc_enc == WSC_ENCRYPT_WEP) is_wep = 1; if(wlanif_name != NULL && (strcmp(wlanif_name,"wlan0") == 0 || strcmp(wlanif_name,"wlan1") == 0)) { if (is_client == CLIENT_MODE) { if (wlan_network_type == 0) intVal = 1; else intVal = 2; } else intVal = 1; } else intVal = 1; WRITE_WSC_PARAM(ptr, tmpbuf, "connection_type = %d\n", intVal); WRITE_WSC_PARAM(ptr, tmpbuf, "manual_config = %d\n", wsc_manual_enabled); if (is_wep) { // only allow WEP in none-MANUAL mode (configured by external registrar) //WPS2.0 don't support WEP goto exit; } else { len=mib_cmd( wlanif_name , "get_mib" , "passphrase" , buf_1 , sizeof(buf_1) ); if( len<0 ) { printf("ERROR : Execute mib_cmd passphrase failure\n"); ret=-1; goto exit; } else { printf("passphrase=%s\n",buf_1); } WRITE_WSC_PARAM( ptr, tmpbuf, "network_key = %s\n", buf_1 ); } WRITE_WSC_PARAM(ptr, tmpbuf, "ssid = \"%s\"\n", wlan_ssid); WRITE_WSC_PARAM(ptr, tmpbuf, "pin_code = %s\n", wsc_pin); if (wlan_chan_num > 14) intVal = 2; else intVal = 1; WRITE_WSC_PARAM(ptr, tmpbuf, "rf_band = %d\n", intVal); WRITE_WSC_PARAM(ptr, tmpbuf, "device_name = \"%s\"\n", device_name); WRITE_WSC_PARAM(ptr, tmpbuf, "config_by_ext_reg = %d\n", wsc_config_by_ext_reg); len = (int)(((long)ptr)-((long)buf)); fh = open(in, O_RDONLY); if (fh == -1) { printf("open() error [%s]!\n", in); ret=-1; goto exit; } lseek(fh, 0L, SEEK_SET); if (read(fh, ptr, status.st_size) != status.st_size) { printf("read() error [%s]!\n", in); ret=-1; goto exit; } close(fh); // search UUID field, replace last 12 char with hw mac address ptr = strstr(ptr, "uuid ="); if (ptr) { char tmp2[100]; // apmib_get(MIB_HW_NIC0_ADDR, (void *)&tmp1); sprintf(tmp_config_path, "%s%s", default_config_path, "nic0_addr"); get_result = get_file_content(tmp_config_path, tmp_config_value); if(get_result != -1){ string_to_hex(tmp_config_value,tmp1, 12); convert_bin_to_str(tmp1, 6, tmp2); memcpy(ptr+27, tmp2, 12); } } fh = open(out, O_RDWR|O_CREAT|O_TRUNC, S_IRGRP|S_IWGRP); if (fh == -1) { printf("open() error [%s]!\n", out); goto exit; } if (write(fh, buf, len+status.st_size) != len+status.st_size ) { printf("Write() file error [%s]!\n", out); ret=-1; goto exit; } exit: if( fh ) close(fh); if( buf ) free(buf); return ret; } #endif