[Feature][T8TSK-202][wifi] wifi6.so add support for with/without connman
Change-Id: I81365bbf2f36eeeeb263a9f8d2d524339f184591
diff --git a/lib/liblynq-wifi6/libwifi6.c b/lib/liblynq-wifi6/libwifi6.c
index 5ee8afc..2ac57a6 100755
--- a/lib/liblynq-wifi6/libwifi6.c
+++ b/lib/liblynq-wifi6/libwifi6.c
@@ -70,6 +70,14 @@
const int SLEEP_TIME_ON_IDLE = 100 * 1000; // usecond
const int MAX_IDLE_COUNT = 600; // 60s
+const char * start_wg870_service_script = "/etc/wg870/scripts/start_wg870_service.sh";
+const char * get_interface_name_script = "/etc/wg870/scripts/get_interface_name.sh";
+const char * start_stop_sta_script = "/etc/wg870/scripts/start_stop_sta.sh";
+const char * start_stop_ap_script = "/etc/wg870/scripts/start_stop_ap.sh";
+const char * sta_status_change_script = "/etc/wg870/scripts/sta_status_change.sh";
+
+static char s_ap_iterface_name[64] = {0};
+
struct local_wpa_ctrl{
struct wpa_ctrl *ctrl;
pthread_mutex_t mutex;
@@ -150,10 +158,21 @@
pthread_mutex_unlock(&s_global_check_mutex);
}
+static int system_call_v(const char * fmt, ...)
+{
+ char str_cmd[256] = {0};
+ va_list args;
+ va_start(args, fmt);
+ vsprintf(str_cmd, fmt, args);
+ va_end(args);
+ printf("system call----------%s\n", str_cmd);
+ return system(str_cmd);
+}
+
static void check_tether_and_notify()
{
RLOGD("check_tether_and_notify called");
- if (0 == system("ifconfig | grep tether"))
+ if (s_ap_iterface_name[0] != '\0' && 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
{
return;
}
@@ -588,7 +607,7 @@
size_t len = MAX_RET;
char msg_notify[MAX_RET];
error_number_s error;
- lynq_wifi_sta_status_s state;
+ lynq_wifi_sta_status_s state, last_state = -1;
int idle_count = 0;
struct wpa_ctrl *lynq_wpa_ctrl = NULL;
@@ -623,6 +642,19 @@
if (state != LYNQ_WIFI_STA_STATUS_SCAN_RESULT)
{
inner_check_connect_error(msg_notify, state, error);
+ if (last_state != state)
+ {
+ if (state == LYNQ_WIFI_STA_STATUS_CONNECT)
+ {
+ system_call_v("%s %s", sta_status_change_script, "connect");
+ }
+ else if (state == LYNQ_WIFI_STA_STATUS_DISCONNECT)
+ {
+ system_call_v("%s %s", sta_status_change_script, "disconnect");
+ }
+ }
+
+ last_state = state;
}
}
}
@@ -767,15 +799,7 @@
goto out_enable;
}
- const char * cmd_check_service =
- "state=`systemctl is-active wg870_drv_insmod.service`\n"
- "[ \"\"$state == \"active\" ] && exit 0\n"
- "[ \"\"$state == \"inactive\" ] && systemctl start wg870_drv_insmod.service\n";
-// if (g_lynq_wpa_ctrl[0] != NULL && g_lynq_wpa_ctrl[1] != NULL) {
-// return 0;
-// }
-
- ret = system(cmd_check_service);
+ ret = system(start_wg870_service_script);
if (ret != 0)
{
//printf("service state %d\n", ret);
@@ -784,50 +808,6 @@
goto out_enable;
}
- RLOGD("check service state is OK");
- for (i=0; i<10; i++)
- {
- if (system("connmanctl technologies | grep -q \"/net/connman/technology/wifi\"") == 0) {
- break;
- }
- usleep(300*1000);
- }
-
- if (i >= 10)
- {
- RLOGE("[wifi error] check connman technologies no wifi");
- ret = -1;
- goto out_enable;
- }
-
- //@todo delete add temp check for socket avilable start (20220606)
- for (i=0; i<60; i++)
- {
- if (system("netstat -an | grep -q DGRAM") == 0) {
- break;
- }
- sleep(1);
- }
-
- if (i >= 60)
- {
- ret = -1;
- goto out_enable;
- }
- //@todo delete add temp check for socket avilable end (20220606)
-
- if (0 != system("ifconfig | grep -q ap0"))
- {
- system("connmanctl enable wifi");
- usleep(300*1000);
- system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 disconnect");
- system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=wlan0 DRIVER interface_create ap0");
- usleep(300*1000);
- system("connmanctl tether wifi on lynq 1qaz@WSX#$%^");
- usleep(300*1000);
- system("wpa_cli -iwpa_wlan0_cmd -p/var/run/ IFNAME=ap0 disconnect");
- }
-
if (g_global_watcher_pid == 0 ) // this thread will not exit when lynq_wifi_disable called,to avoid dead lock,take care
{
ret=pthread_create(&g_global_watcher_pid,NULL,GlobalWatcherThreadProc,NULL);
@@ -1903,11 +1883,11 @@
CHECK_WPA_CTRL(CTRL_AP);
-// system("connmanctl enable wifi");
-// system("connmanctl tether wifi on cy-test 12345678");
-// system("ifconfig wlan0 down");
-// system("ifconfig wlan0 up");
-// system("ifconfig wlan0 up");
+ sprintf(LYNQ_WIFI_CMD, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+ if (0 != exec_cmd(LYNQ_WIFI_CMD, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+ {
+ return -1;
+ }
//DO_OK_FAIL_REQUEST(lynq_remove_all_cmd);
//DO_OK_FAIL_REQUEST(lynq_reconfig_cmd);
@@ -1917,6 +1897,13 @@
check_tether_and_notify();
+ ret = system_call_v("%s %s", start_stop_ap_script, "start");
+ if (ret != 0)
+ {
+ RLOGE("lynq_wifi_ap_start excute script fail");
+ return -1;
+ }
+
return 0;
}
@@ -1938,7 +1925,14 @@
DO_OK_FAIL_REQUEST(LYNQ_WIFI_CMD);
// system("connmanctl tether wifi off");
-
+
+ ret = system_call_v("%s %s", start_stop_ap_script, "stop");
+ if (ret != 0)
+ {
+ RLOGE("lynq_wifi_ap_start excute script fail");
+ return -1;
+ }
+
return 0;
}
@@ -2834,17 +2828,13 @@
CHECK_IDX(idx, CTRL_STA);
CHECK_WPA_CTRL(CTRL_STA);
- system("connmanctl enable wifi");
-
- if (system("ifconfig | grep -q wlan0") != 0)
+ ret = system_call_v("%s %s", start_stop_sta_script, "start");
+ if (ret != 0)
{
+ RLOGE("lynq_wifi_ap_start excute script fail");
return -1;
}
-// DO_OK_FAIL_REQUEST(cmd_remove_all);
-// system(lynq_first_sta_cmd);
-// system(lynq_reconfigure_cmd);
-// DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
system(lynq_enable_sta_cmd);
system(lynq_reconnect_cmd);
// DO_OK_FAIL_REQUEST(lynq_reconnect_cmd);
@@ -2861,19 +2851,16 @@
CHECK_IDX(idx, CTRL_STA);
CHECK_WPA_CTRL(CTRL_STA);
-// curr_state.ap = &ap_info;
-// curr_state.state = NULL;
-
-// if (0 != inner_get_status_info(CTRL_STA, &curr_state) || curr_state.net_no < 0) {
-// return 0;
-// }
-
-// sprintf(lynq_disable_network_cmd, "DISABLE_NETWORK %d", curr_state.net_no);
-// DO_OK_FAIL_REQUEST(lynq_disable_network_cmd);
system(lynq_disable_sta_cmd);
DO_OK_FAIL_REQUEST(cmd_save_config);
-//tmp add cmd fix gsw wlan0 didn't free ip after stop sta
- system("ifconfig wlan0 0.0.0.0");
+
+ ret = system_call_v("%s %s", start_stop_sta_script, "stop");
+ if (ret != 0)
+ {
+ RLOGE("lynq_wifi_ap_start excute script fail");
+ return -1;
+ }
+
return 0;
// return system("connmanctl disable wifi");
}
@@ -3424,7 +3411,7 @@
if (idx == 1)
{
- ifaName = "tether";
+ ifaName = s_ap_iterface_name;
}
else if (idx != 0)
{
@@ -3695,7 +3682,8 @@
int mask_len;
char *p;
char tmp[64] = {0};
- if (exec_cmd("ifconfig tether | grep Mask", str_cmd_ret, max_len) != 0)
+ sprintf(tmp, "ifconfig %s | grep Mask", s_ap_iterface_name);
+ if (exec_cmd(tmp, str_cmd_ret, max_len) != 0)
return -1;
p = strstr(str_cmd_ret, "Mask:");
if (p == NULL)
@@ -3732,6 +3720,12 @@
nmax = 6;
ncheckcount = nidlecount = 0;
+ if (s_ap_iterface_name[0] == '\0')
+ {
+ RLOGE("------gbw thread run\n");
+ return;
+ }
+
RLOGD("------gbw thread run\n");
sprintf(str_cmd, "ip neigh | grep %s | awk '{print $1}'", g_gbw_mac);
while (dest_ip[0] == '\0') {
@@ -3750,28 +3744,27 @@
}
}
- system("tc qdisc del dev tether root > /dev/null 2>&1");
- system("tc qdisc add dev tether root handle 1: htb r2q 1");
- system("tc class add dev tether parent 1: classid 1:1 htb rate 50Mbit ceil 70Mbit prio 2 quantum 3000");
+ system_call_v("tc qdisc del dev %s root > /dev/null 2>&1", s_ap_iterface_name);
+ system_call_v("tc qdisc add dev %s root handle 1: htb r2q 1", s_ap_iterface_name);
+ system_call_v("tc class add dev %s parent 1: classid 1:1 htb rate 50Mbit ceil 70Mbit prio 2 quantum 3000", s_ap_iterface_name);
if (get_tether_route_str(str_cmd_ret, sizeof (str_cmd_ret)) != 0)
{
RLOGD("not get tether info\n");
return;
}
- sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 16 u32 match ip dst %s flowid 1:1", str_cmd_ret);
- system(str_cmd);
- system("tc class add dev tether parent 1: classid 1:2 htb rate 80Mbit ceil 100Mbit prio 0 quantum 3000000");
- sprintf(str_cmd, "tc filter add dev tether parent 1: protocol ip prio 1 u32 match ip dst %s flowid 1:2", dest_ip);
- //printf("----cmd:%s\n", str_cmd);
- system(str_cmd);
+ system_call_v("tc filter add dev %s parent 1: protocol ip prio 16 u32 match ip dst %s flowid 1:1", s_ap_iterface_name, str_cmd_ret);
+ system_call_v("tc class add dev %s parent 1: classid 1:2 htb rate 80Mbit ceil 100Mbit prio 0 quantum 3000000", s_ap_iterface_name);
+ system_call_v("tc filter add dev %s parent 1: protocol ip prio 1 u32 match ip dst %s flowid 1:2", s_ap_iterface_name, dest_ip);
while (1) {
sleep(1);
memset(str_cmd, 0, sizeof(str_cmd));
- if (0 != exec_cmd("tc -s class show dev tether classid 1:1 | grep Sent", str_cmd, sizeof (str_cmd)))
+ memset(str_cmd_ret, 0, sizeof(str_cmd_ret));
+ sprintf(str_cmd, "tc -s class show dev %s classid 1:1 | grep Sent", s_ap_iterface_name);
+ if (0 != exec_cmd(str_cmd, str_cmd_ret, sizeof (str_cmd_ret)))
continue;
//printf("ap1 --- %s\n", str_cmd);
- n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+ n = lynq_split(str_cmd_ret, strlen(str_cmd_ret), ' ', results);
if (n > 9) {
if (strcmp(results[1], "Sent") == 0) {
currAP1Bytes = atoll(results[2]);
@@ -3782,10 +3775,12 @@
}
memset(str_cmd, 0, sizeof(str_cmd));
- if (0 != exec_cmd("tc -s class show dev tether classid 1:2 | grep Sent", str_cmd, sizeof (str_cmd)))
+ memset(str_cmd_ret, 0, sizeof(str_cmd_ret));
+ sprintf(str_cmd, "tc -s class show dev %s classid 1:2 | grep Sent", s_ap_iterface_name);
+ if (0 != exec_cmd(str_cmd, str_cmd_ret, sizeof (str_cmd_ret)))
continue;
//printf("ap2 --- %s\n", str_cmd);
- n = lynq_split(str_cmd, strlen(str_cmd), ' ', results);
+ n = lynq_split(str_cmd_ret, strlen(str_cmd_ret), ' ', results);
if (n > 9) {
if (strcmp(results[1], "Sent") == 0) {
currAP2Bytes = atoll(results[2]);
@@ -3833,9 +3828,8 @@
if (currSetAP1Speed != setAP1Speed) {
setAP1Speed = currSetAP1Speed;
- sprintf(str_cmd, "tc class replace dev tether parent 1: classid 1:1 htb rate %dMbit ceil %dMbit prio 2 quantum 3000", setAP1Speed, (int)(setAP1Speed*1.4));
- //printf("------***change speed: %s\n", str_cmd);
- system(str_cmd);
+ system_call_v(str_cmd, "tc class replace dev %s parent 1: classid 1:1 htb rate %dMbit ceil %dMbit prio 2 quantum 3000",
+ s_ap_iterface_name, setAP1Speed, (int)(setAP1Speed*1.4));
}
}
}
@@ -3894,9 +3888,15 @@
static int stopGBW() {
void* retval;
+ char cmd[64] = {0};
pthread_cancel(g_gbw_watcher_pid);
pthread_join(g_gbw_watcher_pid, &retval);
g_gbw_watcher_pid = 0;
- system("tc qdisc del dev tether root");
+ sprintf(cmd, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+ if (s_ap_iterface_name[0] != '\0')
+ {
+ sprintf(cmd, "tc qdisc del dev %s root", s_ap_iterface_name);
+ system(cmd);
+ }
}
//you.chen add for tv-box end