2019-10-09 08:58:46 +00:00
|
|
|
|
#include "configm.h"
|
|
|
|
|
#include "rpc.h"
|
|
|
|
|
#include "parsefile.h"
|
|
|
|
|
#include "LTE_config.h"
|
2019-10-23 08:10:58 +00:00
|
|
|
|
#include "static_routing.h"
|
2019-10-11 02:30:15 +00:00
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
int g_action = 0;
|
2019-10-17 07:33:55 +00:00
|
|
|
|
int g_status = STOPPED;
|
|
|
|
|
pthread_t lte;
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/*******************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>set<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>action<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>getall<EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*
|
|
|
|
|
* {
|
|
|
|
|
* "operate":"set",
|
|
|
|
|
* "action":"start"
|
|
|
|
|
* }
|
|
|
|
|
*
|
|
|
|
|
* {
|
|
|
|
|
* "operate":"getall"
|
|
|
|
|
* }
|
|
|
|
|
*
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>conf_type<EFBFBD><EFBFBD>action
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK,ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*********************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code LTE_json_parse(pointer input, uint *conf_type, int action)
|
|
|
|
|
{
|
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
if(NULL == input)
|
|
|
|
|
{
|
|
|
|
|
return RET_NULL_INPUT_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cJSON *json_obj = cJSON_Parse(input);
|
|
|
|
|
|
|
|
|
|
if(NULL == json_obj)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("json obj is NULL \n");
|
|
|
|
|
return RET_EMPTY_STRING;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
rpc_json_print(json_obj);
|
|
|
|
|
|
|
|
|
|
cJSON *operate = cJSON_GetObjectItem(json_obj,"operate");
|
|
|
|
|
if((NULL == operate) || (NULL == (operate->valuestring)))
|
|
|
|
|
{
|
|
|
|
|
cJSON_Delete(json_obj);
|
|
|
|
|
return RET_EMPTY_STRING;
|
|
|
|
|
}
|
2019-10-10 07:11:23 +00:00
|
|
|
|
|
|
|
|
|
rpc_log_info("operate is %s\n",operate->valuestring);
|
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
if(strcmp(operate->valuestring,"set") == 0)
|
|
|
|
|
{
|
|
|
|
|
*conf_type = CM_CONFIG_SET;
|
|
|
|
|
}
|
2019-10-10 07:11:23 +00:00
|
|
|
|
else if(strcmp(operate->valuestring,"getall") == 0)
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
|
|
|
|
*conf_type = CM_CONFIG_GET_ALL;
|
2019-10-10 07:11:23 +00:00
|
|
|
|
cJSON_Delete(json_obj);
|
|
|
|
|
return RET_OK;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cJSON_Delete(json_obj);
|
|
|
|
|
return RET_INPUTERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-10 07:11:23 +00:00
|
|
|
|
rpc_log_info("config type is %d\n",*conf_type);
|
2019-10-09 08:58:46 +00:00
|
|
|
|
cJSON *action_type;
|
|
|
|
|
action_type = cJSON_GetObjectItem(json_obj,"action");
|
|
|
|
|
if((NULL == action_type) || (NULL == (action_type->valuestring)))
|
|
|
|
|
{
|
|
|
|
|
cJSON_Delete(json_obj);
|
|
|
|
|
return RET_NULL_INPUT_ERR;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2019-10-10 07:11:23 +00:00
|
|
|
|
rpc_log_info("action is %s\n",action_type->valuestring);
|
2019-10-09 08:58:46 +00:00
|
|
|
|
if(strcmp(action_type->valuestring,"start") == 0)
|
|
|
|
|
{
|
|
|
|
|
g_action = START;
|
|
|
|
|
}
|
|
|
|
|
else if(strcmp(action_type->valuestring,"stop") == 0)
|
|
|
|
|
{
|
|
|
|
|
g_action = STOP;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
cJSON_Delete(json_obj);
|
|
|
|
|
return RET_INPUTERR;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-10 07:11:23 +00:00
|
|
|
|
rpc_log_info("action type is %d\n",g_action);
|
|
|
|
|
cJSON_Delete(json_obj);
|
2019-10-09 08:58:46 +00:00
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>ɱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>1<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>0
|
|
|
|
|
*************************************/
|
2019-10-22 02:51:22 +00:00
|
|
|
|
int killpid()
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
|
|
|
|
char pid[10] =
{0};
|
|
|
|
|
char cmd[20] = {0};
|
|
|
|
|
int pid_int;
|
|
|
|
|
FILE *fp = NULL;
|
2019-10-22 02:51:22 +00:00
|
|
|
|
fp = popen("pgrep pppd","r");
|
2019-10-09 08:58:46 +00:00
|
|
|
|
if(NULL == fp)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("can not get pid\n");
|
2019-10-22 02:51:22 +00:00
|
|
|
|
return 0;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
2019-10-22 02:51:22 +00:00
|
|
|
|
while(fgets(pid,sizeof(pid),fp) != NULL)
|
|
|
|
|
{
|
|
|
|
|
sscanf(pid,"%d",&pid_int);
|
|
|
|
|
rpc_log_info("pid is %d\n",pid_int);
|
|
|
|
|
sprintf(cmd,"kill %d",pid_int);
|
|
|
|
|
system(cmd);
|
|
|
|
|
memset(pid,0,sizeof(pid));
|
|
|
|
|
}
|
2019-10-09 08:58:46 +00:00
|
|
|
|
pclose(fp);
|
2019-10-22 02:51:22 +00:00
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>ж<EFBFBD>4G<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>1<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>0
|
|
|
|
|
*************************************/
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
int start_success()
|
|
|
|
|
{
|
|
|
|
|
char result[RESULT_LENGTH] = {0};
|
|
|
|
|
FILE *f = NULL;
|
|
|
|
|
f = popen("/etc/ppp/ppp-4g status","r");
|
|
|
|
|
if(NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("execuate cmd fail\n");
|
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fgets(result,sizeof(result),f);
|
|
|
|
|
//rpc_log_info("%s\n",result);
|
|
|
|
|
if(strstr(result,"on") != NULL)
|
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2019-10-17 07:33:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ppp0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>صľ<EFBFBD>̬·<EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|
|
|
|
*************************************/
|
2019-10-23 08:10:58 +00:00
|
|
|
|
int recover_static_route()
|
|
|
|
|
{
|
|
|
|
|
FILE *f;
|
|
|
|
|
char buff[LINE_MAX_LENGTH] = {0};
|
|
|
|
|
char buff_total[LINE_MAX_LENGTH*ROUTING_TABLE_MAX_NUMBER] = {0};
|
|
|
|
|
int status;
|
|
|
|
|
|
|
|
|
|
f= fopen(STATIC_ROUTING_PATH,"r");
|
|
|
|
|
|
|
|
|
|
if(NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_error("open config file fail\n");
|
|
|
|
|
return RET_OPEN_FILE_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fseek(f,0,SEEK_SET);
|
|
|
|
|
|
|
|
|
|
while (fgets(buff,sizeof(buff),f) != NULL)
|
|
|
|
|
{
|
|
|
|
|
if(strlen(buff) < 3)
|
|
|
|
|
{
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(strstr(buff,"ppp0") == NULL)
|
|
|
|
|
{
|
|
|
|
|
strcat(buff_total,buff);
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
status = system(buff);
|
|
|
|
|
|
|
|
|
|
if (-1 == status)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_error("system shell error!\n");
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
if (WIFEXITED(status)){
|
|
|
|
|
if (0 == WEXITSTATUS(status)){
|
|
|
|
|
rpc_log_info("run shell successfully!\n");
|
|
|
|
|
strcat(buff_total,buff);
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
rpc_log_error("run shell script fail,script exit code:%d\n",WEXITSTATUS(status));
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
rpc_log_error("exit status = [%d]\n",WEXITSTATUS(status));
|
|
|
|
|
goto next_while;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
next_while:
|
|
|
|
|
if(fgetc(f) == EOF)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fseek(f,-1,SEEK_CUR);
|
|
|
|
|
memset(buff,0,sizeof(buff));
|
|
|
|
|
}
|
|
|
|
|
fclose(f);
|
|
|
|
|
|
|
|
|
|
return conf_file_write(STATIC_ROUTING_PATH,buff_total);
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/*******************************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>´<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣߳<EFBFBD><EFBFBD><EFBFBD>4G״̬<EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ60s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>ģ<EFBFBD>飬<EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>g_status
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|
|
|
|
********************************************************/
|
2019-10-17 07:33:55 +00:00
|
|
|
|
void _start_lte(void)
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
char result[RESULT_LENGTH] = {0};
|
|
|
|
|
int wait_time_phase1 = 0;
|
|
|
|
|
int wait_time_phase2 = 0;
|
2019-10-17 07:33:55 +00:00
|
|
|
|
g_status = STARTING;
|
2019-10-22 02:51:22 +00:00
|
|
|
|
while(wait_time_phase1 < 60)
|
2019-10-17 07:33:55 +00:00
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if(start_success())
|
2019-10-17 07:33:55 +00:00
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
g_status = CONNECTED;
|
|
|
|
|
rpc_log_info("connected\n");
|
2019-10-23 08:39:53 +00:00
|
|
|
|
sleep(1);
|
|
|
|
|
//ִ<>и<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ppp0<70>йصĽű<C4BD>
|
|
|
|
|
if(recover_static_route())
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("recover ppp0 route success");
|
|
|
|
|
}
|
2019-10-22 02:51:22 +00:00
|
|
|
|
return;
|
2019-10-17 07:33:55 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
sleep(1);
|
|
|
|
|
wait_time_phase1 ++;
|
|
|
|
|
//rpc_log_info("time %d\n",wait_time_phase1);
|
2019-10-17 07:33:55 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-23 08:10:58 +00:00
|
|
|
|
if(killpid())
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("kill success\n");
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
rpc_log_info("start init\n");
|
2019-10-17 07:33:55 +00:00
|
|
|
|
system("/etc/ppp/ppp-4g init");
|
2019-10-22 02:51:22 +00:00
|
|
|
|
|
|
|
|
|
FILE *f = NULL;
|
|
|
|
|
f = popen("/etc/ppp/ppp-4g start","r");
|
2019-10-17 07:33:55 +00:00
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if (NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("execuate cmd fail\n");
|
|
|
|
|
g_status = START_FAIL;
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fseek(f,0,SEEK_SET);
|
|
|
|
|
fgets(result,sizeof(result),f);
|
|
|
|
|
rpc_log_info("%s\n",result);
|
2019-10-17 07:33:55 +00:00
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if(strstr(result,"start pppd ppp0") != NULL)
|
|
|
|
|
{
|
|
|
|
|
while(wait_time_phase2 < 60)
|
|
|
|
|
{
|
|
|
|
|
if(start_success())
|
|
|
|
|
{
|
|
|
|
|
g_status = CONNECTED;
|
2019-10-23 08:39:53 +00:00
|
|
|
|
sleep(1);
|
|
|
|
|
//ִ<>и<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>ppp0<70>йصĽű<C4BD>
|
|
|
|
|
if(recover_static_route())
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("recover ppp0 route success");
|
2019-10-22 02:51:22 +00:00
|
|
|
|
}
|
|
|
|
|
pclose(f);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
sleep(1);
|
|
|
|
|
wait_time_phase2
++;
|
|
|
|
|
//rpc_log_info("time %d\n",wait_time_phase2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
pclose(f);
|
|
|
|
|
g_status = START_FAIL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
g_status = START_FAIL;
|
|
|
|
|
pclose(f);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(killpid())
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("kill success\n");
|
|
|
|
|
}
|
2019-10-17 07:33:55 +00:00
|
|
|
|
return;
|
|
|
|
|
}
|
2019-10-09 08:58:46 +00:00
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/****************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>жϿ<EFBFBD><EFBFBD><EFBFBD>4G<EFBFBD>Ľű<EFBFBD><EFBFBD>Ƿ<EFBFBD>ִ<EFBFBD>гɹ<EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
******************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code start_lte()
|
|
|
|
|
{
|
2019-10-17 07:33:55 +00:00
|
|
|
|
if(g_status == STARTING)
|
|
|
|
|
{
|
|
|
|
|
return RET_ANOTHER_IN_PROCESS;
|
|
|
|
|
}
|
2019-10-09 08:58:46 +00:00
|
|
|
|
char result[RESULT_LENGTH] = {0};
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
|
|
FILE *f = NULL;
|
2019-10-10 09:06:04 +00:00
|
|
|
|
|
2019-10-10 08:52:42 +00:00
|
|
|
|
f = popen("/etc/ppp/ppp-4g start","r");
|
2019-10-09 08:58:46 +00:00
|
|
|
|
|
|
|
|
|
if (NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("execuate cmd fail\n");
|
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fseek(f,0,SEEK_SET);
|
|
|
|
|
|
|
|
|
|
fgets(result,sizeof(result),f);
|
|
|
|
|
|
2019-10-10 09:56:00 +00:00
|
|
|
|
rpc_log_info("%s\n",result);
|
2019-10-22 02:51:22 +00:00
|
|
|
|
rpc_log_info("status %d\n",g_status);
|
2019-10-10 09:56:00 +00:00
|
|
|
|
|
|
|
|
|
if(strstr(result,"not install lte") != NULL )
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_NO_LTE_MODULE_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-10 09:56:00 +00:00
|
|
|
|
else if(strstr(result,"pppd apparently already active")
!= NULL)
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_ALREADY_START_ERR;
|
|
|
|
|
}
|
2019-10-10 09:56:00 +00:00
|
|
|
|
else if(strstr(result,"start pppd ppp0") != NULL)
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if (pthread_create(<e,NULL,(void *)&_start_lte,NULL) == 0)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("create new pthread success\n");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("create new pthread fail\n");
|
|
|
|
|
killpid();
|
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_ERR;
|
|
|
|
|
}
|
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_OK;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
2019-10-12 03:49:24 +00:00
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
|
|
|
|
|
/****************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>жϹر<EFBFBD>4G<EFBFBD>Ľű<EFBFBD><EFBFBD>Ƿ<EFBFBD>ִ<EFBFBD>гɹ<EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
******************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code stop_lte()
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if(g_status == STARTING)
|
|
|
|
|
{
|
|
|
|
|
return RET_ANOTHER_IN_PROCESS;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
char result[RESULT_LENGTH] = {0};
|
|
|
|
|
|
|
|
|
|
FILE *f = NULL;
|
2019-10-10 08:52:42 +00:00
|
|
|
|
f = popen("/etc/ppp/ppp-4g stop","r");
|
2019-10-09 08:58:46 +00:00
|
|
|
|
|
|
|
|
|
if (NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("execuate cmd fail\n");
|
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fseek(f,0,SEEK_SET);
|
|
|
|
|
|
|
|
|
|
fgets(result,sizeof(result),f);
|
|
|
|
|
|
2019-10-10 09:56:00 +00:00
|
|
|
|
rpc_log_info("%s\n",result);
|
|
|
|
|
|
|
|
|
|
if(strstr(result,"pppd may be sotped already") != NULL)
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
2019-10-17 07:33:55 +00:00
|
|
|
|
g_status = STOPPED;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_ALREADY_STOP_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
else if((strstr(result,"stop pppd ppp0") != NULL))
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
2019-10-17 07:33:55 +00:00
|
|
|
|
g_status = STOPPED;
|
2019-10-22 02:51:22 +00:00
|
|
|
|
rpc_log_info("%d\n",g_status);
|
2019-10-09 08:58:46 +00:00
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_OK;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
pclose(f);
|
2019-10-12 03:49:24 +00:00
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
/****************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>Ѳ<EFBFBD>ѯ<EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>json
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺status
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>output<EFBFBD><EFBFBD>output_len
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
******************************************/
|
2019-10-22 02:51:22 +00:00
|
|
|
|
ret_code lte_to_json(char *status, pointer output, int *output_len)
|
2019-10-09 08:58:46 +00:00
|
|
|
|
{
|
|
|
|
|
if(NULL == status || NULL == output || NULL == output_len)
|
|
|
|
|
{
|
|
|
|
|
return RET_NULL_INPUT_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
cJSON *ret_root = cJSON_CreateObject();
|
|
|
|
|
if(ret_root == NULL)
|
|
|
|
|
{
|
|
|
|
|
cJSON_Delete(ret_root);
|
|
|
|
|
return RET_EMPTY_STRING;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cJSON_AddStringToObject(ret_root,"status", status);
|
|
|
|
|
|
|
|
|
|
rpc_json_print(ret_root);
|
|
|
|
|
|
|
|
|
|
char *status_info = cJSON_PrintUnformatted(ret_root);
|
|
|
|
|
*output_len = strlen(status_info) + 1;
|
|
|
|
|
memcpy(output, status_info, *output_len);
|
|
|
|
|
|
|
|
|
|
free(status_info);
|
|
|
|
|
cJSON_Delete(ret_root);
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
|
|
|
|
|
/*********************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD>жϲ<EFBFBD>ѯ4G״̬<EFBFBD>Ľű<EFBFBD><EFBFBD>Ƿ<EFBFBD>ִ<EFBFBD>гɹ<EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
**********************************************/
|
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code status_lte(pointer output, int *output_len)
|
|
|
|
|
{
|
|
|
|
|
if((NULL == output) || (NULL == output_len))
|
|
|
|
|
{
|
|
|
|
|
return RET_INPUTERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
char result[RESULT_LENGTH] = {0};
|
|
|
|
|
char status[STATUS_LENGTH] = {0};
|
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
|
|
|
|
|
FILE *f = NULL;
|
2019-10-10 08:52:42 +00:00
|
|
|
|
f = popen("/etc/ppp/ppp-4g status","r");
|
2019-10-09 08:58:46 +00:00
|
|
|
|
if(NULL == f)
|
|
|
|
|
{
|
|
|
|
|
rpc_log_info("execuate cmd fail\n");
|
|
|
|
|
return RET_EXEC_SHELL_ERR;
|
|
|
|
|
}
|
2019-10-11 02:30:15 +00:00
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
fgets(result,sizeof(result),f);
|
2019-10-11 02:30:15 +00:00
|
|
|
|
rpc_log_info("%s\n",result);
|
2019-10-09 08:58:46 +00:00
|
|
|
|
if(strstr(result,"off") != NULL)
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
rpc_log_info("status is %d\n",g_status);
|
2019-10-17 07:33:55 +00:00
|
|
|
|
if(g_status == STARTING)
|
|
|
|
|
{
|
|
|
|
|
strcpy(status,"starting...");
|
|
|
|
|
}
|
|
|
|
|
else if(g_status == STOPPED)
|
|
|
|
|
{
|
|
|
|
|
strcpy(status,"stopped");
|
|
|
|
|
}
|
|
|
|
|
else if(g_status == START_FAIL)
|
|
|
|
|
{
|
|
|
|
|
strcpy(status,"start fail");
|
|
|
|
|
}
|
2019-10-22 02:51:22 +00:00
|
|
|
|
}
|
2019-10-09 08:58:46 +00:00
|
|
|
|
else if(strstr(result,"on") != NULL)
|
|
|
|
|
{
|
2019-10-17 07:33:55 +00:00
|
|
|
|
strcpy(status,"started");
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
2019-10-22 02:51:22 +00:00
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
pclose(f);
|
|
|
|
|
return RET_ERR;
|
|
|
|
|
}
|
2019-10-24 07:08:53 +00:00
|
|
|
|
//<2F><>װjson
|
2019-10-22 02:51:22 +00:00
|
|
|
|
ret = lte_to_json(status,output,output_len);
|
|
|
|
|
pclose(f);
|
|
|
|
|
return ret;
|
2019-10-09 08:58:46 +00:00
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
|
|
|
|
|
/****************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>4Gģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
|
|
|
|
|
******************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code LTE_config_chk(uint source, uint *config_type,
|
|
|
|
|
pointer input, int *input_len,
|
|
|
|
|
pointer output, int *output_len)
|
|
|
|
|
{
|
|
|
|
|
if((NULL == config_type) || (NULL == input) || (NULL == input_len) || (NULL == output_len))
|
|
|
|
|
{
|
|
|
|
|
return RET_NULL_INPUT_ERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
|
|
|
|
|
if(source == CONFIG_FROM_RECOVER1)
|
|
|
|
|
{
|
|
|
|
|
return RET_OK;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(source == CONFIG_FROM_RECOVER2)
|
|
|
|
|
{
|
|
|
|
|
return RET_CHKERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
|
|
|
|
|
ret = LTE_json_parse(input,config_type,g_action);
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*****************************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>4Gģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>config_type<EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
******************************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code LTE_config_proc(uint source, uint config_type,
|
|
|
|
|
pointer input, int input_len,
|
|
|
|
|
pointer output, int *output_len)
|
|
|
|
|
{
|
2019-10-22 02:51:22 +00:00
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
|
|
|
|
|
if(source == CONFIG_FROM_RECOVER1 || source == CONFIG_FROM_RECOVER2)
|
|
|
|
|
{
|
|
|
|
|
ret = start_lte();
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
2019-10-09 08:58:46 +00:00
|
|
|
|
|
|
|
|
|
if(config_type == CM_CONFIG_SET)
|
|
|
|
|
{
|
|
|
|
|
switch(g_action){
|
|
|
|
|
case START:
|
|
|
|
|
ret = start_lte();
|
|
|
|
|
break;
|
|
|
|
|
case STOP:
|
|
|
|
|
ret = stop_lte();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
ret = RET_INPUTERR;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ret = RET_INPUTERR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-24 07:08:53 +00:00
|
|
|
|
|
|
|
|
|
/****************************************
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>4Gģ<EFBFBD><EFBFBD>get_all<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD>룺
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>RET_OK<EFBFBD><EFBFBD>ʧ<EFBFBD>ܴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
******************************************/
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code LTE_config_get_all(uint source,
|
|
|
|
|
pointer output, int *output_len)
|
|
|
|
|
{
|
|
|
|
|
if((NULL == output) || (NULL == output_len))
|
|
|
|
|
{
|
|
|
|
|
return RET_INPUTERR;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-22 02:51:22 +00:00
|
|
|
|
if (source == CONFIG_FROM_RECOVER1 || source == CONFIG_FROM_RECOVER2)
|
|
|
|
|
{
|
|
|
|
|
return RET_OK;
|
|
|
|
|
}
|
|
|
|
|
|
2019-10-09 08:58:46 +00:00
|
|
|
|
ret_code ret = RET_OK;
|
|
|
|
|
|
|
|
|
|
*output_len = 0;
|
|
|
|
|
ret = status_lte(output, output_len);
|
|
|
|
|
|
|
|
|
|
rpc_log_info("status is %s\n",(char *)output);
|
|
|
|
|
return ret;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|