diff options
Diffstat (limited to 'src/mctrl.cpp')
| -rw-r--r-- | src/mctrl.cpp | 138 |
1 files changed, 92 insertions, 46 deletions
diff --git a/src/mctrl.cpp b/src/mctrl.cpp index 4f347ac..e29ca5c 100644 --- a/src/mctrl.cpp +++ b/src/mctrl.cpp @@ -29,7 +29,7 @@ int set_ir_line(Maat_feather_t feather,const char *ir_table_name,const char *tab char m_table_line[HTABLE_DATA_LEN]; struct IR_MCTRL_INFO mctrl_info; memset(&mctrl_info,0,sizeof(mctrl_info)); - memset(&line_rule, 0,sizeof(line_rule)); + memset(&line_rule,0,sizeof(line_rule)); line_rule.label_id=0; line_rule.rule_id=rule_id; @@ -63,15 +63,15 @@ int set_ir_line(Maat_feather_t feather,const char *ir_table_name,const char *tab ret=Maat_cmd_set_line(feather, p_line, MAAT_OP_ADD); - MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL, (char*)"set_line", "set_table_name:%s set_table_line:%s",ir_table_name,m_table_line); + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL, (char*)"set_line", "%s,set_table_line:%s",ir_table_name,m_table_line); if(ret==-1) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"set_line","%s:set rule_id:%d redis line error",ir_table_name,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"set_line","%s:set rule_id:%d,set redis line error",ir_table_name,rule_id); } else { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"set_line","%s:set rule_id:%d redis line success",ir_table_name,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"set_line","%s:set rule_id:%d,set redis line success",ir_table_name,rule_id); } return ret; } @@ -102,15 +102,15 @@ int del_ir_line(Maat_feather_t feather,const char *ir_table_name,const char *tab ret=Maat_cmd_set_line(feather, p_line, MAAT_OP_DEL); } - MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL, (char*)"del_line", "del_table_name:%s del_rule_id is:%d table_line:%s",ir_table_name,rule_id,table_line); + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL, (char*)"del_line", "del_table_name:%s,del rule_id:%d,table_line:%s",ir_table_name,rule_id,table_line); if(ret==-1) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"del_line","%s:del rule_id is %d redis line error",ir_table_name,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"del_line","%s:del rule_id:%d,redis line error",ir_table_name,rule_id); } else { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"del_line","%s:del rule_id is %d redis line success",ir_table_name,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"del_line","%s:del rule_id:%d,redis line success",ir_table_name,rule_id); } return ret; @@ -192,6 +192,36 @@ void htable_data_free(void *data) return; } +void table_id_change_name(int table_id,char **table_name) +{ + switch(table_id) + { + case STATIC_NOMINEE_ID: + *table_name=(char*)STATIC_NOMINEE_TABLE_NAME; + break; + case DYNAMIC_NOMINEE_ID: + *table_name=(char*)DYNAMIC_NOMINEE_TABLE_NAME; + break; + case DNAT_POLICY_ID: + *table_name=(char*)DNAT_POLICY_TABLE_NAME; + break; + case NOMINEE_ID: + *table_name=(char*)NOMINEE_TABLE_NAME; + break; + case INTERCEPT_ID: + *table_name=(char*)INTERCEPT_TABLE_NAME; + break; + case CANDIDATE_ID: + *table_name=(char*)CANDIDATE_TABLE_NAME; + break; + default: + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"table_id_change_name","table_id error!!"); + break; + } + return; +} + + void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const char* table_line, MAAT_PLUGIN_EX_DATA* ad, long argl, void *argp) { struct IR_MCTRL_INFO mctrl_info; @@ -201,58 +231,53 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch int *add_data=NULL; int add_ret=0; long cb_ret=0; - + char *table_name=NULL; + memcpy(mctrl_info.effective_range,"{}",sizeof("{}")); + memcpy(mctrl_info.mask_src_ip,"255.255.255.255",sizeof("255.255.255.255")); + memcpy(mctrl_info.mask_dst_ip,"255.255.255.255",sizeof("255.255.255.255")); + memcpy(mctrl_info.mask_src_port,"65535",sizeof("65535")); + memcpy(mctrl_info.mask_dst_port,"65535",sizeof("65535")); + mctrl_info.service=832; + switch(table_id) { case DYNAMIC_NOMINEE_ID: mctrl_info.addr_pool_id=0; memcpy(mctrl_info.src_port,"0",sizeof("0")); - memcpy(mctrl_info.mask_src_ip,"0.0.0.0",sizeof("0.0.0.0")); - memcpy(mctrl_info.mask_src_port,"0",sizeof("0")); memcpy(mctrl_info.dst_ip,"0.0.0.0",sizeof("0.0.0.0")); - memcpy(mctrl_info.mask_dst_ip,"0.0.0.0",sizeof("0.0.0.0")); memcpy(mctrl_info.dst_port,"0",sizeof("0")); - memcpy(mctrl_info.mask_dst_port,"0",sizeof("0")); - memcpy(mctrl_info.effective_range,"{}",sizeof("{}")); mctrl_info.action=96; - mctrl_info.service=832; mctrl_info.htable_flag=DYNAMIC_NOMINEE_FLAG; sscanf(table_line,"%d\t%d\t%d\t%s\t%*s\t%d\t%s\t%*d\t%d\t%d\t%*d\t%*s\t%*s", &mctrl_info.region_id,&mctrl_info.addr_type,&mctrl_info.procotol,mctrl_info.src_ip, &mctrl_info.direction,mctrl_info.user_region,&mctrl_info.is_valid,&mctrl_info.service); mctrl_info.region_id=(mctrl_info.region_id%SNAT_DYNAMIC_NUMBER)+SNAT_DYNAMIC_NUMBER; mctrl_info.group_id=mctrl_info.region_id; + table_name=(char*)DYNAMIC_NOMINEE_TABLE_NAME; break; case STATIC_NOMINEE_ID: memcpy(mctrl_info.user_region,"0",sizeof("0")); - memcpy(mctrl_info.effective_range,"{}",sizeof("{}")); - mctrl_info.service=832; mctrl_info.htable_flag=STATIC_NOMINEE_FLAG; - sscanf(table_line,"%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%d\t%*d\t%*s\t%*s", - &mctrl_info.region_id,&mctrl_info.group_id,&mctrl_info.addr_type, - mctrl_info.src_ip,mctrl_info.mask_src_ip,mctrl_info.src_port,mctrl_info.mask_src_port,mctrl_info.dst_ip,mctrl_info.mask_dst_ip, - mctrl_info.dst_port,mctrl_info.mask_dst_port,&mctrl_info.procotol,&mctrl_info.direction,&mctrl_info.addr_pool_id,&mctrl_info.is_valid, - &mctrl_info.action); + sscanf(table_line,"%d\t%d\t%d\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%s\t%*s\t%d\t%d\t%d\t%d\t%d\t%*d\t%*s\t%*s", + &mctrl_info.region_id,&mctrl_info.group_id,&mctrl_info.addr_type,mctrl_info.src_ip,mctrl_info.src_port, + mctrl_info.dst_ip,mctrl_info.dst_port,&mctrl_info.procotol,&mctrl_info.direction, + &mctrl_info.addr_pool_id,&mctrl_info.is_valid,&mctrl_info.action); mctrl_info.region_id=(mctrl_info.region_id%DNAT_NUMBER)+DNAT_NUMBER; + table_name=(char*)STATIC_NOMINEE_TABLE_NAME; break; case DNAT_POLICY_ID: memcpy(mctrl_info.src_ip,"0.0.0.0",sizeof("0.0.0.0")); memcpy(mctrl_info.src_port,"0",sizeof("0")); - memcpy(mctrl_info.mask_src_ip,"0.0.0.0",sizeof("0.0.0.0")); - memcpy(mctrl_info.mask_src_port,"0",sizeof("0")); - memcpy(mctrl_info.mask_dst_ip,"0.0.0.0",sizeof("0.0.0.0")); - memcpy(mctrl_info.mask_dst_port,"0",sizeof("0")); memcpy(mctrl_info.user_region,"0",sizeof("0")); - memcpy(mctrl_info.effective_range,"{}",sizeof("{}")); - mctrl_info.direction=0; + mctrl_info.direction=0; mctrl_info.action=96; - mctrl_info.service=832; mctrl_info.htable_flag=DNAT_POLICY_FLAG; sscanf(table_line,"%d\t%d\t%s\t%s\t%d\t%*s\t%*s\t%*s\t%d\t%*d\t%*d\t%d\t%*s\t%*s", &mctrl_info.region_id,&mctrl_info.addr_type,mctrl_info.dst_ip,mctrl_info.dst_port,&mctrl_info.procotol, &mctrl_info.do_log,&mctrl_info.is_valid); mctrl_info.group_id=mctrl_info.region_id; mctrl_info.region_id=mctrl_info.region_id%DNAT_NUMBER; + table_name=(char*)DNAT_POLICY_TABLE_NAME; break; default: MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"static_dynamic_dpolicy_table_new_cb","read_snat_or_dnat table flag error!!table_id:%d",table_id); @@ -279,18 +304,18 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch if(add_ret<0) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"static_dynamic_dpolicy_table_new_cb","add htable error:%d,table_id:%d,rule_id:%d",add_ret,table_id,mctrl_info.region_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"static_dynamic_dpolicy_table_new_cb","add htable error:%d,table_name:%s,rule_id:%d",add_ret,table_name,mctrl_info.region_id); assert(0); } else { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"static_dynamic_dpolicy_table_new_cb","add htable succeed:%d,table_id:%d,rule_id:%d",add_ret,table_id,mctrl_info.region_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"static_dynamic_dpolicy_table_new_cb","add htable succeed:%d,table_name:%s,rule_id:%d",add_ret,table_name,mctrl_info.region_id); } set_ir_redis_info(cb_ret,htable_data,mctrl_info.region_id); add_data=(int*)calloc(sizeof(int),1); if(add_data==NULL) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"static_dynamic_dpolicy_table_new_cb","malloc add_data error!!table_id:%d,rule_id:%d",table_id,mctrl_info.region_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"static_dynamic_dpolicy_table_new_cb","malloc add_data error!!table_name:%s,rule_id:%d",table_name,mctrl_info.region_id); exit(1); } *add_data=mctrl_info.region_id; @@ -298,7 +323,7 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch } else { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_new_cb","htable_info exit!table_id:%d rule_id:%d",table_id,mctrl_info.region_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_new_cb","htable_info exit!table_name:%s rule_id:%d",table_name,mctrl_info.region_id); } return; @@ -308,20 +333,24 @@ void static_dynamic_dpolicy_table_free_cb(int table_id, MAAT_PLUGIN_EX_DATA* ad, void* search_result=NULL; int del_ret=0; long cb_ret=0; + char *table_name=NULL; + + table_id_change_name(table_id,&table_name); + search_result=MESA_htable_search_cb(mctrl_g.mctrl_htable_handle,(unsigned char*)*ad,sizeof(int),free_update_search_htable_cb,NULL,&cb_ret); if(search_result==NULL) { - MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_free_cb", "already del!!!table_id:%d",table_id); + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_free_cb", "already del!!!table_name:%s",table_name); } else { - MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_free_cb", "del data,table_id:%d,rule_id:%d",table_id,*(int*)*ad); + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"static_dynamic_dpolicy_table_free_cb", "del data,table_name:%s,rule_id:%d",table_name,*(int*)*ad); del_ret=MESA_htable_del(mctrl_g.mctrl_htable_handle,(unsigned char*)*ad,sizeof(int),htable_data_free); if(del_ret<0) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"static_dynamic_dpolicy_table_free_cb","del htable error:%d,table_id:%d,rule_id:%d",del_ret,table_id,*(int*)*ad); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"static_dynamic_dpolicy_table_free_cb","del htable error:%d,table_name:%s,rule_id:%d",del_ret,table_name,*(int*)*ad); assert(0); } } @@ -341,6 +370,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, struct IR_MCTRL_INFO mctrl_info; memset(&mctrl_info,0,sizeof(mctrl_info)); char *htable_data=(char*)data; + char *table_name=NULL; if(htable_data==NULL) { @@ -360,21 +390,24 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, { htable_flag+=INTERCEPT_FLAG; } + table_name=(char*)INTERCEPT_TABLE_NAME; break; case NOMINEE_FLAG: if(!(htable_flag & NOMINEE_FLAG)) { htable_flag+=NOMINEE_FLAG; } + table_name=(char*)NOMINEE_TABLE_NAME; break; case CANDIDATE_FLAG: if(!(htable_flag & CANDIDATE_FLAG)) { htable_flag+=CANDIDATE_FLAG; } + table_name=(char*)CANDIDATE_TABLE_NAME; break; default: - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"nominee_intercept_candidate_search_htable_cb","read nom_intercept_candidate_table error!!!table_flag:%d",*(int*)user_arg); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"nominee_intercept_candidate_search_htable_cb","read nom_intercept_candidate_table error!!!table_name:%s",table_name); assert(0); break; } @@ -385,7 +418,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, mctrl_info.dst_port,mctrl_info.mask_dst_port,mctrl_info.procotol,mctrl_info.direction,mctrl_info.addr_pool_id,mctrl_info.is_valid, mctrl_info.action,mctrl_info.service,mctrl_info.user_region,mctrl_info.effective_range,mctrl_info.op_time); - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_search_htable_cb","table_flag:%d ,Data rule_id:%d htable_flag:%d",*(int*)user_arg,mctrl_info.region_id, htable_flag); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_search_htable_cb","table_name:%s ,Data rule_id:%d htable_flag:%d",table_name,mctrl_info.region_id, htable_flag); return htable_flag; } @@ -396,6 +429,9 @@ void nominee_intercept_candidate_table_new_cb(int table_id, const char* key, con void* search_htable_result=NULL; int rule_id=0; int *add_data=NULL; + char *table_name=NULL; + table_id_change_name(table_id,&table_name); + sscanf(table_line,"%d\t",&rule_id); if(*(int*)argp==NOMINEE_FLAG&&rule_id<DNAT_NUMBER) @@ -409,19 +445,19 @@ void nominee_intercept_candidate_table_new_cb(int table_id, const char* key, con if(search_htable_result==NULL) { del_ir_redis_info(*(int*)argp,table_line,rule_id); - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_table_new_cb","table_id:%d,rule_id:%d htable data not exist,del it!",table_id,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_table_new_cb","table_name:%s,rule_id:%d htable data not exist,del it!",table_name,rule_id); } else { add_data=(int*)calloc(sizeof(int),1); if(add_data==NULL) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"nominee_intercept_candidate_table_new_cb","table_id:%d,rule_id:%d,malloc add_data error!!",table_id,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"nominee_intercept_candidate_table_new_cb","table_name:%s,rule_id:%d,malloc add_data error!!",table_name,rule_id); exit(1); } *add_data=rule_id; *ad=add_data; - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_table_new_cb","htable data exist!table_id:%d,rule_id:%d",table_id,rule_id); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"nominee_intercept_candidate_table_new_cb","htable data exist!table_name:%s,rule_id:%d",table_name,rule_id); } return; @@ -430,7 +466,9 @@ void nominee_intercept_candidate_table_free_cb(int table_id, MAAT_PLUGIN_EX_DATA { if(*ad!=NULL) { - MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"nominee_intercept_candidate_table_free_cb"," del table_id:%d,rule_id:%d, del succeed",table_id,*(int*)*ad); + char *table_name=NULL; + table_id_change_name(table_id,&table_name); + MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"nominee_intercept_candidate_table_free_cb"," del table_name:%s,rule_id:%d, del succeed",table_name,*(int*)*ad); free(*ad); } @@ -479,10 +517,10 @@ void Maat_init() { // load conf const char *section = "Mctrl"; - const char *section_d = "Mctrl_D"; - const char *section_s = "Mctrl_S"; - const char *section_i = "Mctrl_I"; - const char *section_n = "Mctrl_N"; + const char *section_d = "Mctrl_DYNAMIC"; + const char *section_s = "Mctrl_STATIC"; + const char *section_i = "Mctrl_INTERCEPT"; + const char *section_n = "Mctrl_NOMINEE"; char table_info_path[MAX_PATH_LEN]; char logger_path[MAX_PATH_LEN]; int max_thread_num=0; @@ -589,7 +627,7 @@ int htable_init() if(0 == htable_ret) { - MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO,(char*)"htable init","htable mature succ"); + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"htable init","htable mature succeed"); return 0; } else @@ -629,6 +667,10 @@ int main(int argc, char * argv [ ]) MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"main","static_dynamic_dpolicy Database table register failed\n"); assert(0); } + else + { + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"main","static_dynamic_dpolicy Database table register succeed\n"); + } register_plugin_ex_table(mctrl_g.s_feather,static_id,static_dynamic_dpolicy_table_new_cb,static_dynamic_dpolicy_table_free_cb,plugin_EX_dup_cb,NULL,0,&static_flag); register_plugin_ex_table(mctrl_g.d_feather,dynamic_id,static_dynamic_dpolicy_table_new_cb,static_dynamic_dpolicy_table_free_cb,plugin_EX_dup_cb,NULL,0,&dynamic_flag); @@ -643,6 +685,10 @@ int main(int argc, char * argv [ ]) MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"main","nominee_intercept_candidate Database table register failed\n"); assert(0); } + else + { + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"main","nominee_intercept_candidate Database table register succeed\n"); + } register_plugin_ex_table(mctrl_g.i_feather,intercept_id,nominee_intercept_candidate_table_new_cb,nominee_intercept_candidate_table_free_cb,plugin_EX_dup_cb,NULL,0,&intercept_flag); register_plugin_ex_table(mctrl_g.n_feather,nominee_id,nominee_intercept_candidate_table_new_cb,nominee_intercept_candidate_table_free_cb,plugin_EX_dup_cb,NULL,0,&nominee_flag); |
