From 2c5869c627bd10afd331168941d19f78396b2f11 Mon Sep 17 00:00:00 2001 From: zhanglianghy <zhanglianghy@cmhi.chinamobile.com> Date: Fri, 2 Aug 2019 13:48:30 +0800 Subject: [PATCH] =?UTF-8?q?MOD=20aaa-12=20=E6=A1=A5=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0=20SOL=20=20=E6=A1=A5?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E4=BB=A3=E7=A0=81=E4=B8=8A=E4=BC=A0=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9Azhangliang=20=E6=A3=80?= =?UTF-8?q?=E8=A7=86=E4=BA=BA=EF=BC=9Azhangliang?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config-server/netconfig/bridge/brconfig.c | 66 +++-- .../config-server/netconfig/parsefile.c | 267 +++++++++++++++++- 2 files changed, 311 insertions(+), 22 deletions(-) diff --git a/Platform/user/configm/config-server/netconfig/bridge/brconfig.c b/Platform/user/configm/config-server/netconfig/bridge/brconfig.c index 5bc534f0b..8a54afff0 100644 --- a/Platform/user/configm/config-server/netconfig/bridge/brconfig.c +++ b/Platform/user/configm/config-server/netconfig/bridge/brconfig.c @@ -244,6 +244,43 @@ int br_if_bridge_num(char *br_name) return cnt; } +ret_code br_bridge_add(char * br_name, int *sys_err) +{ + br_event_t event_arg = {br_name, NULL}; + int sys_ret = 0; + + sys_ret = br_add_bridge(br_name); + *sys_err = sys_ret; + + if(sys_ret != 0) + { + return RET_SYSERR; + } + + br_invoke_event(BR_CREATE_EVENT, event_arg); + + return RET_OK; +} + +ret_code br_bridge_del(char * br_name, int *sys_err) +{ + br_event_t event_arg = {br_name, NULL}; + int sys_ret = 0; + + sys_ret = br_del_bridge(br_name); + *sys_err = sys_ret; + + if(sys_ret != 0) + { + return RET_SYSERR; + } + + br_invoke_event(BR_DELETE_EVENT, event_arg); + + return RET_OK; + +} + #endif @@ -464,7 +501,6 @@ ret_code br_config_proc(uint source, uint config_type, pointer input, int input_len, pointer output, int *output_len) { - BR_EVENT_TYPE event_type = BR_EVENT_INVALID; ret_code ret = RET_OK; int sys_ret = 0; char *br_name; @@ -473,27 +509,15 @@ ret_code br_config_proc(uint source, uint config_type, if(config_type == CM_CONFIG_ADD) { - sys_ret = br_add_bridge(br_name); - event_type = BR_CREATE_EVENT; + ret = br_bridge_add(br_name, &sys_ret); } else if(config_type == CM_CONFIG_DEL) { - sys_ret = br_del_bridge(br_name); - event_type = BR_DELETE_EVENT; + + ret = br_bridge_del(br_name, &sys_ret); } - if(sys_ret != 0) - { - ret = RET_SYSERR; - RET_ERR_FORMART(ret, sys_ret, output, *output_len); - return ret; - } - - if(event_type != BR_EVENT_INVALID) - { - br_event_t event_arg = {br_name, NULL}; - br_invoke_event(event_type, event_arg); - } + RET_ERR_FORMART(ret, sys_ret, output, *output_len); return ret; } @@ -857,8 +881,8 @@ int br_fdb_to_json_string(br_fdb_status_t *fdb_status, char *output) #ifndef DESC("桥FDB表配置钩子函数") ret_code br_fdb_config_chk(uint source,uint *config_type, - pointer input, int *input_len, - pointer output, int *output_len) + pointer input, int *input_len, + pointer output, int *output_len) { ret_code ret = RET_OK; br_fdb_config_t br_fdb = {0}; @@ -891,8 +915,8 @@ ret_code br_fdb_config_chk(uint source,uint *config_type, } ret_code br_fdb_config_get(uint source, - pointer input, int input_len, - pointer output, int *output_len) + pointer input, int input_len, + pointer output, int *output_len) { br_fdb_status_t *fdb_status; br_fdb_config_t *br_fdb; diff --git a/Platform/user/configm/config-server/netconfig/parsefile.c b/Platform/user/configm/config-server/netconfig/parsefile.c index f3103edec..854bbbb26 100644 --- a/Platform/user/configm/config-server/netconfig/parsefile.c +++ b/Platform/user/configm/config-server/netconfig/parsefile.c @@ -26,6 +26,132 @@ int conf_file_write(char *conf_path, char *sum_buf) return RET_OK; } +/* 设置指定配置块中的配置 */ +int conf_value_in_block_get(char *conf_path, + char *start_str, char *end_str, + char *conf_name, char *conf_buff) +{ + char config_linebuf[IF_BUFF_LEN]; + boolean next_flag = FALSE; + char *start_line = NULL; + FILE *f; + + f = fopen(conf_path,"r+"); + if(f == NULL) + { + rpc_log_error("OPEN CONFIG %s FALID\n", conf_path); + return RET_ERR; + } + + fseek(f, 0, SEEK_SET); + + memset(config_linebuf, 0, sizeof(config_linebuf)); + + while(fgets(config_linebuf, IF_BUFF_LEN, f) != NULL) + { + /* 该做的事情已经做完 */ + if(next_flag == TRUE) + { + break; + } + + /* 判断是否是空行 */ + if(strlen(config_linebuf) < 3) + { + goto next_while; + } + + /* 没有找到配置块,则继续循环 */ + if(start_line == NULL) + { + start_line = strstr(config_linebuf, start_str); + goto next_while; + } + + /* 配置块结束 */ + if(strstr(config_linebuf, end_str)) + { + break; + } + + if(strstr(config_linebuf, conf_name)) + { + next_flag = TRUE; + strncpy(conf_buff, config_linebuf, IF_BUFF_LEN); + break; + } + +next_while: + if(fgetc(f)==EOF) + { + break; + } + + fseek(f,-1,SEEK_CUR); + + memset(config_linebuf, 0, sizeof(config_linebuf)); + } + + + fclose(f); + + + if(next_flag == TRUE) + { + rpc_log_dbg("---get_buf---->%s<----------\n",conf_buff); + return RET_OK; + } + + + return RET_NOTFOUND; +} + +/* 设置指定配置块中的配置 */ +int conf_value_in_block_exist(char *conf_path, char *conf_buff) +{ + char config_linebuf[IF_BUFF_LEN]; + boolean next_flag = FALSE; + char *start_line = NULL; + FILE *f; + + f = fopen(conf_path,"r+"); + if(f == NULL) + { + rpc_log_error("OPEN CONFIG %s FALID\n", conf_path); + return RET_ERR; + } + + fseek(f, 0, SEEK_SET); + + memset(config_linebuf, 0, sizeof(config_linebuf)); + + while(fgets(config_linebuf, IF_BUFF_LEN, f) != NULL) + { + + if(strstr(config_linebuf, conf_buff)) + { + next_flag = TRUE; + break; + } + + memset(config_linebuf, 0, sizeof(config_linebuf)); + } + + + fclose(f); + + + if(next_flag == TRUE) + { + rpc_log_dbg("---get_buf---->%s<----------\n",conf_buff); + return RET_OK; + } + + + return RET_NOTFOUND; +} + + /* 设置指定配置块中的配置 */ int conf_value_in_block_set(char *conf_path, char *start_str, char *end_str, @@ -236,6 +362,88 @@ int conf_value_in_block_del(char *conf_path, char *start_str, return conf_file_write(conf_path, sum_buf); } +/* 设置指定配置块中的配置 */ +int conf_value_block_add(char *conf_path, char *conf_buff) +{ + char config_linebuf[IF_BUFF_LEN]; + int configbuf_lenth = strlen(conf_buff) + 5; + long config_lenth = 0; + boolean next_flag = FALSE; + FILE *f; + + f = fopen(conf_path,"r+"); + if(f == NULL) + { + rpc_log_error("OPEN CONFIG %s FALID\n", conf_path); + return RET_ERR; + } + + fseek(f, 0, SEEK_END); + + config_lenth = ftell(f); + + char sum_buf[config_lenth + configbuf_lenth]; + + memset(sum_buf, 0, sizeof(sum_buf)); + + fseek(f, 0, SEEK_SET); + + memset(config_linebuf, 0, sizeof(config_linebuf)); + + while(fgets(config_linebuf, IF_BUFF_LEN, f) != NULL) + { + /* 该做的事情已经做完 */ + if(next_flag == TRUE) + { + strcat(sum_buf, config_linebuf); + goto next_while; + } + + /* 判断是否是空行 */ + if(strlen(config_linebuf) < 3) + { + strcat(sum_buf, config_linebuf); + goto next_while; + } + + /* 找到配置块,则继续循环 */ + if(strstr(config_linebuf, conf_buff)) + { + next_flag = TRUE; + strcat(sum_buf, config_linebuf); + break; + } + + strcat(sum_buf, config_linebuf); + +next_while: + if(fgetc(f)==EOF) + { + break; + } + + fseek(f,-1,SEEK_CUR); + + memset(config_linebuf, 0, sizeof(config_linebuf)); + } + + fclose(f); + + rpc_log_dbg("---sum_buf---->%s<----------\n",sum_buf); + + /* 整个配置块都没有,则新创建该配置块 */ + if( next_flag == FALSE ) + { + strcat(sum_buf, conf_buff); + strcat(sum_buf, "\n\n"); + remove(conf_path); + + return conf_file_write(conf_path, sum_buf); + } + + return RET_OK; +} + int conf_value_block_del(char *conf_path, char *start_str, char *end_str) { char config_linebuf[IF_BUFF_LEN]; @@ -321,6 +529,64 @@ int conf_value_block_del(char *conf_path, char *start_str, char *end_str) return conf_file_write(conf_path, sum_buf); } +/* 增加接口配置块 */ +void if_conf_file_add(char *if_name) +{ + char auto_str[IF_BUFF_LEN] = {0}; + + sprintf(auto_str, "auto %s", if_name); + + conf_value_block_add(IFCONFIG_PATH, auto_str); + + return; +} + +/* 删除整个接口配置块 */ +void if_conf_file_del(char *if_name) +{ + char auto_str[IF_BUFF_LEN] = {0}; + + sprintf(auto_str, "auto %s", if_name); + + conf_value_block_del(IFCONFIG_PATH, auto_str, "auto"); + + return; +} + +/* 设置接口中的配置 */ +void if_conf_file_set(char *if_name, char *conf_name, char *conf_buff) +{ + char auto_str[IF_BUFF_LEN] = {0}; + + sprintf(auto_str, "auto %s", if_name); + + conf_value_in_block_set(IFCONFIG_PATH, auto_str, "auto", conf_name, conf_buff); + + return; +} + +/* 获取接口中的配置 */ +void if_conf_file_get(char *if_name, char *conf_name, char *conf_buff) +{ + char auto_str[IF_BUFF_LEN] = {0}; + + sprintf(auto_str, "auto %s", if_name); + + conf_value_in_block_get(IFCONFIG_PATH, auto_str, "auto", conf_name, conf_buff); + + return; +} + +ret_code if_conf_file_exist(char *if_name, char *conf_buff) +{ + char auto_str[IF_BUFF_LEN] = {0}; + + sprintf(auto_str, "auto %s", if_name); + + return conf_value_in_block_exist(IFCONFIG_PATH, auto_str); +} + + /* *添加修改文件(当配置文件中存在标记字段,则进行修改,若不存在则进行添加) * @@ -362,4 +628,3 @@ void ip_conf_file_del(char *if_name, char *conf_buff) return; } -