diff --git a/Platform/user/configm/config-server/include/brconfig.h b/Platform/user/configm/config-server/include/brconfig.h index 395612abf..c5db06298 100644 --- a/Platform/user/configm/config-server/include/brconfig.h +++ b/Platform/user/configm/config-server/include/brconfig.h @@ -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, diff --git a/Platform/user/configm/config-server/netconfig/bridge/brconfig.c b/Platform/user/configm/config-server/netconfig/bridge/brconfig.c index 211c0cb61..8b908a0cb 100644 --- a/Platform/user/configm/config-server/netconfig/bridge/brconfig.c +++ b/Platform/user/configm/config-server/netconfig/bridge/brconfig.c @@ -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; + 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); } @@ -727,7 +732,8 @@ int br_get_if_from_portno(const char *brname, int port_no, char *ifname) int ifindices[MAX_PORTS]; unsigned long args[4] = { BRCTL_GET_PORT_LIST, (unsigned long)ifindices, MAX_PORTS, 0 }; - struct ifreq ifr; + 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; diff --git a/Platform/user/configm/config-server/netconfig/bridge/brnetlink.c b/Platform/user/configm/config-server/netconfig/bridge/brnetlink.c index c352fed98..886ca3c9a 100644 --- a/Platform/user/configm/config-server/netconfig/bridge/brnetlink.c +++ b/Platform/user/configm/config-server/netconfig/bridge/brnetlink.c @@ -7,15 +7,21 @@ #include #include +#include #include #include #include +#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))) diff --git a/Platform/user/configm/config-server/netconfig/bridge/include/libbridge_private.h b/Platform/user/configm/config-server/netconfig/bridge/include/libbridge_private.h index 2089667b2..f19b89e27 100644 --- a/Platform/user/configm/config-server/netconfig/bridge/include/libbridge_private.h +++ b/Platform/user/configm/config-server/netconfig/bridge/include/libbridge_private.h @@ -19,7 +19,7 @@ #ifndef _LIBBRIDGE_PRIVATE_H #define _LIBBRIDGE_PRIVATE_H -#include "libbrconfig.h.h" +#include "libbrconfig.h" #include #include diff --git a/Platform/user/configm/config-server/netconfig/bridge/libbridge/libbridge_init.c b/Platform/user/configm/config-server/netconfig/bridge/libbridge/libbridge_init.c index 764a60faf..66a6f47da 100644 --- a/Platform/user/configm/config-server/netconfig/bridge/libbridge/libbridge_init.c +++ b/Platform/user/configm/config-server/netconfig/bridge/libbridge/libbridge_init.c @@ -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)