parent
a266a1b4b0
commit
dff4a537f2
|
@ -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"
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
|||
/*判断gateway,dev是否为空*/
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue