Mod aaa-12 修改静态路由内存泄漏问题

SOL
修改人:tongyebin
检视人:
This commit is contained in:
tongyebin 2019-09-09 14:40:56 +08:00
parent a266a1b4b0
commit dff4a537f2
2 changed files with 224 additions and 122 deletions

View File

@ -25,6 +25,14 @@
#define IPV6_VERSION 6
#define ACTION_LENGTH 10
#define BOTH_GW_AND_DEV 1
#define ONLY_GW 2
#define ONLY_DEV 3
#define IPV4_MIN_NETMASK 0
#define IPV4_MAX_NETMASK 32
#define STATIC_ROUTING_PATH "/etc/network/static_routing"

View File

@ -48,6 +48,7 @@ ret_code routing_to_json(int count, routing_t *buff_total, pointer output, int *
if(json_array == NULL)
{
cJSON_Delete(json_array);
cJSON_Delete(ret_root);
return RET_EMPTY_STRING;
}
if(count > 0)
@ -81,6 +82,8 @@ ret_code routing_to_json(int count, routing_t *buff_total, pointer output, int *
cJSON_AddItemToObject(ret_root,"route",json_array);
}
rpc_json_print(ret_root);
json_routing = cJSON_PrintUnformatted(ret_root);
@ -88,22 +91,26 @@ ret_code routing_to_json(int count, routing_t *buff_total, pointer output, int *
memcpy(output, json_routing, *output_len);
free(json_routing);
cJSON_Delete(ret_root);
cJSON_Delete(ret_root);
return ret;
}
/*解析json到结构体*/
ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff)
{
cJSON *json_obj, *operate, *route, *version, *destip, *netmask, *gateway, *dev, *metric;
cJSON *json_obj, *operate, *route, *version, *destip, *netmask, *gateway, *dev, *metric;
json_obj = cJSON_Parse(input);
if (NULL == input)
{
return RET_EMPTY_STRING;
}
json_obj = cJSON_Parse(input);
if(NULL == json_obj)
{
rpc_log_info("json obj is NULL \n");
cJSON_Delete(json_obj);
return RET_EMPTY_STRING;
}
@ -111,7 +118,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
operate = cJSON_GetObjectItem(json_obj,"operate");
if(NULL == operate)
if((NULL == operate) || (NULL == (operate->valuestring)))
{
cJSON_Delete(json_obj);
return RET_EMPTY_STRING;
@ -129,10 +136,12 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
else if (strcmp(operate->valuestring,"getall") == 0)
{
*conf_type = CM_CONFIG_GET_ALL;
cJSON_Delete(json_obj);
return RET_OK;
}
else
{
cJSON_Delete(json_obj);
return RET_WRONG_TYPE;
}
@ -147,6 +156,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
version = cJSON_GetObjectItem(route,"version");
if(!version)
{
cJSON_Delete(json_obj);
return RET_VERSION_ERR;
}
else
@ -157,8 +167,9 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
rpc_log_info("version:%d \n", conf_buff->version);
destip = cJSON_GetObjectItem(route,"destip");
if(!destip)
if((!destip) || (NULL == (destip->valuestring)))
{
cJSON_Delete(json_obj);
return RET_DESTIP_ERR;
}
else
@ -170,6 +181,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
netmask = cJSON_GetObjectItem(route,"netmask");
if((!netmask) || (netmask->valueint < 0) || (netmask->valueint > 128))
{
cJSON_Delete(json_obj);
return RET_NETMASK_ERR;
}
else
@ -179,9 +191,8 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
rpc_log_info("netmask:%d \n", conf_buff->netmask);
gateway = cJSON_GetObjectItem(route,"gateway");
if(!gateway)
if((!gateway) || (NULL == (gateway->valuestring)))
{
//memset(conf_buff->gateway,'\0',sizeof(conf_buff->gateway));
strcpy(conf_buff->gateway,"");
}
else
@ -191,7 +202,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
rpc_log_info("gateway:%s \n", conf_buff->gateway);
dev = cJSON_GetObjectItem(route,"dev");
if(!dev)
if((!dev) || (NULL == (dev->valuestring)))
{
strcpy(conf_buff->dev,"");
}
@ -205,6 +216,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
if((!metric) || (metric->valueint) < 0 || (metric->valueint)
> 10000)
{
cJSON_Delete(json_obj);
return RET_METRIC_ERR;
}
else
@ -213,8 +225,7 @@ ret_code routing_json_parse(pointer input, uint *conf_type, routing_t *conf_buff
}
rpc_log_info("metric:%d \n", conf_buff->metric);
cJSON_Delete(json_obj);
cJSON_Delete(json_obj);
return RET_OK;
}
@ -226,8 +237,13 @@ ret_code insert_into_file(char *string)
{
FILE *f;
ret_code ret = RET_OK;
char temp_buff[LINE_MAX_LENGTH];
char temp_buff[LINE_MAX_LENGTH] = {0};
int flag = 0;
if (NULL == string)
{
return RET_EMPTY_STRING;
}
rpc_log_info("string: %s\n",string);
@ -269,10 +285,14 @@ ret_code insert_into_file(char *string)
/*从配置文件中删除*/
ret_code delete_from_file(char *string)
{
if (NULL == string)
{
return RET_EMPTY_STRING;
}
FILE *f;
ret_code ret = RET_ERR;
int length;
char buff_line[LINE_MAX_LENGTH];
char buff_line[LINE_MAX_LENGTH] = {0};
int flag =0;
int string_length = strlen(string);
rpc_log_info("string length:%d\n",string_length);
@ -285,12 +305,10 @@ ret_code delete_from_file(char *string)
}
fseek(f,0,SEEK_END);
length = ftell(f);
int length = ftell(f);
char buff[length];
memset(buff,0,sizeof(buff));
memset(buff_line,0,sizeof(buff_line));
fseek(f,0,SEEK_SET);
@ -337,13 +355,13 @@ ret_code add_routing_exe (char *string)
{
int status;
ret_code ret = RET_OK;
rpc_log_info("string:%s\n",string);
if(NULL == string)
{
return RET_EMPTY_STRING;
}
rpc_log_info("string:%s\n",string);
status = system(string);
if (-1 == status)
@ -426,22 +444,26 @@ ret_code del_routing_exe (char *string, char *string_del)
/*判断gatewaydev是否为空*/
void judge_para(int *flag, char *gateway, char *dev)
{
if((NULL == flag) || (NULL == gateway) || (NULL == dev))
{
return RET_EMPTY_STRING;
}
if (strcmp(gateway,"") != 0)
{
if (strcmp(dev,"") != 0)
{
*flag = 1;
*flag = BOTH_GW_AND_DEV;
}
else
{
*flag = 2;
*flag = ONLY_GW;
}
}
else
{
*flag = 3;
*flag = ONLY_DEV;
}
}
@ -449,21 +471,26 @@ void judge_para(int *flag, char *gateway, char *dev)
/*用flag来标志是否需要解析gw和dev*/
void judge_buff(int *flag, char *buff)
{
if((NULL == flag) || (NULL == buff))
{
return RET_EMPTY_STRING;
}
if (strstr(buff,"gw") != NULL)
{
if (strstr(buff,"dev") != NULL)
{
*flag = 1;
*flag = BOTH_GW_AND_DEV;
}
else
{
*flag = 2;
*flag = ONLY_GW;
}
}
else
{
*flag = 3;
*flag = ONLY_DEV;
}
}
@ -471,44 +498,47 @@ void judge_buff(int *flag, char *buff)
/*配置默认路由*/
ret_code default_routing_proc(routing_t *conf_buff, uint config_type){
char string[STRING_LENGTH];
char string_del[STRING_LENGTH];
//uint config_type = conf_buff->conf_type;
char *gw_t = conf_buff->gateway;
char *dev_t = conf_buff->dev;
int metric_t = conf_buff->metric;
ret_code ret = RET_OK;
int flag = 0;
if (conf_buff == NULL)
{
return RET_EMPTY_STRING;
}
char string[STRING_LENGTH] = {0};
char string_del[STRING_LENGTH] = {0};
char *gw_t = conf_buff->gateway;
char *dev_t = conf_buff->dev;
int metric_t = conf_buff->metric;
ret_code ret = RET_OK;
int flag = 0;
judge_para(&flag,gw_t,dev_t);
memset(string, 0, sizeof(string));
memset(string_del, 0, sizeof(string_del));
/*根据config_type判断添加还是删除,
version判断是IPV4还是IPV6
flag的值组装string*/
if (config_type == CM_CONFIG_ADD)
{
if (metric_t < 1)
{
return RET_METRIC_ERR;
}
if(conf_buff->version == IPV4_VERSION)
{
switch (flag) {
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route add default gw %s dev %s metric %d\n",
gw_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
case 2:
case ONLY_GW:
sprintf(string,"route add default gw %s metric %d\n",gw_t,metric_t);
ret = add_routing_exe(string);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route add default dev %s metric %d\n",dev_t,metric_t);
ret = add_routing_exe(string);
break;
@ -520,16 +550,16 @@ ret_code default_routing_proc(routing_t *conf_buff, uint config_type){
else if (conf_buff->version == IPV6_VERSION)
{
switch (flag) {
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route -A inet6 add default gw %s dev %s metric %d\n",
gw_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
case 2:
case ONLY_GW:
sprintf(string,"route -A inet6 add default gw %s metric %d\n",gw_t,metric_t);
ret = add_routing_exe(string);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route -A inet6 add default dev %s metric %d\n",dev_t,metric_t);
ret = add_routing_exe(string);
break;
@ -549,19 +579,19 @@ ret_code default_routing_proc(routing_t *conf_buff, uint config_type){
if(conf_buff->version == IPV4_VERSION)
{
switch (flag) {
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route del default gw %s dev %s metric %d",
gw_t,dev_t,metric_t);
sprintf(string_del,"route add default gw %s dev %s metric %d",
gw_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 2:
case ONLY_GW:
sprintf(string,"route del default gw %s metric %d",gw_t,metric_t);
sprintf(string_del,"route add default gw %s metric %d",gw_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route del default dev %s metric %d",dev_t,metric_t);
sprintf(string_del,"route add default dev %s metric %d",dev_t,metric_t);
ret = del_routing_exe(string,string_del);
@ -573,20 +603,25 @@ ret_code default_routing_proc(routing_t *conf_buff, uint config_type){
else if(conf_buff->version == IPV6_VERSION)
{
if (metric_t < 1)
{
return RET_METRIC_ERR;
}
switch (flag) {
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route -A inet6 del default gw %s dev %s metric %d",
gw_t,dev_t,metric_t);
sprintf(string_del,"route -A inet6 add default gw %s dev %s metric %d",
gw_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 2:
case ONLY_GW:
sprintf(string,"route -A inet6 del default gw %s metric %d",gw_t,metric_t);
sprintf(string_del,"route -A inet6 add default gw %s metric %d",gw_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route -A inet6 del default dev %s metric %d",dev_t,metric_t);
sprintf(string_del,"route -A inet6 add default dev %s metric %d",dev_t,metric_t);
ret = del_routing_exe(string,string_del);
@ -616,14 +651,20 @@ ret_code default_routing_proc(routing_t *conf_buff, uint config_type){
shell*/
ret_code routing_add(routing_t *conf_buff)
{
char string[STRING_LENGTH];
uint version_t = conf_buff->version;
if(NULL == conf_buff)
{
return RET_EMPTY_STRING;
}
char string[STRING_LENGTH] = {0};
uint version_t = conf_buff->version;
uint netmask_t = conf_buff->netmask;
char route_type[10] = {0};
ret_code ret = RET_OK;
char *destip_t = conf_buff->destip;
char *destip_t = conf_buff->destip;
char *gw_t = conf_buff->gateway;
char *dev_t = conf_buff->dev;
int metric_t = conf_buff->metric;
int flag = 0;
@ -635,16 +676,14 @@ ret_code routing_add(routing_t *conf_buff)
judge_para(&flag,gw_t,dev_t);
rpc_log_info("flag: %d\n",flag);
memset(string, 0, sizeof(string));
if(version_t == IPV4_VERSION)
{
if (netmask_t > 0 && netmask_t < 32)
if (netmask_t > IPV4_MIN_NETMASK && netmask_t < IPV4_MAX_NETMASK)
{
strcpy(route_type,"-net");
}
else if(netmask_t == 32)
else if(netmask_t == IPV4_MAX_NETMASK)
{
strcpy(route_type,"-host");
}
@ -655,15 +694,15 @@ ret_code routing_add(routing_t *conf_buff)
}
switch (flag){
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route add %s %s/%d gw %s dev %s metric %d\n",route_type,destip_t,netmask_t,gw_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
case 2:
case ONLY_GW:
sprintf(string,"route add %s %s/%d gw %s metric %d\n",route_type,destip_t,netmask_t,gw_t,metric_t);
ret = add_routing_exe(string);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route add %s %s/%d dev %s metric %d\n",route_type,destip_t,netmask_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
@ -675,15 +714,15 @@ ret_code routing_add(routing_t *conf_buff)
else if (version_t == IPV6_VERSION)
{
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route -A inet6 add %s/%d gw %s dev %s metric %d\n",destip_t,netmask_t,gw_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
case 2:
case ONLY_GW:
sprintf(string,"route -A inet6 add %s/%d gw %s metric %d\n",destip_t,netmask_t,gw_t,metric_t);
ret = add_routing_exe(string);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route -A inet6 add %s/%d dev %s metric %d\n",destip_t,netmask_t,dev_t,metric_t);
ret = add_routing_exe(string);
break;
@ -699,8 +738,13 @@ ret_code routing_add(routing_t *conf_buff)
ret_code routing_del(routing_t *conf_buff)
{
char string[STRING_LENGTH];
char string_del[STRING_LENGTH];
if(NULL == conf_buff)
{
return RET_EMPTY_STRING;
}
char string[STRING_LENGTH] = {0};
char string_del[STRING_LENGTH] = {0};
uint version_t = conf_buff->version;
uint netmask_t = conf_buff->netmask;
char route_type[10] = {0};
@ -713,16 +757,13 @@ ret_code routing_del(routing_t *conf_buff)
judge_para(&flag,gw_t,dev_t);
memset(string, 0, sizeof(string));
memset(string_del, 0, sizeof(string_del));
if(version_t == IPV4_VERSION)
{
if (netmask_t > 0 && netmask_t < 32)
if (netmask_t > IPV4_MIN_NETMASK && netmask_t < IPV4_MAX_NETMASK)
{
strcpy(route_type,"-net");
}
else if(netmask_t == 32)
else if(netmask_t == IPV4_MAX_NETMASK)
{
strcpy(route_type,"-host");
}
@ -732,17 +773,17 @@ ret_code routing_del(routing_t *conf_buff)
}
switch (flag){
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route del %s %s/%d gw %s dev %s metric %d",route_type,destip_t,netmask_t,gw_t,dev_t,metric_t);
sprintf(string_del,"route add %s %s/%d gw %s dev %s metric %d",route_type,destip_t,netmask_t,gw_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 2:
case ONLY_GW:
sprintf(string,"route del %s %s/%d gw %s metric %d",route_type,destip_t,netmask_t,gw_t,metric_t);
sprintf(string_del,"route add %s %s/%d gw %s metric %d",route_type,destip_t,netmask_t,gw_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route del %s %s/%d dev %s metric %d",route_type,destip_t,netmask_t,dev_t,metric_t);
sprintf(string_del,"route add %s %s/%d dev %s metric %d",route_type,destip_t,netmask_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
@ -754,18 +795,23 @@ ret_code routing_del(routing_t *conf_buff)
else if (version_t == IPV6_VERSION)
{
if (metric_t < 1)
{
return RET_METRIC_ERR;
}
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sprintf(string,"route -A inet6 del %s/%d gw %s dev %s metric %d",destip_t,netmask_t,gw_t,dev_t,metric_t);
sprintf(string_del,"route -A inet6 add %s/%d gw %s dev %s metric %d",destip_t,netmask_t,gw_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 2:
case ONLY_GW:
sprintf(string,"route -A inet6 del %s/%d gw %s metric %d",destip_t,netmask_t,gw_t,metric_t);
sprintf(string_del,"route -A inet6 add %s/%d gw %s metric %d",destip_t,netmask_t,gw_t,metric_t);
ret = del_routing_exe(string,string_del);
break;
case 3:
case ONLY_DEV:
sprintf(string,"route -A inet6 del %s/%d dev %s metric %d",destip_t,netmask_t,dev_t,metric_t);
sprintf(string_del,"route -A inet6 add %s/%d dev %s metric %d",destip_t,netmask_t,dev_t,metric_t);
ret = del_routing_exe(string,string_del);
@ -783,7 +829,7 @@ ret_code get_all_from_file (pointer output, int *output_len)
{
int ret = RET_OK;
FILE *f;
char buff[LINE_MAX_LENGTH];
char buff[LINE_MAX_LENGTH] = {0};
int ipv4_count = 0;
int ipv6_count = 0;
int count = 0;
@ -797,8 +843,6 @@ ret_code get_all_from_file (pointer output, int *output_len)
char dev[INTERFACE_MAX_LENGTH] = {0};
int metric = 100;
rpc_log_info("check1\n");
f = fopen(STATIC_ROUTING_PATH,"r");
if(NULL == f)
@ -811,10 +855,10 @@ ret_code get_all_from_file (pointer output, int *output_len)
//buff_total = (routing_t *)malloc(ROUTING_TABLE_MAX_NUMBER*sizeof(routing_t));
if(buff_total == NULL)
{
fclose(f);
return RET_EMPTY_STRING;
}
memset(buff,0,sizeof(buff));
memset(buff_total,0,sizeof(buff_total));
fseek(f,0,SEEK_SET);
@ -834,17 +878,23 @@ ret_code get_all_from_file (pointer output, int *output_len)
{
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sscanf(buff,"%*s%*s%*s%*s%*s%*s%s%*s%s%*s%d",gateway,dev, &metric);
break;
case 2:
case ONLY_GW:
sscanf(buff,"%*s%*s%*s%*s%*s%*s%s%*s%d",gateway, &metric);
break;
case 3:
case ONLY_DEV:
sscanf(buff,"%*s%*s%*s%*s%*s%*s%s%*s%d",dev, &metric);
break;
default:
ret = RET_ERR;
if(buff_total)
{
rpc_free(buff_total);
buff_total = NULL;
}
fclose(f);
return RET_ERR;
}
netmask = 0;
strcpy(destip,"::");
@ -854,17 +904,23 @@ ret_code get_all_from_file (pointer output, int *output_len)
{
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sscanf(buff,"%*s%*s%*s%*s %[^/]/%d%*s%s%*s%s%*s%d",destip,&netmask,gateway,dev, &metric);
break;
case 2:
case ONLY_GW:
sscanf(buff,"%*s%*s%*s%*s %[^/]/%d%*s%s%*s%d",destip,&netmask,gateway,&metric);
break;
case 3:
case ONLY_DEV:
sscanf(buff,"%*s%*s%*s%*s %[^/]/%d%*s%s%*s%d",destip,&netmask,dev,&metric);
break;
default:
ret = RET_ERR;
if(buff_total)
{
rpc_free(buff_total);
buff_total = NULL;
}
fclose(f);
return RET_ERR;
}
ipv6_count++;
}
@ -873,17 +929,23 @@ ret_code get_all_from_file (pointer output, int *output_len)
{
version = IPV4_VERSION;
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sscanf(buff,"%*s%*s%*s%*s%s%*s%s%*s%d",gateway,dev, &metric);
break;
case 2:
case ONLY_GW:
sscanf(buff,"%*s%*s%*s%*s%s%*s%d",gateway, &metric);
break;
case 3:
case ONLY_DEV:
sscanf(buff,"%*s%*s%*s%*s%s%*s%d",dev, &metric);
break;
default:
ret = RET_ERR;
if(buff_total)
{
rpc_free(buff_total);
buff_total = NULL;
}
fclose(f);
return RET_ERR;
}
netmask = 0;
strcpy(destip,"0.0.0.0");
@ -894,17 +956,23 @@ ret_code get_all_from_file (pointer output, int *output_len)
{
version = IPV4_VERSION;
switch(flag){
case 1:
case BOTH_GW_AND_DEV:
sscanf(buff,"%*s%*s%*s %[^/]/%d%*s%s%*s%s%*s%d",destip,&netmask,gateway,dev, &metric);
break;
case 2:
case ONLY_GW:
sscanf(buff,"%*s%*s%*s %[^/]/%d%*s%s%*s%d",destip,&netmask,gateway,&metric);
break;
case 3:
case ONLY_DEV:
sscanf(buff,"%*s%*s%*s %[^/]/%d%*s%s%*s%d",destip,&netmask,dev,&metric);
break;
default:
ret = RET_ERR;
if(buff_total)
{
rpc_free(buff_total);
buff_total = NULL;
}
fclose(f);
return RET_ERR;
}
ipv4_count++;
}
@ -938,7 +1006,11 @@ ret_code get_all_from_file (pointer output, int *output_len)
fclose(f);
ret = routing_to_json (count, buff_total, output, output_len);
rpc_free(buff_total);
if(buff_total)
{
rpc_free(buff_total);
buff_total = NULL;
}
return ret;
}
@ -947,8 +1019,8 @@ ret_code config_recovery()
{
ret_code ret = RET_OK;
FILE *f;
char buff[LINE_MAX_LENGTH];
char buff_total[LINE_MAX_LENGTH*ROUTING_TABLE_MAX_NUMBER];
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");
@ -959,9 +1031,6 @@ ret_code config_recovery()
return RET_OPEN_FILE_ERR;
}
memset(buff,0,sizeof(buff));
memset(buff_total,0,sizeof(buff_total));
fseek(f,0,SEEK_SET);
while (fgets(buff,sizeof(buff),f) != NULL)
@ -1000,6 +1069,8 @@ ret_code config_recovery()
}
}
}
next_while:
if(fgetc(f) == EOF)
{
@ -1020,14 +1091,19 @@ next_while:
/*检查输入的json参数并且赋值到结构体*/
ret_code routing_config_chk(uint source, uint *config_type,
pointer input, int *input_len,
pointer output, int *output_len){
pointer output, int *output_len)
{
if((NULL == config_type) || (NULL == input) || (NULL == input_len) || (NULL == output_len))
{
return RET_INPUTERR;
}
if(source == CONFIG_FROM_RECOVER1)
if(source == CONFIG_FROM_RECOVER1)
{
return RET_OK;
}
if(source == CONFIG_FROM_RECOVER2)
if(source == CONFIG_FROM_RECOVER2)
{
return RET_CHKERR;
}
@ -1059,6 +1135,7 @@ ret_code routing_config_chk(uint source, uint *config_type,
return RET_GW_DEV_ERR;
}
/*判断IP和网关格式是否正确*/
else if(conf_buff->version == IPV4_VERSION)
{
int a = -1,b = -1,c = -1,d = -1;
@ -1127,11 +1204,15 @@ ret_code routing_config_proc(uint source, uint config_type,
return ret;
}
char string[STRING_LENGTH];
uint conf_type = config_type;
routing_t conf_buff = {0};
routing_t *routing_conf = &conf_buff;
int flag = 0;
if(NULL == input)
{
return RET_INPUTERR;
}
routing_conf = (routing_t *)input;
@ -1182,7 +1263,12 @@ ret_code routing_config_proc(uint source, uint config_type,
ret_code routing_config_get_all(uint source,
pointer output, int *output_len){
if (source == CONFIG_FROM_RECOVER1 || source == CONFIG_FROM_RECOVER2)
if((NULL == output) || (NULL == output_len))
{
return RET_INPUTERR;
}
if (source == CONFIG_FROM_RECOVER1 || source == CONFIG_FROM_RECOVER2)
{
return RET_OK;
}
@ -1191,13 +1277,10 @@ ret_code routing_config_get_all(uint source,
int ret = RET_OK;
*output_len = 0;
//int code = 0;
ret = get_all_from_file(output,output_len);
rpc_log_info("routing_config_get_all: %s\n", (char *)output);
//RET_ERR_FORMART(ret, code, output, *output_len);
ASSERT_RET(ret);
return ret;
@ -1212,9 +1295,12 @@ ret_code routing_config_get_all(uint source,
ret_code all_routing_config_chk(uint source, uint * config_type,
pointer input, int * input_len,
pointer output, int * output_len)
{
rpc_log_info("test check\n");
{
if((NULL == config_type) || (NULL == input) || (NULL == output_len))
{
return RET_INPUTERR;
}
ret_code ret = RET_OK;
routing_t routing_buff = {0};
routing_t *conf_buff = &routing_buff;
@ -1248,14 +1334,20 @@ ret_code all_routing_config_chk(uint source, uint * config_type,
ret_code all_routing_get_all(uint source,
pointer output, int *output_len)
{
FILE *f;
if((NULL == output) || (NULL == output_len))
{
return RET_INPUTERR;
}
FILE *f;
ret_code ret = RET_OK;
routing_t *conf_buff;
int count = 0;
int ipv4_number = 0;
int ipv6_number = 0;
int status;
char temp_buff[LINE_MAX_LENGTH];
char temp_buff[LINE_MAX_LENGTH] = {0};
char destip[IP_MAX_LENGTH] = {0};
char gateway[IP_MAX_LENGTH] = {0};
char gateway_new[IP_MAX_LENGTH] = {0};
@ -1274,7 +1366,6 @@ ret_code all_routing_get_all(uint source,
conf_buff = rpc_new0(routing_t,ROUTING_TABLE_MAX_NUMBER);
memset(conf_buff,0,sizeof(conf_buff));
memset(temp_buff,0,LINE_MAX_LENGTH);
fseek(f,0,SEEK_SET);
@ -1325,6 +1416,8 @@ next_while:
fclose(f);
f = popen(IPV6_GET_STATIC_ROUTING,"r");
if (NULL == f)
{
@ -1353,7 +1446,8 @@ next_while:
sscanf(temp_buff,"%[^/]/%d %s %*s %d %*s %*s %s",destip,&netmask_int,gateway,&metric,dev);
rpc_log_info("check 5 after sscanf\n");
rpc_log_info("check 6: destip %s gateway %s netmask %d metric %d dev %s\n",destip,gateway,netmask_int,metric,dev);
if(metric > 0)
if(metric > 0)
{
sscanf(gateway,"[%[^]]",gateway_new);
conf_buff[count].version = 6;
@ -1403,11 +1497,11 @@ next_while:
rpc_log_info("routing_config_get_all: %s\n", (char *)output);
if(conf_buff)
{
rpc_free(conf_buff);
//RET_ERR_FORMART(ret, code, output, *output_len);
ASSERT_RET(ret);
conf_buff = NULL;
}
return ret;
}