diff options
| -rw-r--r-- | bin/mctrl | bin | 44640 -> 50632 bytes | |||
| -rw-r--r-- | doc/IP复用项目mctrl说明文档.docx | bin | 15898 -> 17079 bytes | |||
| -rw-r--r-- | src/Makefile | 10 | ||||
| -rw-r--r-- | src/mctrl.cpp | 98 | ||||
| -rw-r--r-- | src/mctrl.h | 24 |
5 files changed, 107 insertions, 25 deletions
| Binary files differ diff --git a/doc/IP复用项目mctrl说明文档.docx b/doc/IP复用项目mctrl说明文档.docx Binary files differindex 083b05f..10daee1 100644 --- a/doc/IP复用项目mctrl说明文档.docx +++ b/doc/IP复用项目mctrl说明文档.docx diff --git a/src/Makefile b/src/Makefile index 40b519d..b752dd5 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,17 +1,13 @@ CC = gcc CCC = g++ -CFLAGS = -Wall -g -fPIC +CFLAGS = -Wall -g -fPIC #INC = -I./inc/ #1INC += /usr/include/MESA +INC = -I./usr/lib64/ LDFLAGS = -L./lib/ -LIBS = -lMESA_handle_logger -lMESA_prof_load -lMESA_htable -lmaatframe -<<<<<<< HEAD +LIBS = -lMESA_handle_logger -lMESA_prof_load -lMESA_htable -lmaatframe -lMESA_field_stat2 -lpthread OBJ =mctrl.o TARGET =mctrl -======= -OBJ =ir_mctrl.o -TARGET =ir_mctrl ->>>>>>> 263cdc86b5b2f58bd3003f0af3234bc4ea4690a4 .cpp.o: $(CCC) -c $(CFLAGS) $(INC) $< diff --git a/src/mctrl.cpp b/src/mctrl.cpp index e29ca5c..744f57a 100644 --- a/src/mctrl.cpp +++ b/src/mctrl.cpp @@ -3,12 +3,10 @@ #include <assert.h> #include <unistd.h> #include <time.h> +#include <pthread.h> #include "MESA_prof_load.h" -#include "MESA_handle_logger.h" -#include "Maat_rule.h" -#include "Maat_command.h" #include "mctrl.h" -#include "MESA_htable.h" + struct mctrl_glocal_info mctrl_g; @@ -137,16 +135,19 @@ void del_ir_redis_info(int flag,const char* table_line,int rule_id) if(flag & INTERCEPT_FLAG) { del_ir_line(mctrl_g.i_feather,(char*)INTERCEPT_TABLE_NAME,table_line,rule_id); + mctrl_g.fs_status_num[INTERCEPT_ID]--; } if(flag & NOMINEE_FLAG) { del_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE_NAME,table_line,rule_id); + mctrl_g.fs_status_num[NOMINEE_ID]--; } if(flag & CANDIDATE_FLAG) { del_ir_line(mctrl_g.n_feather,(char*)CANDIDATE_TABLE_NAME,table_line,rule_id); + mctrl_g.fs_status_num[CANDIDATE_ID]--; } return; @@ -198,12 +199,15 @@ void table_id_change_name(int table_id,char **table_name) { case STATIC_NOMINEE_ID: *table_name=(char*)STATIC_NOMINEE_TABLE_NAME; + mctrl_g.fs_status_num[STATIC_NOMINEE_ID]--; break; case DYNAMIC_NOMINEE_ID: *table_name=(char*)DYNAMIC_NOMINEE_TABLE_NAME; + mctrl_g.fs_status_num[DYNAMIC_NOMINEE_ID]--; break; case DNAT_POLICY_ID: *table_name=(char*)DNAT_POLICY_TABLE_NAME; + mctrl_g.fs_status_num[DNAT_POLICY_ID]--; break; case NOMINEE_ID: *table_name=(char*)NOMINEE_TABLE_NAME; @@ -241,7 +245,19 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch switch(table_id) { + case STATIC_NOMINEE_ID: + mctrl_g.fs_status_num[STATIC_NOMINEE_ID]++; + memcpy(mctrl_info.user_region,"0",sizeof("0")); + 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.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 DYNAMIC_NOMINEE_ID: + mctrl_g.fs_status_num[DYNAMIC_NOMINEE_ID]++; mctrl_info.addr_pool_id=0; memcpy(mctrl_info.src_port,"0",sizeof("0")); memcpy(mctrl_info.dst_ip,"0.0.0.0",sizeof("0.0.0.0")); @@ -255,17 +271,8 @@ void static_dynamic_dpolicy_table_new_cb(int table_id, const char* key, const ch 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")); - 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.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: + mctrl_g.fs_status_num[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.user_region,"0",sizeof("0")); @@ -389,6 +396,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, if(!(htable_flag & INTERCEPT_FLAG)) { htable_flag+=INTERCEPT_FLAG; + mctrl_g.fs_status_num[INTERCEPT_ID]++; } table_name=(char*)INTERCEPT_TABLE_NAME; break; @@ -396,6 +404,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, if(!(htable_flag & NOMINEE_FLAG)) { htable_flag+=NOMINEE_FLAG; + mctrl_g.fs_status_num[NOMINEE_ID]++; } table_name=(char*)NOMINEE_TABLE_NAME; break; @@ -403,6 +412,7 @@ long nominee_intercept_candidate_search_htable_cb(void *data, const uchar *key, if(!(htable_flag & CANDIDATE_FLAG)) { htable_flag+=CANDIDATE_FLAG; + mctrl_g.fs_status_num[CANDIDATE_ID]++; } table_name=(char*)CANDIDATE_TABLE_NAME; break; @@ -437,6 +447,7 @@ void nominee_intercept_candidate_table_new_cb(int table_id, const char* key, con if(*(int*)argp==NOMINEE_FLAG&&rule_id<DNAT_NUMBER) { del_ir_line(mctrl_g.n_feather,(char*)NOMINEE_TABLE_NAME,table_line,rule_id); + mctrl_g.fs_status_num[NOMINEE_ID]--; return; } @@ -507,7 +518,7 @@ void htable_iterate(const uchar * key, uint size, void * data, void * user) int rule_id=0; char *table_line=(char*)data; sscanf(table_line,"%d\t%d",&htable_flag,&rule_id); - + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_INFO, (char*)"htable_iterate", "The data rule_id:%d,htable_flag:%d",rule_id,htable_flag); set_ir_redis_info(htable_flag,table_line,rule_id); return; @@ -523,6 +534,7 @@ void Maat_init() const char *section_n = "Mctrl_NOMINEE"; char table_info_path[MAX_PATH_LEN]; char logger_path[MAX_PATH_LEN]; + int max_thread_num=0; int logger_level=0; @@ -638,12 +650,66 @@ int htable_init() } } +void *mctrl_fieldstat2(void* arg) +{ + int i=0; + + while(1) + { + for(i=0;i<STATUS_MAX_NUM;i++) + { + FS_operate(mctrl_g.stat_handle,mctrl_g.fs_status_id[i],0,FS_OP_SET,mctrl_g.fs_status_num[i]); + } + sleep(1); + } + return NULL; +} + + +void stat_init() +{ + char stat_path[]="log/mctrl_stat.log"; + const char* app_name="mctrl_fs2"; + int value=1; + pthread_t mctrl_fs2tid; + int err=0; + + mctrl_g.stat_handle = FS_create_handle(); + + FS_set_para(mctrl_g.stat_handle, OUTPUT_DEVICE, stat_path, strlen(stat_path)+1); + FS_set_para(mctrl_g.stat_handle, PRINT_MODE, &value, sizeof(value)); + FS_set_para(mctrl_g.stat_handle, CREATE_THREAD, &value, sizeof(value)); + FS_set_para(mctrl_g.stat_handle, STAT_CYCLE, &value, sizeof(value)); + FS_set_para(mctrl_g.stat_handle, APP_NAME, &app_name,strlen(app_name)+1); + + mctrl_g.fs_status_id[STATIC_NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "static_nominee_num"); + mctrl_g.fs_status_id[DYNAMIC_NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dynamic_nominee_num"); + mctrl_g.fs_status_id[DNAT_POLICY_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_policy_num"); + mctrl_g.fs_status_id[NOMINEE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "nominee_num"); + mctrl_g.fs_status_id[INTERCEPT_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "intercept_num"); + mctrl_g.fs_status_id[CANDIDATE_ID] = FS_register(mctrl_g.stat_handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "candidate_num"); + + FS_start(mctrl_g.stat_handle); + + err=pthread_create(&mctrl_fs2tid,NULL,mctrl_fieldstat2,NULL); + + if(err!=0) + { + MESA_handle_runtime_log(mctrl_g.logger_handle,RLOG_LV_FATAL,(char*)"field_stat2", "can't create thread:%s",strerror(err)); + assert(0); + } + + return; + +} + int main(int argc, char * argv [ ]) { Maat_init(); htable_init(); - + stat_init(); + int static_flag=STATIC_NOMINEE_FLAG; int dynamic_flag=DYNAMIC_NOMINEE_FLAG; int dnat_policy_flag=DNAT_POLICY_FLAG; diff --git a/src/mctrl.h b/src/mctrl.h index 3fd62b6..a7cfa8a 100644 --- a/src/mctrl.h +++ b/src/mctrl.h @@ -5,6 +5,7 @@ #include "Maat_rule.h" #include "Maat_command.h" #include "MESA_htable.h" +#include "field_stat2.h" #define MAX_STRING_LEN 64 #define MAX_PORT_LEN 6 @@ -15,6 +16,11 @@ #define MCTRL_CONF_FILE "./conf/mctrl.conf" + +//field_stat2 +#define MCTRL_STAT_PATH "./log/mctrl_field_stat.log" + + //table name #define NOMINEE_TABLE_NAME "IR_NOMINEE_IP" #define INTERCEPT_TABLE_NAME "IR_INTERCEPT_IP" @@ -38,17 +44,28 @@ #define INTERCEPT_FLAG 16 #define CANDIDATE_FLAG 32 -//table_id +/*table_id #define STATIC_NOMINEE_ID 0 #define DYNAMIC_NOMINEE_ID 1 #define DNAT_POLICY_ID 2 #define NOMINEE_ID 3 #define INTERCEPT_ID 4 #define CANDIDATE_ID 5 +*/ +enum FS_STATUS +{ + STATIC_NOMINEE_ID=0, + DYNAMIC_NOMINEE_ID, + DNAT_POLICY_ID, + NOMINEE_ID, + INTERCEPT_ID, + CANDIDATE_ID, + STATUS_MAX_NUM +}; + struct IR_MCTRL_INFO { - int htable_flag; int region_id; int group_id; @@ -81,6 +98,9 @@ struct mctrl_glocal_info Maat_feather_t n_feather; Maat_feather_t i_feather; MESA_htable_handle mctrl_htable_handle; + screen_stat_handle_t stat_handle; + int fs_status_id[STATUS_MAX_NUM]; + int fs_status_num[STATUS_MAX_NUM]; }; |
