[softap] softap test ok.

This commit is contained in:
lupeng 2018-09-26 15:17:26 +08:00
parent 5bc5ea9eba
commit 2f24836026
3 changed files with 131 additions and 20 deletions

View File

@ -150,20 +150,24 @@ int wifi_change_fw_path(const char *fwpath);
*/ */
#ifndef WIFI_ENTROPY_FILE #ifndef WIFI_ENTROPY_FILE
#define WIFI_ENTROPY_FILE "/etc/wifi/entropy.bin" //#define WIFI_ENTROPY_FILE "/etc/wifi/entropy.bin"
#define WIFI_ENTROPY_FILE "/mnt/UDISK/wifi/entropy.bin"
#endif #endif
int ensure_entropy_file_exists(); int ensure_entropy_file_exists();
/*path of firmware for WIFI in different mode*/ /*path of firmware for WIFI in different mode*/
#ifndef WIFI_DRIVER_FW_PATH_STA #ifndef WIFI_DRIVER_FW_PATH_STA
#define WIFI_DRIVER_FW_PATH_STA "/lib/firmware/fw_bcm43438a0.bin" //#define WIFI_DRIVER_FW_PATH_STA "/lib/firmware/fw_bcm43438a0.bin"
#define WIFI_DRIVER_FW_PATH_STA "/lib/firmware/fw_bcm43436b0.bin"
#endif #endif
#ifndef WIFI_DRIVER_FW_PATH_AP #ifndef WIFI_DRIVER_FW_PATH_AP
#define WIFI_DRIVER_FW_PATH_AP "/lib/firmware/fw_bcm43438a0_apsta.bin" //#define WIFI_DRIVER_FW_PATH_AP "/lib/firmware/fw_bcm43438a0_apsta.bin"
#define WIFI_DRIVER_FW_PATH_AP "/lib/firmware/fw_bcm43436b0_apsta.bin"
#endif #endif
#ifndef WIFI_DRIVER_FW_PATH_P2P #ifndef WIFI_DRIVER_FW_PATH_P2P
#define WIFI_DRIVER_FW_PATH_P2P "/lib/firmware/fw_bcm43438a0_p2p.bin" //#define WIFI_DRIVER_FW_PATH_P2P "/lib/firmware/fw_bcm43438a0_p2p.bin"
#define WIFI_DRIVER_FW_PATH_P2P "/lib/firmware/fw_bcm43436b0_p2p.bin"
#endif #endif
#ifndef WIFI_DRIVER_FW_PATH_PARAM #ifndef WIFI_DRIVER_FW_PATH_PARAM

View File

