#include "flowood.h" #include "flowood_fun.h" #include "flwd_net.h" #include "MESA_handle_logger.h" #include "MESA_htable.h" #include "Maat_rule.h" #include #include #include #include #include #include #include void * flwd_maat_summon(const char *cfg_file, const char *cfg_section) { char cfg_ip[32]; char str_tmp[256]; int ret, tmp_int; int maat_cfg_src_type; unsigned short redis_port; void *maat_handle; MESA_load_profile_string_def(FLWD_CONFIG_FILE, cfg_section, "table_info", str_tmp, 256, "$"); if('$' == str_tmp[0]){ flwd_log(RLOG_LV_FATAL, "conf->table_info invalid!"); return NULL; } flwd_cfg_val.table_info_path = strdup(str_tmp); MESA_load_profile_int_def(cfg_file, cfg_section, "maat_cfg_source", &maat_cfg_src_type, FLWD_MAAT_SRC_JSON); if(FLWD_MAAT_SRC_LOCAL_FILE == maat_cfg_src_type){ MESA_load_profile_string_def(cfg_file, cfg_section, "inc_dir", str_tmp, 256, "$"); if('$' == str_tmp[0]){ flwd_log(RLOG_LV_FATAL, "conf->inc_dir invalid!"); return NULL; } flwd_cfg_val.inc_cfg_dir = strdup(str_tmp); MESA_load_profile_string_def(cfg_file, cfg_section, "full_dir", str_tmp, 256, "$"); if('$' == str_tmp[0]){ flwd_log(RLOG_LV_FATAL, "conf->full_dir invalid!"); return NULL; } flwd_cfg_val.full_cfg_dir = strdup(str_tmp); maat_handle = Maat_summon_feather( FLWD_MAX_THREAD_NUM, flwd_cfg_val.table_info_path, flwd_cfg_val.full_cfg_dir, flwd_cfg_val.inc_cfg_dir, flwd_global_val.maat_log_handle); }else if(FLWD_MAAT_SRC_JSON == maat_cfg_src_type){ MESA_load_profile_string_def(FLWD_CONFIG_FILE, cfg_section, "json_cfg_file", str_tmp, 256, "$"); if('$' == str_tmp[0]){ flwd_log(RLOG_LV_FATAL, "conf->json_cfg_file invalid!"); return NULL; } flwd_cfg_val.maat_json_cfg_file = strdup(str_tmp); maat_handle = Maat_summon_feather_json( FLWD_MAX_THREAD_NUM, flwd_cfg_val.table_info_path, flwd_cfg_val.maat_json_cfg_file, flwd_global_val.maat_log_handle); }else if(FLWD_MAAT_SRC_REDIS == maat_cfg_src_type){ MESA_load_profile_string_def(cfg_file, cfg_section, "redis_server_ip", cfg_ip, 32, "$"); if('$' == cfg_ip[0]){ flwd_log(30, "Invalid config 'redis_server_ip'!\n"); exit(1); } MESA_load_profile_int_def(cfg_file, cfg_section, "redis_server_port", &tmp_int, 0); if(tmp_int <= 0 || tmp_int > 65535){ flwd_log(30, "Invalid config 'redis_server_port'!\n"); exit(1); } redis_port = (unsigned short)tmp_int; maat_handle = Maat_feather(FLWD_MAX_THREAD_NUM, flwd_cfg_val.table_info_path, flwd_global_val.maat_log_handle); tmp_int = 1000; Maat_set_feather_opt(maat_handle, MAAT_OPT_EFFECT_INVERVAL_MS, &tmp_int, sizeof(int)); Maat_set_feather_opt(maat_handle, MAAT_OPT_STAT_ON, NULL, 0); Maat_set_feather_opt(maat_handle, MAAT_OPT_STAT_FILE_PATH, "./log/maat_stat.log", strlen("./log/maat_stat.log") + 2); ret = Maat_set_feather_opt(maat_handle, MAAT_OPT_REDIS_IP, cfg_ip, strlen(cfg_ip) + 2); if(ret < 0){ flwd_log(30, "Maat_set_feather_opt 'MAAT_OPT_REDIS_IP' error, value: %s!\n", cfg_ip); exit(1); } ret = Maat_set_feather_opt(maat_handle, MAAT_OPT_REDIS_PORT, &redis_port, sizeof(short)); if(ret < 0){ flwd_log(30, "Maat_set_feather_opt 'MAAT_OPT_REDIS_PORT' error, value: %u!\n", redis_port); exit(1); } MESA_load_profile_int_def(cfg_file, cfg_section, "redis_index", &tmp_int, -1); if(-1 == tmp_int){ flwd_log(30, "Invalid config 'redis_index'!\n"); exit(1); } ret = Maat_set_feather_opt(maat_handle, MAAT_OPT_REDIS_INDEX, &tmp_int, sizeof(int)); if(ret < 0){ flwd_log(30, "Maat_set_feather_opt 'MAAT_OPT_REDIS_INDEX' error, value: %d!\n", tmp_int); exit(1); } Maat_initiate_feather(maat_handle); }else{ flwd_log(30, "Invalid config 'maat_cfg_source'! [1:json; 2:file; 3:redis]\n"); exit(1); } if(NULL == maat_handle){ flwd_log(30, "maat init error!\n"); return NULL; } return maat_handle; } int flwd_maat_table_register(void *maat_handle, int inner_table_index) { assert(inner_table_index < FLWD_MAAT_TB_MAX); flwd_global_val.maat_table_info[inner_table_index].table_id = Maat_table_register(maat_handle, flwd_global_val.maat_table_info[inner_table_index].table_name); assert(flwd_global_val.maat_table_info[inner_table_index].table_id >= 0); return flwd_global_val.maat_table_info[inner_table_index].table_id; } /* NOTE: 这些表的名称都是文档规定, 基本不会改, 暂时写死到代码里. */ int flwd_maat_talbe_name_init(void) { flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_POLICY_COMPILE].table_name = strdup("IR_POLICY_COMPILE"); flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_POLICY_GROUP].table_name = strdup("IR_POLICY_GROUP"); flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_POLICY_IP].table_name = strdup("IR_POLICY_IP"); flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_STATIC_IP_POOL_CB].table_name = strdup("IR_STATIC_IP_POOL_CB"); flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_DYN_SIFT_IP_CB].table_name = strdup("IR_DYN_SIFT_IP_CB"); flwd_global_val.maat_table_info[FLWD_MAAT_TB_IR_DYN_CONN_IP].table_name = strdup("IR_DYN_CONN_IP"); return 0; }