summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile10
-rw-r--r--src/mctrl.cpp98
-rw-r--r--src/mctrl.h24
3 files changed, 107 insertions, 25 deletions
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];
};