MOD aaa-12 桥模型代码上传
SOL 桥模型代码上传 修改人:zhangliang 检视人:zhangliang
This commit is contained in:
parent
c94d722be6
commit
119abe73ba
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue