int radio_up_down(int radio, int up, int mode) { int i; int vap_num; int vap_status; /*Get VAP num from wlv_rule_num*/ vap_num = nvram_get_vap_num(radio); printf("vap_num is %d\n",vap_num); if(up) { /*Up the VAP which is enable*/ if(WLAN_MODE_AP == mode) { for(i = 0; i < vap_num; i++) { nvram_get_vap_status(radio, i, &vap_status); if(VAP_UP == vap_status) { vap_up_down(radio, i, mode, VAP_UP); } } for(i = 0; i < WDS_VAP_NUM; i++) { set_ap_wds_up(radio, i); } } else if(WLAN_MODE_STA == mode) { vap_up_down(radio, 0, mode, VAP_UP); } //sleep(1); } else { /*Down all the VAPs, down main VAP at last*/ if(WLAN_MODE_AP == mode) { for(i = vap_num - 1; i >= 0; i--) { vap_up_down(radio, i, mode, VAP_DOWN); } for(i = 0; i < WDS_VAP_NUM; i++) { set_ap_wds_down(radio, i); } } else if(WLAN_MODE_STA == mode) { vap_up_down(radio, 0, mode, VAP_DOWN); } //sleep(1); } return T_SUCCESS; }
/* Get Radio status 1: Up 0:Down */ int get_radio_status(int radio, int *radio_status) { int ret; int wlan_mode; int wifi_status; int vap_status; int vap_num = 0; int i; //If wifi0 or wifi1 is down, the radio is down get_wifi_status(radio, &wifi_status); if(RADIO_DOWN == wifi_status) { *radio_status = RADIO_DOWN; return T_SUCCESS; } //Get wlan_mode from nvram first nvram_get_wlan_mode(radio, &wlan_mode); if(WLAN_MODE_AP == wlan_mode) { //Get VAP num of the Radio vap_num = nvram_get_vap_num(radio); //search for all the VAPs, radio is DOWN while all the VAPs are down, or radio is up. for(i=0; i < vap_num; i++) { ret = get_vap_status(radio, i, wlan_mode, &vap_status); if(T_FAILURE == ret) { printf("ERROR:Get VAP Staus Failure!\n"); return T_FAILURE; } if(VAP_UP == vap_status) { *radio_status = RADIO_UP; return T_SUCCESS; } } *radio_status = RADIO_DOWN; } else if(WLAN_MODE_STA == wlan_mode) { ret = get_vap_status(radio, 0, wlan_mode, &vap_status); if(T_FAILURE == ret) { printf("ERROR:Get VAP Staus Failure!\n"); return T_FAILURE; } if(VAP_UP == vap_status) { *radio_status = RADIO_UP; return T_SUCCESS; } else { *radio_status = RADIO_DOWN; } } return T_SUCCESS; }
int set_wlan_basic(int radio) { int vap_enable; int radio_nvram_enable; int i; int vap_num; int wlan_mode = -1; nvram_get_radio_status(radio, &radio_nvram_enable); nvram_get_wlan_mode(radio, &wlan_mode); if(RADIO_DOWN == radio_nvram_enable) { //Kill all the security daemon first // if(WLAN_MODE_AP == wlan_mode) // { radio_up_down(radio, RADIO_DOWN, wlan_mode); kill_all_authentication_daemon(radio, wlan_mode); //wds for(i=0;i<WDS_VAP_NUM;i++) { set_ap_wds_down(radio, i); } // } // else if(WLAN_MODE_STA == wlan_mode) // { // kill_all_authentication_daemon(radio, wlan_mode); // radio_up_down(radio, RADIO_DOWN, wlan_mode); // } return T_SUCCESS; } // if(WLAN_MODE_AP == wlan_mode) // { //Down all the VAPs first radio_up_down(radio, RADIO_DOWN, wlan_mode); //wds for(i=0;i<WDS_VAP_NUM;i++) { set_ap_wds_down(radio, i); } //Kill all the security daemon first kill_all_authentication_daemon(radio, wlan_mode); // } // else if(WLAN_MODE_STA == wlan_mode) // { //Kill all the security daemon first // kill_all_authentication_daemon(radio, wlan_mode); //Down all the VAPs first // radio_up_down(radio, RADIO_DOWN, wlan_mode); // } /*net mode and channel*/ set_ap_wirelessmode_channel(radio); /*ap isolation*/ vap_num = nvram_get_vap_num(radio); //for(i=1; i < vap_num; i++) for(i=0; i < vap_num; i++) { nvram_get_vap_status(radio, i, &vap_enable); if(VAP_ENABLE == vap_enable) { set_ssid(radio, WLAN_MODE_AP, i);//add by frank set_acl(radio, i); //set_enable_ssid(radio, WLAN_MODE_AP, i); set_hidden_ssid(radio, WLAN_MODE_AP, i);//add by frank set_bss_isolation(radio, WLAN_MODE_AP, i);//add by frank set_ap_security(radio, i); #if defined(VLAN_ENABLE) //Deleted by Mario Huang //set_wlan_vlan(radio,i); //preserve 3 seconds for main VAP #endif if(0==i) { sleep(3); } } else if(VAP_DISABLE == vap_enable) { //set_disable_ssid(radio, WLAN_MODE_AP, i); //vap_up_down(radio, i, WLAN_MODE_AP, VAP_DOWN); } } set_ap_isolation(radio);//add by frank, impl on 2014-02-17 //Deleted by Mario Huang 2014-08-12 //set_ap_wmm(radio, 0); //Added by Mario Huang for VLAN test #if defined(VLAN_ENABLE) updateVlan(); #endif //wds for(i=0;i<WDS_VAP_NUM;i++) { set_ap_wds_up(radio, i); } return T_SUCCESS; }