@ -43,15 +43,18 @@
#include "netd_softap_controller.h" #include "netd_softap_controller.h"
#include "filesystem_config.h" #include "filesystem_config.h"
static const char HOSTAPD_CONF_FILE[] = "/etc/wifi/hostapd.conf"; static const char HOSTAPD_CONF_FILE_PREV[] = "/etc/wifi/hostapd.conf";
static const char HOSTAPD_CONF_FILE[] = "/mnt/UDISK/wifi/hostapd.conf";
static const char HOSTAPD_BIN_FILE[] = "/usr/sbin/hostapd"; static const char HOSTAPD_BIN_FILE[] = "/usr/sbin/hostapd";
static const char SUPP_CONFIG_DIR[] = "/mnt/UDISK/wifi/";
#ifndef SHA256_DIGEST_LENGTH #ifndef SHA256_DIGEST_LENGTH
#define SHA256_DIGEST_LENGTH 32 #define SHA256_DIGEST_LENGTH 32
#endif #endif
#ifndef WIFI_ENTROPY_FILE #ifndef WIFI_ENTROPY_FILE
#define WIFI_ENTROPY_FILE "/etc/wifi/entropy.bin" //#define WIFI_ENTROPY_FILE "/etc/wifi/entropy.bin"
#define WIFI_ENTROPY_FILE "/mnt/UDISK/wifi/entropy.bin"
#endif #endif
#ifndef WIFI_GET_FW_PATH_AP #ifndef WIFI_GET_FW_PATH_AP
@ -93,6 +96,104 @@ SoftapController::SoftapController()
SoftapController::~SoftapController() { SoftapController::~SoftapController() {
} }
*/ */
static int ensure_dir_exits(const char * dir)
{
if(NULL == dir) return -1;
if(NULL == opendir(dir))
{
return mkdir(dir,S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH);
}
return 0;
}
static int ensure_file_exists(const char *config_file,const char *temp_file)
{
char* buf = NULL;
int srcfd, destfd;
struct stat sb;
int nread;
int ret;
ret = access(config_file, R_OK|W_OK);
if ((ret == 0) || (errno == EACCES)) {
goto END;
} else if (errno != ENOENT) {
printf("Cannot access \"%s\": %s\n", config_file, strerror(errno));
goto ERR;
}
srcfd = TEMP_FAILURE_RETRY(open(temp_file, O_RDONLY));
if (srcfd < 0) {
printf("Cannot open \"%s\": %s\n", temp_file, strerror(errno));
goto ERR;
}
destfd = TEMP_FAILURE_RETRY(open(config_file, O_CREAT|O_RDWR, 0660));
if (destfd < 0) {
close(srcfd);
printf("Cannot create \"%s\": %s\n", config_file, strerror(errno));
goto ERR;
}
buf = (char*)calloc(1, sizeof(char)*2048);
if(buf == NULL)
{
printf("Cannot malloc buf!\n");
goto ERR;
}
while ((nread = TEMP_FAILURE_RETRY(read(srcfd, buf, sizeof(buf)))) != 0) {
if (nread < 0) {
printf("Error reading \"%s\": %s\n", temp_file, strerror(errno));
close(srcfd);
close(destfd);
unlink(config_file);
goto ERR;
}
TEMP_FAILURE_RETRY(write(destfd, buf, nread));
memset(buf, 0, 2048);
}
close(destfd);
close(srcfd);
/* chmod is needed because open() didn't set permisions properly */
if (chmod(config_file, 0660) < 0) {
printf("Error changing permissions of %s to 0660: %s\n",config_file, strerror(errno));
unlink(config_file);
goto ERR;
}
END:
if(buf) free(buf);
return 0;
ERR:
if(buf) free(buf);
return -1;
}
static int check_conf_file()
{
if(ensure_dir_exits(SUPP_CONFIG_DIR))
{
printf("ensure_dir_exits %s fail\n", SUPP_CONFIG_DIR);
return -1;
}
if(ensure_file_exists(HOSTAPD_CONF_FILE,HOSTAPD_CONF_FILE_PREV))
{
printf("ensure_file_exists %s error\n", HOSTAPD_CONF_FILE);
return -1;
}
return 0;
}
static void sig_chld(int signo) static void sig_chld(int signo)
{ {
int status; int status;
@ -193,7 +294,7 @@ int is_softap_started() {
* argv[6] - Security:wpa-psk/wpa2-psk/open * argv[6] - Security:wpa-psk/wpa2-psk/open
* argv[7] - Key * argv[7] - Key
*/ */
int set_softap(int set_num, char *argv[]) { int set_softap(int argc, char *argv[]) {
char psk_str[2*SHA256_DIGEST_LENGTH+1]; char psk_str[2*SHA256_DIGEST_LENGTH+1];
tRESPONSE_CODE ret = SOFTAP_STATUS_RESULT; tRESPONSE_CODE ret = SOFTAP_STATUS_RESULT;
int i = 0; int i = 0;
@ -207,7 +308,13 @@ int set_softap(int set_num, char *argv[]) {
char wbuf[FW_BUF_SIZE] = {0}; char wbuf[FW_BUF_SIZE] = {0};
char fbuf[FW_BUF_SIZE] = {0}; char fbuf[FW_BUF_SIZE] = {0};
if (set_num < 5) { if(check_conf_file() == -1)
{
printf("Softap conf file path err!");
return OPERATION_FAILED;
}
if (argc < 5) {
printf("Softap set is missing arguments. Please use:"); printf("Softap set is missing arguments. Please use:");
printf("softap <wlan iface> <SSID> <hidden/broadcast> <channel> <wpa2?-psk|open> <passphrase>"); printf("softap <wlan iface> <SSID> <hidden/broadcast> <channel> <wpa2?-psk|open> <passphrase>");
return COMMAND_SYNTAX_ERROR; return COMMAND_SYNTAX_ERROR;
@ -216,7 +323,7 @@ int set_softap(int set_num, char *argv[]) {
if (!strcasecmp(argv[4], "hidden")) if (!strcasecmp(argv[4], "hidden"))
hidden = 1; hidden = 1;
if (set_num >= 5) { if (argc >= 5) {
channel = atoi(argv[5]); channel = atoi(argv[5]);
if (channel <= 0) if (channel <= 0)
channel = AP_CHANNEL_DEFAULT; channel = AP_CHANNEL_DEFAULT;
@ -232,7 +339,7 @@ int set_softap(int set_num, char *argv[]) {
"hw_mode=g\nignore_broadcast_ssid=%d\n", "hw_mode=g\nignore_broadcast_ssid=%d\n",
argv[2], argv[3], channel, hidden); argv[2], argv[3], channel, hidden);
if (set_num > 7) { if (argc > 7) {
if (!strcmp(argv[6], "wpa-psk")) { if (!strcmp(argv[6], "wpa-psk")) {
generate_psk(argv[3], argv[7], psk_str); generate_psk(argv[3], argv[7], psk_str);
/* /*
@ -252,7 +359,7 @@ int set_softap(int set_num, char *argv[]) {
*/ */
sprintf(fbuf, "%s", wbuf); sprintf(fbuf, "%s", wbuf);
} }
} else if (set_num > 6) { } else if (argc > 6) {
if (!strcmp(argv[6], "open")) { if (!strcmp(argv[6], "open")) {
/* /*
asprintf(&fbuf, "%s", wbuf); asprintf(&fbuf, "%s", wbuf);
@ -310,32 +417,32 @@ int set_softap(int set_num, char *argv[]) {
* argv[2] - interface name * argv[2] - interface name
* argv[3] - AP or P2P or STA * argv[3] - AP or P2P or STA
*/ */
int fw_reload_softap(int set_num, char *argv[]) int fw_reload_softap(int argc, char *argv[])
{ {
int i = 0; int i = 0;
char *fwpath = NULL; char *fwpath = NULL;
if (set_num < 1) { if (argc < 4) {
printf("SoftAP fwreload is missing arguments. Please use: softap <wlan iface> <AP|P2P|STA>"); printf("SoftAP fwreload is missing arguments. Please use: softap <wlan iface> <AP|P2P|STA>");
printf("fw_reload_softap: argc is %d\n",set_num); printf("fw_reload_softap: argc is %d\n",argc);
return COMMAND_SYNTAX_ERROR; return COMMAND_SYNTAX_ERROR;
} }
if (strcmp(argv[0], "AP") == 0) { if (strcmp(argv[3], "AP") == 0) {
fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_AP); fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_AP);
} else if (strcmp(argv[0], "P2P") == 0) { } else if (strcmp(argv[3], "P2P") == 0) {
fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_P2P); fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_P2P);
} else if (strcmp(argv[0], "STA") == 0) { } else if (strcmp(argv[3], "STA") == 0) {
fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_STA); fwpath = (char *)wifi_get_fw_path(WIFI_GET_FW_PATH_STA);
} }
if (!fwpath) if (!fwpath)
return COMMAND_PARAMETER_ERROR; return COMMAND_PARAMETER_ERROR;
if (wifi_change_fw_path((const char *)fwpath)) { if (wifi_change_fw_path((const char *)fwpath)) {
printf("Softap fwReload failed\n"); printf("Softap fwReload failed");
return OPERATION_FAILED; return OPERATION_FAILED;
} }
else { else {
printf("Softap fwReload - Ok\n"); printf("Softap fwReload - Ok");
} }
return SOFTAP_STATUS_RESULT; return SOFTAP_STATUS_RESULT;
} }

@ -1 +1 @@
Subproject commit e211f328b4433eebb596c5e2c9bc57a63ab39e1a Subproject commit c5b154eb7d4ff8e14750c4a4e50ec48bfd64b1cb