From 58999736c83bc53aaf8ca23d40c97d2418b4e5bb Mon Sep 17 00:00:00 2001 From: liuyang Date: Tue, 4 Dec 2018 22:29:50 +0800 Subject: [PATCH] =?UTF-8?q?maat=5Fredis=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AEport=E8=8C=83=E5=9B=B4=EF=BC=8C=E4=BE=8B=E5=A6=8212345?= =?UTF-8?q?-54321=EF=BC=8Ckni.conf=E4=B8=AD=E5=8F=98=E9=87=8F=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E4=B8=8D=E5=8F=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kni_comm.c | 3 ++- kni_entry.c | 71 ++++++++++++++++++++++++++++++++++++++++--------- kni_entry.h | 1 + kni_intercept.c | 2 +- kni_replace.c | 5 ++-- 5 files changed, 66 insertions(+), 16 deletions(-) diff --git a/kni_comm.c b/kni_comm.c index b48fe95..19da1f6 100644 --- a/kni_comm.c +++ b/kni_comm.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include "stream.h" #include "MESA_prof_load.h" @@ -602,7 +603,7 @@ int kni_get_service_defined(int new_action,struct Maat_rule_t* maat_result,struc pmeinfo->cfg_id = maat_result->config_id; pmeinfo->ser_def_len = maat_result->serv_def_len; - assert(sizeof(pmeinfo->service_defined) > maat_result->serv_def_len); + assert((int)sizeof(pmeinfo->service_defined) > maat_result->serv_def_len); memcpy(pmeinfo->service_defined,maat_result->service_defined,maat_result->serv_def_len); } diff --git a/kni_entry.c b/kni_entry.c index 74cf484..390a8cf 100644 --- a/kni_entry.c +++ b/kni_entry.c @@ -12,7 +12,7 @@ -int g_kni_version_VERSION_20181129; +int g_kni_version_VERSION_20181204; struct kni_var_comm g_kni_comminfo; struct kni_var_struct g_kni_structinfo; @@ -548,7 +548,7 @@ char kni_first_tcpdata(const struct streaminfo* pstream,const void* a_packet,str pmeinfo->protocol=kni_protocol_identify(pstream,a_packet,data,datalen,domain,&domain_len); - assert(domain_lenprotocol==KNI_FLAG_HTTP) ||(pmeinfo->protocol==KNI_FLAG_SSL)) { if(domain_len != 0) @@ -1296,8 +1296,11 @@ int init_kni_dyn_maat_info() char redis_ip[INET_ADDRSTRLEN]={0}; int redis_db_index=0; - int redis_port=0; - unsigned short redis_port_real=0; + int redis_port_begin=0,redis_port_end=0; + unsigned short redis_port_select=0; + + + char redis_port_range[KNI_CONF_MAXLEN]={0}; int scandir_interval=KNI_SCANDIR_INTERVAL; int effect_interval=KNI_EFFECT_INTERVAL; @@ -1311,9 +1314,10 @@ int init_kni_dyn_maat_info() MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_effect_interval",&effect_interval,KNI_EFFECT_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_db_index",&redis_db_index,0); - MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_port",(int*)&redis_port); +// MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_port",(int*)&redis_port); MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_server",redis_ip,INET_ADDRSTRLEN); + MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_redis_port",redis_port_range,sizeof(redis_port_range),"6379"); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_DYN_STAT_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_DYNMAAT_MODE,(char*)"dyn_table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH); @@ -1331,9 +1335,29 @@ int init_kni_dyn_maat_info() } else if(maat_readconf_mode==KNI_READCONF_REDIS) { - redis_port_real=(unsigned short)redis_port; + + ret=sscanf(redis_port_range,"%d-%d", &redis_port_begin, &redis_port_end); + if(ret==1) + { + redis_port_select=(unsigned short)redis_port_begin; + } + else if(ret==2) + { + srand(time(NULL)); + redis_port_select=(unsigned short)(redis_port_begin+rand()%(redis_port_end-redis_port_begin)); + } + else + { + MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_INIT,"Invalid redis port range %s, MAAT init failed.", redis_port_range); + return -1; + } + + + + MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_INIT,"dynmic_maat_redis select port:%d",redis_port_select); + Maat_set_feather_opt(g_kni_maatinfo.ipd_dyn_maat_feather,MAAT_OPT_REDIS_IP,(void*)redis_ip,strlen(redis_ip)+1); - Maat_set_feather_opt(g_kni_maatinfo.ipd_dyn_maat_feather,MAAT_OPT_REDIS_PORT,(void*)&redis_port_real,sizeof(unsigned short)); + Maat_set_feather_opt(g_kni_maatinfo.ipd_dyn_maat_feather,MAAT_OPT_REDIS_PORT,(void*)&redis_port_select,sizeof(unsigned short)); Maat_set_feather_opt(g_kni_maatinfo.ipd_dyn_maat_feather,MAAT_OPT_REDIS_INDEX,(void*)&redis_db_index,sizeof(int)); } @@ -1369,8 +1393,8 @@ int init_kni_static_maat_info() char redis_ip[INET_ADDRSTRLEN]={0}; int redis_db_index=0; - int redis_port=0; - unsigned short redis_port_real=0; + int redis_port_begin=0,redis_port_end=0; + unsigned short redis_port_select=0; int scandir_interval=KNI_SCANDIR_INTERVAL; int effect_interval=KNI_EFFECT_INTERVAL; @@ -1380,19 +1404,24 @@ int init_kni_static_maat_info() char full_cfg_dir[KNI_CONF_MAXLEN]={0}; char inc_cfg_dir[KNI_CONF_MAXLEN]={0}; + char redis_port_range[KNI_CONF_MAXLEN]={0}; + MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"maat_readconf_mode",&maat_readconf_mode,KNI_READCONF_IRIS); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"scandir_interval",&scandir_interval,KNI_SCANDIR_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"effect_interval",&effect_interval,KNI_EFFECT_INTERVAL); MESA_load_profile_int_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"redis_db_index",&redis_db_index,0); - MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"redis_port",(int*)&redis_port); +// MESA_load_profile_int_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"redis_port",(int*)&redis_port); + + MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"redis_port",redis_port_range,sizeof(redis_port_range),"6379"); MESA_load_profile_string_nodef((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"redis_server",redis_ip,INET_ADDRSTRLEN); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"table_info_path",table_info_path,KNI_CONF_MAXLEN,KNI_TABLEINFO_PATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"inc_cfg_dir",inc_cfg_dir,KNI_CONF_MAXLEN,KNI_INCCFG_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"stat_file_path",stat_file_dir,KNI_CONF_MAXLEN,KNI_STAT_FILEPATH); MESA_load_profile_string_def((char*)KNI_CONF_FILENAME,(char*)KNI_STATIC_MAAT_MODE,(char*)"full_cfg_dir",full_cfg_dir,KNI_CONF_MAXLEN,KNI_FULLCFG_FILEPATH); + g_kni_maatinfo.maat_feather=Maat_feather(g_iThreadNum,table_info_path,g_kni_comminfo.logger); if(g_kni_maatinfo.maat_feather==NULL) @@ -1412,9 +1441,27 @@ int init_kni_static_maat_info() } else if(maat_readconf_mode==KNI_READCONF_REDIS) { - redis_port_real=(unsigned short)redis_port; + + ret=sscanf(redis_port_range,"%d-%d", &redis_port_begin, &redis_port_end); + if(ret==1) + { + redis_port_select=(unsigned short)redis_port_begin; + } + else if(ret==2) + { + srand(time(NULL)); + redis_port_select=(unsigned short)(redis_port_begin+rand()%(redis_port_end-redis_port_begin)); + } + else + { + MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_INIT,"Invalid redis port range %s, MAAT init failed.", redis_port_range); + return -1; + } + + + MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_INIT,"static_maat_redis select port:%d",redis_port_select); Maat_set_feather_opt(g_kni_maatinfo.maat_feather,MAAT_OPT_REDIS_IP,(void*)redis_ip,strlen(redis_ip)+1); - Maat_set_feather_opt(g_kni_maatinfo.maat_feather,MAAT_OPT_REDIS_PORT,(void*)&redis_port_real,sizeof(unsigned short)); + Maat_set_feather_opt(g_kni_maatinfo.maat_feather,MAAT_OPT_REDIS_PORT,(void*)&redis_port_select,sizeof(unsigned short)); Maat_set_feather_opt(g_kni_maatinfo.maat_feather,MAAT_OPT_REDIS_INDEX,(void*)&redis_db_index,sizeof(int)); } diff --git a/kni_entry.h b/kni_entry.h index 28ac613..4571d4e 100644 --- a/kni_entry.h +++ b/kni_entry.h @@ -12,6 +12,7 @@ #include "kni_comm.h" #include "kni_intercept.h" #include "kni_ratelimit.h" +#include "kni_utils.h" #ifndef TH_FIN diff --git a/kni_intercept.c b/kni_intercept.c index 4765984..3105e8a 100644 --- a/kni_intercept.c +++ b/kni_intercept.c @@ -1001,7 +1001,7 @@ char tun_write_data(int fd, const char* send_buf, size_t send_buflen,struct stre MESA_handle_runtime_log(g_kni_comminfo.logger, RLOG_LV_FATAL,KNI_MODULE_WRITETUN,"write() error %d, %s",errno,strerror(errno)); ret=APP_STATE_DROPPKT|APP_STATE_DROPME; } - else if(succ_sendlen #include #include +#include #include "kni_replace.h" #include "kni_entry.h" @@ -48,11 +49,11 @@ int kni_get_replace(int cfg_id,int ser_def_len,char* service_defined,struct kni_ replace_len = strlen(replace); replace_info->original_len = replace - original -1; - assert(sizeof(replace_info->find)>=replace_info->original_len); + assert((int)sizeof(replace_info->find)>=replace_info->original_len); memcpy(replace_info->find,original,replace_info->original_len); replace_info->replace_len = replace_len; - assert(sizeof(replace_info->replace)>=replace_info->replace_len); + assert((int)sizeof(replace_info->replace)>=replace_info->replace_len); memcpy(replace_info->replace,replace,replace_info->replace_len); return 0;