summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjixinyi <[email protected]>2019-01-04 09:33:23 +0800
committerjixinyi <[email protected]>2019-01-04 09:33:23 +0800
commit1a058c1e2bcf4d86ba46eedb433dd97f975bb49c (patch)
treec83244da7418f003f330c7556a66aa2df1c27f67 /src
parent0e930e6b50916ee73641dfb0e27bbaa893fd005f (diff)
整理SNAT和DNAT代码
Diffstat (limited to 'src')
-rw-r--r--src/ir_mctrl.cpp159
-rw-r--r--src/ir_mctrl.h11
2 files changed, 82 insertions, 88 deletions
diff --git a/src/ir_mctrl.cpp b/src/ir_mctrl.cpp
index f5607f9..3663216 100644
--- a/src/ir_mctrl.cpp
+++ b/src/ir_mctrl.cpp
@@ -12,7 +12,6 @@
struct mctrl_glocal_info mctrl_g;
-
void s_d_start_cb(int update_type,void* u_para)
{
if(update_type==MAAT_RULE_UPDATE_TYPE_FULL)
@@ -45,7 +44,7 @@ void s_d_start_cb(int update_type,void* u_para)
}
-void Maat_start_cb(int update_type,void* u_para)
+void n_i_c_start_cb(int update_type,void* u_para)
{
if(update_type==MAAT_RULE_UPDATE_TYPE_FULL)
{
@@ -168,7 +167,7 @@ int del_ir_line(Maat_feather_t feather,const char *ir_table_name,const char *tab
}
-long htable_del_update_search(void *data, const uchar *key, uint size, void *user_arg)
+long del_update_search_htable_cb(void *data, const uchar *key, uint size, void *user_arg)
{
int htable_flag=0;
char *htable_data=(char*)data;
@@ -179,8 +178,7 @@ long htable_del_update_search(void *data, const uchar *key, uint size, void *use
return htable_flag;
}
-
-long htable_set_update_search(void *data, const uchar *key, uint size, void *user_arg)
+long set_update_search_htable_cb(void *data, const uchar *key, uint size, void *user_arg)
{
struct IR_MCTRL_INFO nom_info;
char *htable_data=(char*)data;
@@ -196,21 +194,21 @@ long htable_set_update_search(void *data, const uchar *key, uint size, void *use
if(nom_info.nominee_type==DYNAMIC_NOMINEE_INFO)
{
nom_info.version=mctrl_g.version_d;
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_set_update_search","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"set_update_search_htable_cb","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
}
else if(nom_info.nominee_type==STATIC_NOMINEE_INFO)
{
nom_info.version=mctrl_g.version_s;
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_set_update_search","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"set_update_search_htable_cb","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
}
- else if(nom_info.nominee_type==D_POLICY_INFO)
+ else if(nom_info.nominee_type==DNAT_POLICY_INFO)
{
nom_info.version=mctrl_g.version_dp;
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_set_update_search","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"set_update_search_htable_cb","get htable flag:%d! version:%d!",nom_info.htable_flag,nom_info.version);
}
else
{
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_set_update_search","get htable flag:%d!",nom_info.htable_flag);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"set_update_search_htable_cb","get htable flag:%d!",nom_info.htable_flag);
}
snprintf(htable_data,HTABLE_DATA_LEN, "%d\t%d\t%d\t%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\t%s",
@@ -221,13 +219,14 @@ long htable_set_update_search(void *data, const uchar *key, uint size, void *use
}
else
{
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"htable_set_update_search","htable info not exist!,set error!!!");
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_INFO, (char*)"set_update_search_htable_cb","htable info not exist!,set error!!!");
assert(0);
}
return nom_info.htable_flag;
}
-long htable_n_i_search(void *data, const uchar *key, uint size, void *user_arg)
+
+long n_i_c_update_search_htable_cb(void *data, const uchar *key, uint size, void *user_arg)
{
int htable_flag=0;
struct IR_MCTRL_INFO nom_info;
@@ -258,7 +257,7 @@ long htable_n_i_search(void *data, const uchar *key, uint size, void *user_arg)
}
else
{
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_n_i_search","htable flag is:%d",htable_flag);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"n_i_c_update_search_htable_cb","htable flag is:%d",htable_flag);
}
snprintf(htable_data,HTABLE_DATA_LEN, "%d\t%d\t%d\t%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\t%s",
@@ -267,14 +266,14 @@ long htable_n_i_search(void *data, const uchar *key, uint size, void *user_arg)
nom_info.dst_port,nom_info.mask_dst_port,nom_info.procotol,nom_info.direction,nom_info.addr_pool_id,nom_info.is_valid,
nom_info.action,nom_info.service,nom_info.user_region,nom_info.effective_range,nom_info.op_time);
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"htable_n_i_search","htable flag change:%d",htable_flag);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_DEBUG, (char*)"n_i_c_update_search_htable_cb","htable flag change:%d",htable_flag);
}
return htable_flag;
}
-void n_i_table_update_cb(int table_id,const char* table_line,void* u_para)
+void n_i_c_table_update_cb(int table_id,const char* table_line,void* u_para)
{
int rule_id=0;
void *htable_data=NULL;
@@ -298,11 +297,11 @@ void n_i_table_update_cb(int table_id,const char* table_line,void* u_para)
if(is_valid==0)
{
- MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"READ_TABLE_UPDATA"," del table_name:%s,data:%s is_valid==0",u_para,table_line);
+ MESA_handle_runtime_log(mctrl_g.logger_handle, RLOG_LV_FATAL, (char*)"READ_TABLE_UPDATA"," del table_name:%s,data:%s is_valid==0,del succeed",u_para,table_line);
return;
}
- htable_data=MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id), htable_n_i_search,u_para,&search_ret);
+ htable_data=MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id), n_i_c_update_search_htable_cb,u_para,&search_ret);
if(htable_data==NULL)
{
@@ -313,8 +312,7 @@ void n_i_table_update_cb(int table_id,const char* table_line,void* u_para)
else
{
del_ir_line(mctrl_g.n_feather,(char*)u_para,table_line,rule_id);
- }
-
+ }
}
else
{
@@ -366,6 +364,34 @@ void del_redis_info(int flag,const char* table_line,int rule_id)
del_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,table_line,rule_id);
break;
default:
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"del_update", "already del! htable_flag is:%d",flag);
+ break;
+ }
+ return;
+}
+
+void set_redis_info(int flag,const char* table_line,int rule_id)
+{
+ switch(flag)
+ {
+ case S_OR_D_ORIGIN_FLAG:
+ case O_AND_C_FLAG:
+ set_ir_line(mctrl_g.i_feather, (char*)INTERCEPT_TABLE,table_line,rule_id);
+ set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,table_line,rule_id);
+ break;
+ case O_AND_N_FLAG:
+ case O_AND_C_AND_N_FLAG:
+ case D_POLICY_FLAG:
+ set_ir_line(mctrl_g.i_feather, (char*)INTERCEPT_TABLE,table_line,rule_id);
+ break;
+ case O_AND_I_FLAG:
+ case O_AND_C_AND_I_FLAG:
+ set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,table_line,rule_id);
+ break;
+ default:
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"write_update", "exist already ! htable_flag is:%d",flag);
+ assert(flag<=ALL_EXIST_FLAG);
+ assert(flag>=D_POLICY_FLAG);
break;
}
return;
@@ -381,12 +407,13 @@ void s_d_table_update_cb(int table_id,const char* table_line,void* u_para)
int rule_id=0;
int del_ret=0;
long cb_ret=0;
-
+
if(!memcmp(u_para,DYNAMIC_NOMINEE_TABLE,strlen(DYNAMIC_NOMINEE_TABLE)))
{
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",
&nom_info.region_id,&nom_info.addr_type,&nom_info.procotol,nom_info.src_ip,nom_info.src_port,
&nom_info.direction,nom_info.user_region,&nom_info.is_valid,&nom_info.service,nom_info.effective_range,nom_info.op_time);
+
nom_info.region_id=(nom_info.region_id%1000000000)+1000000000;
nom_info.addr_pool_id=0;
nom_info.group_id=nom_info.region_id;
@@ -438,7 +465,7 @@ void s_d_table_update_cb(int table_id,const char* table_line,void* u_para)
nom_info.action=96;
nom_info.service=832;
nom_info.htable_flag=D_POLICY_FLAG;
- nom_info.nominee_type=D_POLICY_INFO;
+ nom_info.nominee_type=DNAT_POLICY_INFO;
}
unsigned char *key_id=(unsigned char*)&nom_info.region_id;
@@ -465,31 +492,14 @@ void s_d_table_update_cb(int table_id,const char* table_line,void* u_para)
}
- MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id),htable_set_update_search,NULL,&cb_ret);
+ MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id),set_update_search_htable_cb,NULL,&cb_ret);
- if(cb_ret==S_OR_D_ORIGIN_FLAG||cb_ret==O_AND_C_FLAG)
- {
- set_ir_line(mctrl_g.i_feather, (char*)INTERCEPT_TABLE,htable_data,rule_id);
- set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,htable_data,rule_id);
- }
- else if(cb_ret==O_AND_N_FLAG||cb_ret==O_AND_C_AND_N_FLAG||cb_ret==D_POLICY_FLAG)
- {
- set_ir_line(mctrl_g.i_feather, (char*)INTERCEPT_TABLE,htable_data,rule_id);
- }
- else if(cb_ret==O_AND_I_FLAG||cb_ret==O_AND_C_AND_I_FLAG)
- {
- set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,htable_data,rule_id);
- }
- else
- {
- MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"write_update", "exist already !! htable_flag is:%d",cb_ret);
- assert(cb_ret<=ALL_EXIST_FLAG);
- }
+ set_redis_info(cb_ret,htable_data,rule_id);
}
else if(nom_info.is_valid==0)
{
- search_result=MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id),htable_del_update_search,NULL,&cb_ret);
+ search_result=MESA_htable_search_cb(mctrl_g.s_d_htable,key_id,sizeof(rule_id),del_update_search_htable_cb,NULL,&cb_ret);
if(search_result==NULL)
{
@@ -515,7 +525,7 @@ void s_d_table_update_cb(int table_id,const char* table_line,void* u_para)
return;
}
-void s_d_htable_iterate(const uchar * key, uint size, void * data, void * user)
+void s_d_htable_full_iterate(const uchar * key, uint size, void * data, void * user)
{
struct IR_MCTRL_INFO nom_info;
memset(&nom_info,0,sizeof(nom_info));
@@ -534,7 +544,7 @@ void s_d_htable_iterate(const uchar * key, uint size, void * data, void * user)
&nom_info.action,&nom_info.service,nom_info.user_region,nom_info.effective_range,nom_info.op_time);
if((mctrl_g.update_type_s==MAAT_RULE_UPDATE_TYPE_FULL&&nom_info.nominee_type==STATIC_NOMINEE_INFO&&nom_info.version!=mctrl_g.version_s)||
(mctrl_g.update_type_d==MAAT_RULE_UPDATE_TYPE_FULL&&nom_info.nominee_type==DYNAMIC_NOMINEE_INFO&&nom_info.version!=mctrl_g.version_d)||
- (mctrl_g.update_type_dp==MAAT_RULE_UPDATE_TYPE_FULL&&nom_info.nominee_type==D_POLICY_INFO&&nom_info.version!=mctrl_g.version_dp))
+ (mctrl_g.update_type_dp==MAAT_RULE_UPDATE_TYPE_FULL&&nom_info.nominee_type==DNAT_POLICY_INFO&&nom_info.version!=mctrl_g.version_dp))
{
del_redis_info(nom_info.htable_flag,(char*)data,nom_info.region_id);
@@ -556,20 +566,20 @@ void s_d_finish_cb(void* u_para)
{
if((!memcmp(u_para,DYNAMIC_NOMINEE_TABLE,strlen(DYNAMIC_NOMINEE_TABLE)))&&mctrl_g.update_type_d==MAAT_RULE_UPDATE_TYPE_FULL)
{
- MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_iterate,NULL);
+ MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_full_iterate,NULL);
mctrl_g.update_type_d=MAAT_RULE_UPDATE_TYPE_INC;
MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"maat_finish", "table_name:%s,update_type:%d,finish succeed",u_para,mctrl_g.update_type_d);
}
else if((!memcmp(u_para,STATIC_NOMINEE_TABLE,strlen(STATIC_NOMINEE_TABLE)))&&mctrl_g.update_type_s==MAAT_RULE_UPDATE_TYPE_FULL)
{
- MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_iterate,NULL);
+ MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_full_iterate,NULL);
mctrl_g.update_type_s=MAAT_RULE_UPDATE_TYPE_INC;
MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"maat_finish", "table_name:%s,update_type:%d,finish succeed",u_para,mctrl_g.update_type_s);
}
else if((!memcmp(u_para,DNAT_POLICY_TABLE,strlen(DNAT_POLICY_TABLE)))&&mctrl_g.update_type_dp==MAAT_RULE_UPDATE_TYPE_FULL)
{
- MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_iterate,NULL);
+ MESA_htable_iterate(mctrl_g.s_d_htable, s_d_htable_full_iterate,NULL);
mctrl_g.update_type_dp=MAAT_RULE_UPDATE_TYPE_INC;
MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"maat_finish", "table_name:%s,update_type:%d,finish succeed",u_para,mctrl_g.update_type_dp);
}
@@ -581,7 +591,7 @@ void s_d_finish_cb(void* u_para)
}
-void Maat_finish_cb(void* u_para)
+void n_i_c_finish_cb(void* u_para)
{
MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"maat_finish", "table_name:%s,finish succeed",u_para);
return;
@@ -616,35 +626,9 @@ void htable_iterate(const uchar * key, uint size, void * data, void * user)
char *table_line=(char*)data;
sscanf(table_line,"%d\t%*d\t%*d\t%d",&htable_flag,&rule_id);
-
- if(htable_flag<O_AND_I_AND_N_FLAG)
- {
-
- if(htable_flag==S_OR_D_ORIGIN_FLAG||htable_flag==O_AND_C_FLAG)
- {
- set_ir_line(mctrl_g.i_feather,(char*)INTERCEPT_TABLE,table_line,rule_id);
- set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,table_line,rule_id);
- }
- else if(htable_flag==O_AND_N_FLAG||htable_flag==O_AND_C_AND_N_FLAG||htable_flag==D_POLICY_FLAG)
- {
- set_ir_line(mctrl_g.i_feather,(char*)INTERCEPT_TABLE,table_line,rule_id);
- }
- else if(htable_flag==O_AND_I_FLAG||htable_flag==O_AND_C_AND_I_FLAG)
- {
- set_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE,table_line,rule_id);
- }
- else
- {
- MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"htable_iterate", "htable flag >=14: %d!",htable_flag);
- assert(htable_flag>=D_POLICY_FLAG);
- }
- }
- else
- {
- MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"htable_iterate", "already exist,htable flag is:%d!",htable_flag);
- assert(htable_flag<=ALL_EXIST_FLAG);
- }
+ set_redis_info(htable_flag,table_line,rule_id);
+
return;
}
@@ -795,14 +779,11 @@ int main(int argc, char * argv [ ])
static_id=Maat_table_register(mctrl_g.s_feather,static_nominee);
dynamic_id=Maat_table_register(mctrl_g.d_feather,dynamic_nominee);
- nominee_id=Maat_table_register(mctrl_g.n_feather,nominee);
- candidate_id=Maat_table_register(mctrl_g.n_feather,candidate);
- intercept_id=Maat_table_register(mctrl_g.i_feather, intercept);
d_policy_id=Maat_table_register(mctrl_g.s_feather,d_policy);
- if(static_id==-1||dynamic_id==-1||nominee_id==-1||candidate_id==-1||intercept_id==-1||d_policy_id==-1)
+ if(static_id==-1||dynamic_id==-1||d_policy_id==-1)
{
- MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"REGISTER_TABLE","Database table register failed\n");
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"REGISTER_TABLE","S_D_DP Database table register failed\n");
assert(0);
}
@@ -812,12 +793,22 @@ int main(int argc, char * argv [ ])
dynamic_nominee,mctrl_g.logger_handle,dynamic_id);
read_plugin_table(mctrl_g.s_feather,DNAT_POLICY_TABLE,s_d_start_cb,s_d_table_update_cb,s_d_finish_cb,
d_policy,mctrl_g.logger_handle,d_policy_id);
-
- read_plugin_table(mctrl_g.i_feather,INTERCEPT_TABLE,Maat_start_cb,n_i_table_update_cb,Maat_finish_cb,
+
+ nominee_id=Maat_table_register(mctrl_g.n_feather,nominee);
+ candidate_id=Maat_table_register(mctrl_g.n_feather,candidate);
+ intercept_id=Maat_table_register(mctrl_g.i_feather, intercept);
+
+ if(nominee_id==-1||candidate_id==-1||intercept_id==-1)
+ {
+ MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"REGISTER_TABLE","N_C_I Database table register failed\n");
+ assert(0);
+ }
+
+ read_plugin_table(mctrl_g.i_feather,INTERCEPT_TABLE,n_i_c_start_cb,n_i_c_table_update_cb,n_i_c_finish_cb,
intercept,mctrl_g.logger_handle,intercept_id);
- read_plugin_table(mctrl_g.n_feather,NOMINEE_TABLE,Maat_start_cb,n_i_table_update_cb,Maat_finish_cb,
+ read_plugin_table(mctrl_g.n_feather,NOMINEE_TABLE,n_i_c_start_cb,n_i_c_table_update_cb,n_i_c_finish_cb,
nominee,mctrl_g.logger_handle,nominee_id);
- read_plugin_table(mctrl_g.n_feather,CANDIDATE_TABLE,Maat_start_cb,n_i_table_update_cb,Maat_finish_cb,
+ read_plugin_table(mctrl_g.n_feather,CANDIDATE_TABLE,n_i_c_start_cb,n_i_c_table_update_cb,n_i_c_finish_cb,
candidate,mctrl_g.logger_handle,candidate_id);
while(1)
diff --git a/src/ir_mctrl.h b/src/ir_mctrl.h
index 3c1a25c..d409d51 100644
--- a/src/ir_mctrl.h
+++ b/src/ir_mctrl.h
@@ -10,7 +10,7 @@
#define MAX_PORT_LEN 6
#define MAX_PATH_LEN 64
#define MAX_TABLE_NAME_LEN 64
-#define MAX_TIME_LEN 50
+#define MAX_TIME_LEN 30
#define HTABLE_DATA_LEN 512
#define MCTRL_CONF_FILE "./conf/mctrl.conf"
@@ -24,13 +24,16 @@
#define DNAT_POLICY_TABLE "IR_DNAT_POLICY"
#define SLEEP_TIME 43200
-#define TIME_OUT 1800
-#define MAX_THREAD_NUM 1
+#define TIME_OUT 30
+#define MAX_THREAD_NUM 1
//nominee_type
#define STATIC_NOMINEE_INFO 1
#define DYNAMIC_NOMINEE_INFO 2
-#define D_POLICY_INFO 3
+#define DNAT_POLICY_INFO 3
+#define NOMINEE_INFO 4
+#define INTERCEPT_INFO 5
+#define CANDIDATE_INFO 6
//htable flag
#define S_OR_D_ORIGIN_FLAG 8