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;
 }
 
-