MOD aaa-12 桥模型代码上传
SOL 桥模型代码上传 修改人:zhangliang 检视人:zhangliang
This commit is contained in:
parent
5000ef3411
commit
03fc657448
|
@ -11,8 +11,12 @@
|
||||||
typedef enum {
|
typedef enum {
|
||||||
BR_CREATE_EVENT = 1,
|
BR_CREATE_EVENT = 1,
|
||||||
BR_DELETE_EVENT,
|
BR_DELETE_EVENT,
|
||||||
|
BR_CREATE_EVENT_PRE,
|
||||||
|
BR_DELETE_EVENT_PRE,
|
||||||
BR_IF_JOIN_EVENT,
|
BR_IF_JOIN_EVENT,
|
||||||
BR_IF_LEAVE_EVENT,
|
BR_IF_LEAVE_EVENT,
|
||||||
|
BR_IF_JOIN_EVENT_PRE,
|
||||||
|
BR_IF_LEAVE_EVENT_PRE,
|
||||||
BR_EVENT_INVALID
|
BR_EVENT_INVALID
|
||||||
} BR_EVENT_TYPE;
|
} BR_EVENT_TYPE;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,14 @@
|
||||||
#define IFCONFIG_PATH "/etc/network/interfaces"
|
#define IFCONFIG_PATH "/etc/network/interfaces"
|
||||||
#define IF_BUFF_LEN 128
|
#define IF_BUFF_LEN 128
|
||||||
|
|
||||||
|
ret_code if_conf_file_add(char *if_name);
|
||||||
|
ret_code if_conf_file_del(char *if_name);
|
||||||
|
ret_code if_conf_file_set(char *if_name, char *conf_name, char *conf_buff);
|
||||||
|
ret_code if_conf_file_get(char *if_name, char *conf_name, char *conf_buff);
|
||||||
|
|
||||||
void ip_conf_file_set(char *if_name, char *conf_name, char *conf_buff);
|
void ip_conf_file_set(char *if_name, char *conf_name, char *conf_buff);
|
||||||
void ip_conf_file_del(char *if_name, char *conf_buff);
|
void ip_conf_file_del(char *if_name, char *conf_buff);
|
||||||
|
|
||||||
|
ret_code del_sub_string(char *str_in,char *str_sub);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "parsefile.h"
|
#include "parsefile.h"
|
||||||
#include "libbridge.h"
|
#include "libbridge.h"
|
||||||
#include "brnetlink.h"
|
#include "brnetlink.h"
|
||||||
|
#include "parsefile.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
|
||||||
#ifndef DESC("事件通知函数")
|
#ifndef DESC("事件通知函数")
|
||||||
|
@ -184,7 +185,54 @@ ret_code br_if_bridge_check(char *port_list, int cnt, uint config_type)
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret_code br_if_bridge_add(char * br_name, char *port_list, int cnt, int *sys_err)
|
ret_code br_save_file(BR_EVENT_TYPE event_type,
|
||||||
|
char *br_name, char *port_name)
|
||||||
|
{
|
||||||
|
char *key_str = "bridge_ports";
|
||||||
|
char config_str[IF_BUFF_LEN] = {0};
|
||||||
|
ret_code ret;
|
||||||
|
|
||||||
|
switch(event_type)
|
||||||
|
{
|
||||||
|
case BR_CREATE_EVENT:
|
||||||
|
if_conf_file_add(br_name);
|
||||||
|
break;
|
||||||
|
case BR_DELETE_EVENT:
|
||||||
|
if_conf_file_del(br_name)
|
||||||
|
break;
|
||||||
|
case BR_IF_JOIN_EVENT:
|
||||||
|
if(if_conf_file_get(br_name, key_str, config_str) == RET_OK)
|
||||||
|
{
|
||||||
|
if(strstr(config_str, port_name) != NULL)
|
||||||
|
{
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
|
strcat(config_str, " ");
|
||||||
|
strcat(config_str, port_name);
|
||||||
|
}
|
||||||
|
if_conf_file_set(br_name, key_str, config_str);
|
||||||
|
break;
|
||||||
|
case BR_IF_LEAVE_EVENT:
|
||||||
|
if(if_conf_file_get(br_name, key_str, config_str) == RET_OK)
|
||||||
|
{
|
||||||
|
if(strstr(config_str, port_name) != NULL)
|
||||||
|
{
|
||||||
|
del_sub_string(config_str, port_name);
|
||||||
|
rpc_log_info("BR_IF_LEAVE_EVENT: %s\n", config_str);
|
||||||
|
if_conf_file_set(br_name, key_str, config_str);
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ret_code br_if_bridge_add(char *br_name, char *port_list, int cnt, int *sys_err)
|
||||||
{
|
{
|
||||||
ret_code ret = RET_OK;
|
ret_code ret = RET_OK;
|
||||||
char *port_name;
|
char *port_name;
|
||||||
|
@ -193,6 +241,7 @@ ret_code br_if_bridge_add(char * br_name, char *port_list, int cnt, int *sys_err
|
||||||
|
|
||||||
for(i = 0; i < cnt)
|
for(i = 0; i < cnt)
|
||||||
{
|
{
|
||||||
|
br_invoke_event(BR_IF_JOIN_EVENT_PRE, event_arg);
|
||||||
port_name = port_list + INTERFACE_NAMSIZ * i;
|
port_name = port_list + INTERFACE_NAMSIZ * i;
|
||||||
err = br_add_interface(br_name, port_name);
|
err = br_add_interface(br_name, port_name);
|
||||||
if(err != 0)
|
if(err != 0)
|
||||||
|
@ -204,6 +253,8 @@ ret_code br_if_bridge_add(char * br_name, char *port_list, int cnt, int *sys_err
|
||||||
|
|
||||||
br_event_t event_arg = {br_name, port_name};
|
br_event_t event_arg = {br_name, port_name};
|
||||||
br_invoke_event(BR_IF_JOIN_EVENT, event_arg);
|
br_invoke_event(BR_IF_JOIN_EVENT, event_arg);
|
||||||
|
|
||||||
|
br_save_file(BR_IF_JOIN_EVENT, br_name, port_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -218,6 +269,7 @@ ret_code br_if_bridge_del(char * br_name, char *port_list, int cnt, int *sys_err
|
||||||
|
|
||||||
for(i = 0; i < cnt)
|
for(i = 0; i < cnt)
|
||||||
{
|
{
|
||||||
|
br_invoke_event(BR_IF_LEAVE_EVENT_PRE, event_arg);
|
||||||
port_name = port_list + INTERFACE_NAMSIZ * i;
|
port_name = port_list + INTERFACE_NAMSIZ * i;
|
||||||
err = br_del_interface(br_name, port_name);
|
err = br_del_interface(br_name, port_name);
|
||||||
if(err != 0)
|
if(err != 0)
|
||||||
|
@ -229,6 +281,8 @@ ret_code br_if_bridge_del(char * br_name, char *port_list, int cnt, int *sys_err
|
||||||
|
|
||||||
br_event_t event_arg = {br_name, port_name};
|
br_event_t event_arg = {br_name, port_name};
|
||||||
br_invoke_event(BR_IF_LEAVE_EVENT, event_arg);
|
br_invoke_event(BR_IF_LEAVE_EVENT, event_arg);
|
||||||
|
|
||||||
|
br_save_file(BR_IF_LEAVE_EVENT, br_name, port_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -244,11 +298,13 @@ int br_if_bridge_num(char *br_name)
|
||||||
return cnt;
|
return cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret_code br_bridge_add(char * br_name, int *sys_err)
|
ret_code br_bridge_add(char *br_name, int *sys_err)
|
||||||
{
|
{
|
||||||
br_event_t event_arg = {br_name, NULL};
|
br_event_t event_arg = {br_name, NULL};
|
||||||
int sys_ret = 0;
|
int sys_ret = 0;
|
||||||
|
|
||||||
|
br_invoke_event(BR_CREATE_EVENT_PRE, event_arg);
|
||||||
|
|
||||||
sys_ret = br_add_bridge(br_name);
|
sys_ret = br_add_bridge(br_name);
|
||||||
*sys_err = sys_ret;
|
*sys_err = sys_ret;
|
||||||
|
|
||||||
|
@ -259,6 +315,8 @@ ret_code br_bridge_add(char * br_name, int *sys_err)
|
||||||
|
|
||||||
br_invoke_event(BR_CREATE_EVENT, event_arg);
|
br_invoke_event(BR_CREATE_EVENT, event_arg);
|
||||||
|
|
||||||
|
br_save_file(BR_CREATE_EVENT, br_name, NULL);
|
||||||
|
|
||||||
return RET_OK;
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,6 +325,8 @@ ret_code br_bridge_del(char * br_name, int *sys_err)
|
||||||
br_event_t event_arg = {br_name, NULL};
|
br_event_t event_arg = {br_name, NULL};
|
||||||
int sys_ret = 0;
|
int sys_ret = 0;
|
||||||
|
|
||||||
|
br_invoke_event(BR_DELETE_EVENT_PRE, event_arg);
|
||||||
|
|
||||||
sys_ret = br_del_bridge(br_name);
|
sys_ret = br_del_bridge(br_name);
|
||||||
*sys_err = sys_ret;
|
*sys_err = sys_ret;
|
||||||
|
|
||||||
|
@ -277,8 +337,9 @@ ret_code br_bridge_del(char * br_name, int *sys_err)
|
||||||
|
|
||||||
br_invoke_event(BR_DELETE_EVENT, event_arg);
|
br_invoke_event(BR_DELETE_EVENT, event_arg);
|
||||||
|
|
||||||
return RET_OK;
|
br_save_file(BR_DELETE_EVENT, br_name, NULL);
|
||||||
|
|
||||||
|
return RET_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -151,6 +151,116 @@ int conf_value_in_block_exist(char *conf_path, char *conf_buff)
|
||||||
return RET_NOTFOUND;
|
return RET_NOTFOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 设置指定配置块中的配置 */
|
||||||
|
int conf_value_in_block_set_ex(char *conf_path,
|
||||||
|
char *start_str, char *end_str,
|
||||||
|
char *conf_name, char *conf_buff)
|
||||||
|
{
|
||||||
|
char config_linebuf[IF_BUFF_LEN];
|
||||||
|
int configbuf_lenth = strlen(conf_buff) + 5;
|
||||||
|
long config_lenth = 0;
|
||||||
|
boolean next_flag = FALSE;
|
||||||
|
char *start_line = NULL;
|
||||||
|
char *config_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_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(start_line == NULL)
|
||||||
|
{
|
||||||
|
start_line = strstr(config_linebuf, start_str);
|
||||||
|
strcat(sum_buf, config_linebuf);
|
||||||
|
goto next_while;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 配置块结束 */
|
||||||
|
if(strstr(config_linebuf, end_str))
|
||||||
|
{
|
||||||
|
if(config_line == NULL)
|
||||||
|
{
|
||||||
|
strcat(sum_buf, conf_buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(sum_buf, config_linebuf);
|
||||||
|
next_flag = TRUE;
|
||||||
|
|
||||||
|
goto next_while;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(config_line == NULL)
|
||||||
|
{
|
||||||
|
config_line = strstr(config_linebuf, conf_name);
|
||||||
|
|
||||||
|
/* 找到配置行 */
|
||||||
|
if(config_line)
|
||||||
|
{
|
||||||
|
next_flag = TRUE;
|
||||||
|
strcat(sum_buf, conf_buff);
|
||||||
|
goto next_while;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
/* 整个配置块都没有,则新创建该配置块 */
|
||||||
|
if( next_flag == FALSE )
|
||||||
|
{
|
||||||
|
return RET_NOTFOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
remove(conf_path);
|
||||||
|
|
||||||
|
rpc_log_dbg("---sum_buf---->%s<----------\n",sum_buf);
|
||||||
|
|
||||||
|
return conf_file_write(conf_path, sum_buf);
|
||||||
|
}
|
||||||
|
|
||||||
/* 设置指定配置块中的配置 */
|
/* 设置指定配置块中的配置 */
|
||||||
int conf_value_in_block_set(char *conf_path,
|
int conf_value_in_block_set(char *conf_path,
|
||||||
|
@ -530,51 +640,45 @@ int conf_value_block_del(char *conf_path, char *start_str, char *end_str)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 增加接口配置块 */
|
/* 增加接口配置块 */
|
||||||
void if_conf_file_add(char *if_name)
|
ret_code if_conf_file_add(char *if_name)
|
||||||
{
|
{
|
||||||
char auto_str[IF_BUFF_LEN] = {0};
|
char auto_str[IF_BUFF_LEN] = {0};
|
||||||
|
|
||||||
sprintf(auto_str, "auto %s", if_name);
|
sprintf(auto_str, "auto %s", if_name);
|
||||||
|
|
||||||
conf_value_block_add(IFCONFIG_PATH, auto_str);
|
return conf_value_block_add(IFCONFIG_PATH, auto_str);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 删除整个接口配置块 */
|
/* 删除整个接口配置块 */
|
||||||
void if_conf_file_del(char *if_name)
|
ret_code if_conf_file_del(char *if_name)
|
||||||
{
|
{
|
||||||
char auto_str[IF_BUFF_LEN] = {0};
|
char auto_str[IF_BUFF_LEN] = {0};
|
||||||
|
|
||||||
sprintf(auto_str, "auto %s", if_name);
|
sprintf(auto_str, "auto %s", if_name);
|
||||||
|
|
||||||
conf_value_block_del(IFCONFIG_PATH, auto_str, "auto");
|
return conf_value_block_del(IFCONFIG_PATH, auto_str, "auto");
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 设置接口中的配置 */
|
/* 设置接口中的配置 */
|
||||||
void if_conf_file_set(char *if_name, char *conf_name, char *conf_buff)
|
ret_code if_conf_file_set(char *if_name, char *conf_name, char *conf_buff)
|
||||||
{
|
{
|
||||||
char auto_str[IF_BUFF_LEN] = {0};
|
char auto_str[IF_BUFF_LEN] = {0};
|
||||||
|
|
||||||
sprintf(auto_str, "auto %s", if_name);
|
sprintf(auto_str, "auto %s", if_name);
|
||||||
|
|
||||||
conf_value_in_block_set(IFCONFIG_PATH, auto_str, "auto", conf_name, conf_buff);
|
return conf_value_in_block_set_ex(IFCONFIG_PATH, auto_str,
|
||||||
|
"auto", conf_name, conf_buff);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 获取接口中的配置 */
|
/* 获取接口中的配置 */
|
||||||
void if_conf_file_get(char *if_name, char *conf_name, char *conf_buff)
|
ret_code if_conf_file_get(char *if_name, char *conf_name, char *conf_buff)
|
||||||
{
|
{
|
||||||
char auto_str[IF_BUFF_LEN] = {0};
|
char auto_str[IF_BUFF_LEN] = {0};
|
||||||
|
|
||||||
sprintf(auto_str, "auto %s", if_name);
|
sprintf(auto_str, "auto %s", if_name);
|
||||||
|
|
||||||
conf_value_in_block_get(IFCONFIG_PATH, auto_str, "auto", conf_name, conf_buff);
|
return 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)
|
ret_code if_conf_file_exist(char *if_name, char *conf_buff)
|
||||||
|
@ -610,7 +714,6 @@ void ip_conf_file_set(char *if_name, char *conf_name, char *conf_buff)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
*删除配置文件内容
|
*删除配置文件内容
|
||||||
*
|
*
|
||||||
|
@ -628,3 +731,25 @@ void ip_conf_file_del(char *if_name, char *conf_buff)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret_code del_sub_string(char *str_in,char *str_sub)
|
||||||
|
{
|
||||||
|
char* str_out = (char *)malloc(strlen(str_in) + 1);
|
||||||
|
char* p;
|
||||||
|
|
||||||
|
if(str_out == NULL)
|
||||||
|
{
|
||||||
|
return RET_NULLP;
|
||||||
|
}
|
||||||
|
|
||||||
|
while((p = strstr(str_in, str_sub)) != NULL)
|
||||||
|
{
|
||||||
|
*p = '\0';
|
||||||
|
|
||||||
|
strcpy(str_out, p + strlen(str_sub));
|
||||||
|
strcat(str_in, str_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
return RET_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue