#ifndef VLAN_CONFIG_H_ #define VLAN_CONFIG_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include "configm.h" #include "rpc.h" #include "parsefile.h" #include "netconfig.h" #define MAX_VLAN 4096/* 0用户识别帧优先级,4095保留,共4094个 */ #define VID_MIN 2 /* vid范围2-4094 */ #define VID_MAX MAX_VLAN - 2 /* vid范围2-4094 */ #define MAX_INTERFACES 20 /* 最大接口数目 */ #define IF_NAME_LEN 20 /* 接口名最大长度 */ #define BR_VLAN_NAME_LEN 50 /* br-vlan的名字最大长度 */ #define SYSCALL_BUF_LEN 100 #define BITSPERWORD 32 #define SHIFT 5 #define MASK 0x1F #define FILE_BUF_LINE 100 #define EACH_PORT_MAX_VLAN_NUM 5 #define ERR_DATA_LEN 500 #define VLAN_TEST_ADD_PATH "/home/eric/code/test/eric/vlan/conf/vlan_test.conf.add" #define VLAN_TEST_DEL_PATH "/home/eric/code/test/eric/vlan/conf/vlan_test.conf.del" #define xfree(X) \ do{ \ if(X){ \ free(X); \ X = NULL; \ } \ }while(0); /* 操作类型:ADD、MOD、DEL */ typedef enum{ OP_NONE, OP_ADD, OP_MOD, OP_DEL, }operation_type; /* 链路类型:none、access、trunk */ typedef enum{ LINK_TYPE_NONE, LINK_TYPE_ACCESS, LINK_TYPE_TRUNK, LINK_TYPE_HYBIRD, LINK_TYPE_UNKNOWN, }interface_link_attr; /* 接口模型:1 桥接; 2 路由桥接; 3 路由 */ typedef enum{ INTERFACE_MODEL_FORWARD, INTERFACE_MODEL_ROUTE_FORWARD, INTERFACE_MODEL_ROUTE, }interface_model; /* 接口网络类型:LAN、WAN */ typedef enum{ IF_TYPE_LAN, IF_TYPE_WAN, }interface_network_type; /* 接口VLAN信息 */ typedef struct interface_vlan_info_t{ interface_link_attr attr; operation_type op_type;//操作类型ADD、DEL、MOD interface_model if_model;//接口模型 int vidcnt;//vid数量 int vlan_bitmap[MAX_VLAN/BITSPERWORD]; char if_name[IF_NAME_LEN]; }interface_vlan_info; /* vlan个数100、200、300、400、500、600、700、800、900、1000 */ #define ADD_100 "/home/eric/code/test/eric/vlan/conf/conf.add.100" #define ADD_100_200 "/home/eric/code/test/eric/vlan/conf/conf.add.100_200" #define ADD_100_1000 "/home/eric/code/test/eric/vlan/conf/conf.add.100_1000" #define DEL_100 "/home/eric/code/test/eric/vlan/conf/conf.add.100" #define DEL_100_200 "/home/eric/code/test/eric/vlan/conf/conf.add.100_200" #define DEL_100_1000 "/home/eric/code/test/eric/vlan/conf/conf.add.100_1000" /* void */ void vlan_bitmap_set(int *v, int i); void vlan_bitmap_clear(int *v, int i); void interface_vlan_init(void); void vlan_set_struct_stub(interface_vlan_info *if_vlan_info, operation_type op_type, int *if_vlnum); void vlan_config_stub(operation_type op_type); void vlan_config_format_json_stub(int *interface); void vlan_config_get_all_stub(uint source); void vlan_config_get_stub(void); void vlan_config_proc_test(operation_type op_type); ret_code vlan_config_init(void); void vlan_config_stub1(void); /* int */ int vlan_bitmap_check(int *v, int i); int if_vlan2subif(char *if_name, int vid, char *subif); int br_if_num_stub(char *br_name, operation_type op_type); int br_if_num(char *br_name); int create_br_stub(char *br_vlname); int create_br(char *br_vlname); int br_addif_stub(char *br_name, char *if_name); int br_addif(char *br_name, char *if_name); int interface_br_stub(char *if_name, char *br_name); int interface_br(char *if_name, char *br_name); int del_br_stub(char *br_name); int del_br(char *br_name); int add_bridge_vlan_access(char *if_name, int vid); int check_config(char *if_name); int add_interface_vlan_access(char *if_name, int *vlan_bitmap, interface_model if_model); int add_bridge_vlan_trunk(char *if_name, int *vlan_bitmap); int add_bridge_vlan_trunk(char *if_name, int *vlan_bitmap); int del_bridge_vlan_access(char *if_name); int del_bridge_vlan_access(char *if_name); int del_bridge_vlan_trunk(char *if_name); int get_ifnode_from_global(char *if_name); int find_insert_ifnode_from_global(char *if_name); int get_old_interface_attr(char *if_name, interface_link_attr *attr); int if_model_is_change(interface_model old, interface_model new); /* typedefine */ interface_link_attr get_attr_from_ifname(char *if_name); interface_network_type lan_or_wan_stub(char *if_name); interface_network_type lan_or_wan(char *if_name); interface_model get_old_interface_model(char *if_name, interface_model *if_model); interface_model which_interface_model(char *if_name); /* ret_code */ ret_code add_interface_vlan_trunk(char *if_name, int *vlan_bitmap, interface_model if_model); ret_code add_interface_vlan(interface_vlan_info *if_vlan_info); ret_code del_vlan_sub_interface(char *if_name, int *vlan_bitmap); ret_code add_vlan_sub_interface(char *if_name, int *vlan_bitmap); ret_code del_interface_vlan_trunk(char *if_name, int *vlan_bitmap, interface_model if_model); ret_code refresh_if_vlan_info_op_add(interface_vlan_info *if_vlan_info); ret_code refresh_if_vlan_info_op_del(interface_vlan_info *if_vlan_info); ret_code vlan_save_conf_file_add(interface_vlan_info *if_vlan_info); ret_code vlan_save_conf_file_del(interface_vlan_info *if_vlan_info); ret_code vlan_save_conf_file(interface_vlan_info *if_vlan_info); ret_code refresh_if_vlan_info(interface_vlan_info *if_vlan_info); ret_code del_interface_vlan(interface_vlan_info *if_vlan_info); ret_code vlan_config_json_parse(pointer input, interface_vlan_info *if_vlan_info, int *if_vlnum); ret_code vlan_config_recovery(void); ret_code vlan_get_json_parse(int *interface, pointer input); ret_code vlan_config_format_json(int *interface, pointer output, int *output_len); ret_code vlan_get_from_conf_file(int *interface); ret_code vlan_config_get_all(uint source, pointer output, int *output_len); ret_code vlan_config_json_parse_test(char *path, interface_vlan_info *if_vlan_info, int *if_vlnum); ret_code vlan_config_json_parse_test1(operation_type op_type, interface_vlan_info *if_vlan_info, int *if_vlnum); ret_code vlan_config_chk_test(operation_type op_type); ret_code interface_vlan_check(interface_vlan_info *if_vlan_info); ret_code if_attr_chk(interface_link_attr attr); ret_code op_type_chk(interface_vlan_info *if_vlan_info); ret_code op_type_add_chk(interface_vlan_info *if_vlan_info); ret_code op_type_del_chk(interface_vlan_info *if_vlan_info); ret_code vid_value_chk(int vid); ret_code vid_num_chk(char *if_name, operation_type op_type, int num); ret_code if_name_chk(char *if_name); ret_code vlan_config_set_chk(uint source, pointer input); ret_code vlan_operate_parse(pointer input, int *operate_type); ret_code vlan_config_get_chk(uint source, pointer input); ret_code vlan_config_get_all_chk(uint source, pointer input); ret_code del_compose_if_vlan_info(char *if_name, interface_vlan_info *if_vlan_info); ret_code interface_vlan_set(interface_vlan_info *if_vlan_info); ret_code vlan_config_proc(uint source, uint config_type, pointer input, int input_len, pointer output, int *output_len); ret_code vlan_config_get(uint source, pointer input, int input_len, pointer output, int *output_len); ret_code vlan_config_chk(uint source,uint *config_type, pointer input, int *input_len, pointer output, int *output_len); int del_interface_vlan_cb(BR_EVENT_TYPE event_type, br_event_t event_arg); #endif /* VLAN_CONFIG_H_ */