MOD aaa-12 桥模型代码上传

SOL  桥模型代码上传
修改人:zhangliang
检视人:zhangliang
This commit is contained in:
zhanglianghy 2019-08-02 18:49:50 +08:00
parent c94d722be6
commit 119abe73ba
5 changed files with 51 additions and 31 deletions

View File

@ -115,7 +115,7 @@ typedef struct _br_fdb_status br_fdb_status_t;
/************************************************************/ /************************************************************/
/* 通过接口名获取所在桥名 */ /* 通过接口名获取所在桥名 */
int br_if_bridge_get(char *port_name , char *br_name); ret_code br_if_bridge_get(char *port_name , char *br_name);
/* 向桥中添加接口 */ /* 向桥中添加接口 */
ret_code br_if_bridge_add(char *br_name, char *port_list, ret_code br_if_bridge_add(char *br_name, char *port_list,

View File

@ -13,9 +13,10 @@
#include "brnetlink.h" #include "brnetlink.h"
#include "parsefile.h" #include "parsefile.h"
#include "libbridge.h" #include "libbridge.h"
#include "libbridge_private.h"
/* 事件通知函数 */ /* 事件通知函数 */
br_event_head_t br_event_tbl = {.head.first = NULL, .lock = 0, .init = false}; br_event_head_t br_event_tbl = {.head.first = NULL, .lock = 0, .init = FALSE};
int br_invoke_event(BR_EVENT_TYPE event_type, br_event_t event_arg) int br_invoke_event(BR_EVENT_TYPE event_type, br_event_t event_arg)
{ {
@ -37,11 +38,11 @@ int br_event_register(BR_EVENT_TYPE event_type, BR_EVENT_FUNC event_func)
{ {
br_event_node_t *hnode = NULL; br_event_node_t *hnode = NULL;
if(br_event_tbl.init == false) if(br_event_tbl.init == FALSE)
{ {
INIT_HLIST_HEAD(&(br_event_tbl.head)); INIT_HLIST_HEAD(&(br_event_tbl.head));
pthread_mutex_init(&(br_event_tbl.lock), NULL); pthread_mutex_init(&(br_event_tbl.lock), NULL);
br_event_tbl.init = true; br_event_tbl.init = TRUE;
} }
hnode = (br_event_node_t *)rpc_new0(br_event_node_t, 1); hnode = (br_event_node_t *)rpc_new0(br_event_node_t, 1);
@ -97,7 +98,7 @@ int br_copy_port_name(const char *b, const char *p, void *arg)
br_if->if_list = realloc(br_if->if_list, INTERFACE_NAMSIZ); br_if->if_list = realloc(br_if->if_list, INTERFACE_NAMSIZ);
ASSERT_PTR_RET(br_if->if_list); ASSERT_PTR_RET(br_if->if_list);
dst_ptr = br_if->if_list + br_if->index * INTERFACE_NAMSIZ dst_ptr = br_if->if_list + br_if->index * INTERFACE_NAMSIZ;
strncpy(dst_ptr, p, INTERFACE_NAMSIZ - 1); strncpy(dst_ptr, p, INTERFACE_NAMSIZ - 1);
br_if->index++; br_if->index++;
@ -122,7 +123,7 @@ int br_name_cmp(char *br_name, void *args)
if(strcmp(br_name, cmp_args->br_name) == 0) if(strcmp(br_name, cmp_args->br_name) == 0)
{ {
cmp_args->result = true; cmp_args->result = TRUE;
return 1; return 1;
} }
@ -198,7 +199,7 @@ ret_code br_save_file(BR_EVENT_TYPE event_type,
if_conf_file_add(br_name); if_conf_file_add(br_name);
break; break;
case BR_DELETE_EVENT: case BR_DELETE_EVENT:
if_conf_file_del(br_name) if_conf_file_del(br_name);
break; break;
case BR_IF_JOIN_EVENT: case BR_IF_JOIN_EVENT:
if(if_conf_file_get(br_name, key_str, config_str) == RET_OK) if(if_conf_file_get(br_name, key_str, config_str) == RET_OK)
@ -234,24 +235,27 @@ ret_code br_save_file(BR_EVENT_TYPE event_type,
ret_code br_if_bridge_add(char *br_name, char *port_list, int cnt, int *sys_err) ret_code br_if_bridge_add(char *br_name, char *port_list, int cnt, int *sys_err)
{ {
br_event_t event_arg = {0};
ret_code ret = RET_OK; ret_code ret = RET_OK;
char *port_name; char *port_name;
int err = 0; int err = 0;
int i; int i;
for(i = 0; i < cnt) for(i = 0; i < cnt; i++)
{ {
br_invoke_event(BR_IF_JOIN_EVENT_PRE, event_arg); 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)
{ {
sys_err = err; *sys_err = err;
ret = RET_SYSERR; ret = RET_SYSERR;
continue; continue;
} }
br_event_t event_arg = {br_name, port_name}; event_arg.br_name = br_name;
event_arg.if_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); br_save_file(BR_IF_JOIN_EVENT, br_name, port_name);
@ -262,24 +266,27 @@ ret_code br_if_bridge_add(char *br_name, char *port_list, int cnt, int *sys_err)
ret_code br_if_bridge_del(char * br_name, char *port_list, int cnt, int *sys_err) ret_code br_if_bridge_del(char * br_name, char *port_list, int cnt, int *sys_err)
{ {
br_event_t event_arg = {0};
ret_code ret = RET_OK; ret_code ret = RET_OK;
char *port_name; char *port_name;
int err = 0; int err = 0;
int i; int i;
for(i = 0; i < cnt) for(i = 0; i < cnt; i++)
{ {
br_invoke_event(BR_IF_LEAVE_EVENT_PRE, event_arg); 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)
{ {
sys_err = err; *sys_err = err;
ret = RET_SYSERR; ret = RET_SYSERR;
continue; continue;
} }
br_event_t event_arg = {br_name, port_name}; event_arg.br_name = br_name;
event_arg.if_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); br_save_file(BR_IF_LEAVE_EVENT, br_name, port_name);
@ -383,7 +390,7 @@ int br_json_to_string( cJSON *json_obj, pointer output)
return 0; return 0;
} }
json_str = cJSON_PrintUnformatted(json_array); json_str = cJSON_PrintUnformatted(json_obj);
output_len = strlen(json_str) + 1; output_len = strlen(json_str) + 1;
if(output_len > CM_BUFF_SIZE) if(output_len > CM_BUFF_SIZE)
@ -403,8 +410,6 @@ int br_json_to_string( cJSON *json_obj, pointer output)
cJSON *br_config_format_json(br_config_t *br_config) cJSON *br_config_format_json(br_config_t *br_config)
{ {
cJSON *json_obj;
s2j_create_json_obj(json_obj); s2j_create_json_obj(json_obj);
if(json_obj == NULL) if(json_obj == NULL)
{ {
@ -427,7 +432,7 @@ ret_code br_bridge_info( char *br_name, cJSON *json_obj, int *err)
br_if.index = 0; br_if.index = 0;
br_if.if_list = NULL; br_if.if_list = NULL;
*err = br_foreach_port(br_name, br_copy_port_name, &br_if) *err = br_foreach_port(br_name, br_copy_port_name, &br_if);
if (*err >= 0) if (*err >= 0)
{ {
strncpy(br_config.br_name, br_name, BR_NAMSIZ - 1); strncpy(br_config.br_name, br_name, BR_NAMSIZ - 1);
@ -448,7 +453,7 @@ ret_code br_bridge_info( char *br_name, cJSON *json_obj, int *err)
return ret; return ret;
} }
int br_bridge_info_each(const char *br_name, void *args) int br_bridge_info_each(char *br_name, void *args)
{ {
cJSON *json_array = (cJSON *)args; cJSON *json_array = (cJSON *)args;
cJSON *json_obj = NULL; cJSON *json_obj = NULL;
@ -488,7 +493,7 @@ ret_code br_if_config_json_parse(pointer input, uint *conf_type, br_config_t *br
if(br_if_conf->config_type != CM_CONFIG_GET_ALL) if(br_if_conf->config_type != CM_CONFIG_GET_ALL)
{ {
s2j_struct_get_string_element(br_if_conf, json_obj, string, br_name, BR_NAMSIZ); s2j_struct_get_string_element(br_if_conf, json_obj, br_name, BR_NAMSIZ);
strncpy(br_if->br_name, br_if_conf->br_name, BR_NAMSIZ - 1); strncpy(br_if->br_name, br_if_conf->br_name, BR_NAMSIZ - 1);
} }
@ -728,6 +733,7 @@ int br_get_if_from_portno(const char *brname, int port_no, char *ifname)
unsigned long args[4] = { BRCTL_GET_PORT_LIST, unsigned long args[4] = { BRCTL_GET_PORT_LIST,
(unsigned long)ifindices, MAX_PORTS, 0 }; (unsigned long)ifindices, MAX_PORTS, 0 };
struct ifreq ifr; struct ifreq ifr;
int br_fd = -1;
if (port_no >= MAX_PORTS) if (port_no >= MAX_PORTS)
return -1; return -1;
@ -736,17 +742,27 @@ int br_get_if_from_portno(const char *brname, int port_no, char *ifname)
strncpy(ifr.ifr_name, brname, IFNAMSIZ); strncpy(ifr.ifr_name, brname, IFNAMSIZ);
ifr.ifr_data = (char *) &args; ifr.ifr_data = (char *) &args;
if (ioctl(br_socket_fd, SIOCDEVPRIVATE, &ifr) < 0) {
if ((br_fd = socket(AF_LOCAL, SOCK_STREAM, 0)) < 0)
{
return -1;
}
if (ioctl(br_fd, SIOCDEVPRIVATE, &ifr) < 0) {
dprintf("get_portno: get ports of %s failed: %s\n", dprintf("get_portno: get ports of %s failed: %s\n",
brname, strerror(errno)); brname, strerror(errno));
close(br_fd);
return -1; return -1;
} }
if(if_indextoname(ifindices[port_no], ifname) == NULL) if(if_indextoname(ifindices[port_no], ifname) == NULL)
{ {
close(br_fd);
return -1; return -1;
} }
close(br_fd);
return 0; return 0;
} }
@ -876,9 +892,8 @@ ret_code br_fdb_config_json_parse(pointer input, uint *conf_type, br_fdb_config_
ret_code br_each_fdb_to_json_string(cJSON *json_array, fdb_info_t *fdb_info) ret_code br_each_fdb_to_json_string(cJSON *json_array, fdb_info_t *fdb_info)
{ {
cJSON *fdb_obj;
s2j_create_json_obj(fdb_obj); s2j_create_json_obj(fdb_obj);
if(fdb_obj == NULL) if(fdb_obj == NULL)
{ {
return RET_NOMEM; return RET_NOMEM;
@ -896,7 +911,6 @@ ret_code br_each_fdb_to_json_string(cJSON *json_array, fdb_info_t *fdb_info)
int br_fdb_to_json_string(br_fdb_status_t *fdb_status, char *output) int br_fdb_to_json_string(br_fdb_status_t *fdb_status, char *output)
{ {
cJSON *br_obj;
cJSON *fdb_array; cJSON *fdb_array;
char *json_str; char *json_str;
int i; int i;

View File

@ -7,15 +7,21 @@
#include <stdlib.h> #include <stdlib.h>
#include <fcntl.h> #include <fcntl.h>
#include <libnetlink.h>
#include <linux/rtnetlink.h> #include <linux/rtnetlink.h>
#include <bits/socket.h> #include <bits/socket.h>
#include <net/if.h> #include <net/if.h>
#include "list.h"
#include "brnetlink.h" #include "rpc_types.h"
#include "ipconfig.h"
#include "brconfig.h"
#include "rpc_util.h" #include "rpc_util.h"
#include "rpc_common.h" #include "rpc_common.h"
#include "brnetlink.h"
#include "ipconfig.h"
#include "brconfig.h"
#include "libbridge.h"
#define BR_NLMSG_TAIL(nmsg) \ #define BR_NLMSG_TAIL(nmsg) \
((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len))) ((struct rtattr *) (((void *) (nmsg)) + NLMSG_ALIGN((nmsg)->nlmsg_len)))

View File

@ -19,7 +19,7 @@
#ifndef _LIBBRIDGE_PRIVATE_H #ifndef _LIBBRIDGE_PRIVATE_H
#define _LIBBRIDGE_PRIVATE_H #define _LIBBRIDGE_PRIVATE_H
#include "libbrconfig.h.h" #include "libbrconfig.h"
#include <linux/sockios.h> #include <linux/sockios.h>
#include <sys/time.h> #include <sys/time.h>

View File

@ -151,7 +151,7 @@ int br_cnt_num(const char *name, void *arg)
(*cnt)++; (*cnt)++;
return 0 return 0;
} }
int br_for_bridge_num(int *cnt) int br_for_bridge_num(int *cnt)