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,

View File

@ -13,9 +13,10 @@
#include "brnetlink.h"
#include "parsefile.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)
{
@ -37,11 +38,11 @@ int br_event_register(BR_EVENT_TYPE event_type, BR_EVENT_FUNC event_func)
{
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));
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);
@ -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);
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);
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)
{
cmp_args->result = true;
cmp_args->result = TRUE;
return 1;
}
@ -198,7 +199,7 @@ ret_code br_save_file(BR_EVENT_TYPE event_type,
if_conf_file_add(br_name);
break;
case BR_DELETE_EVENT:
if_conf_file_del(br_name)
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)
@ -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)
{
br_event_t event_arg = {0};
ret_code ret = RET_OK;
char *port_name;
int err = 0;
int i;
for(i = 0; i < cnt)
for(i = 0; i < cnt; i++)
{
br_invoke_event(BR_IF_JOIN_EVENT_PRE, event_arg);
port_name = port_list + INTERFACE_NAMSIZ * i;
err = br_add_interface(br_name, port_name);
if(err != 0)
{
sys_err = err;
*sys_err = err;
ret = RET_SYSERR;
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_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)
{
br_event_t event_arg = {0};
ret_code ret = RET_OK;
char *port_name;
int err = 0;
int i;
for(i = 0; i < cnt)
for(i = 0; i < cnt; i++)
{
br_invoke_event(BR_IF_LEAVE_EVENT_PRE, event_arg);
port_name = port_list + INTERFACE_NAMSIZ * i;
err = br_del_interface(br_name, port_name);
if(err != 0)
{
sys_err = err;
*sys_err = err;
ret = RET_SYSERR;
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_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;
}
json_str = cJSON_PrintUnformatted(json_array);
json_str = cJSON_PrintUnformatted(json_obj);
output_len = strlen(json_str) + 1;
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 *json_obj;
s2j_create_json_obj(json_obj);
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.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)
{
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;
}
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_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)
{
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);
}
@ -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)ifindices, MAX_PORTS, 0 };
struct ifreq ifr;
int br_fd = -1;
if (port_no >= MAX_PORTS)
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);
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",
brname, strerror(errno));
close(br_fd);
return -1;
}
if(if_indextoname(ifindices[port_no], ifname) == NULL)
{
close(br_fd);
return -1;
}
close(br_fd);
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)
{
cJSON *fdb_obj;
s2j_create_json_obj(fdb_obj);
if(fdb_obj == NULL)
{
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)
{
cJSON *br_obj;
cJSON *fdb_array;
char *json_str;
int i;

View File

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

View File

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

View File

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