From 75f6f2e2237a9e1254d3d14f945ddba7c8dc5b81 Mon Sep 17 00:00:00 2001 From: lijie Date: Tue, 22 Jan 2019 22:47:55 +0800 Subject: 修改ip location问题,修复删除dnat_policy时nominee_count计数错误 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/conf/Kazakhstan_v4.mmdb | Bin 0 -> 9707525 bytes bin/conf/all_ip_info_v4.mmdb | Bin 0 -> 148263034 bytes bin/conf/all_ip_only_coun_v4.mmdb | Bin 4496685 -> 0 bytes bin/conf/mrl.conf | 2 +- bin/conf/table_info.conf | 2 +- include/mrl_utils.h | 1 + src/Makefile | 2 +- src/mrl_io.cpp | 6 ++--- src/mrl_main.cpp | 2 +- src/mrl_redis.cpp | 54 ++++++++++++++++++++------------------ 10 files changed, 37 insertions(+), 32 deletions(-) create mode 100644 bin/conf/Kazakhstan_v4.mmdb create mode 100644 bin/conf/all_ip_info_v4.mmdb delete mode 100644 bin/conf/all_ip_only_coun_v4.mmdb diff --git a/bin/conf/Kazakhstan_v4.mmdb b/bin/conf/Kazakhstan_v4.mmdb new file mode 100644 index 0000000..ccbe14f Binary files /dev/null and b/bin/conf/Kazakhstan_v4.mmdb differ diff --git a/bin/conf/all_ip_info_v4.mmdb b/bin/conf/all_ip_info_v4.mmdb new file mode 100644 index 0000000..a5d5bd9 Binary files /dev/null and b/bin/conf/all_ip_info_v4.mmdb differ diff --git a/bin/conf/all_ip_only_coun_v4.mmdb b/bin/conf/all_ip_only_coun_v4.mmdb deleted file mode 100644 index 6c52c52..0000000 Binary files a/bin/conf/all_ip_only_coun_v4.mmdb and /dev/null differ diff --git a/bin/conf/mrl.conf b/bin/conf/mrl.conf index 8c02639..5b28a29 100644 --- a/bin/conf/mrl.conf +++ b/bin/conf/mrl.conf @@ -30,7 +30,7 @@ ht_max_element_num=0 ht_mutex_num=5 [IP_LOCATION_INFO] -ip_location_enable=0 +ip_location_enable=1 ip_location_level=0 ip_location_name=Kazakhstan [LINK_INFO] diff --git a/bin/conf/table_info.conf b/bin/conf/table_info.conf index a077928..97fe6a3 100644 --- a/bin/conf/table_info.conf +++ b/bin/conf/table_info.conf @@ -17,7 +17,7 @@ #id name type src_charset dst_charset do_merge cross_cache quick_mode 0 IR_NOMINEE_IP plugin 5 -- 1 IR_CANDIDATE_IP plugin 6 -- -2 IR_DNAT_POLICY plugin 11 -- +2 IR_DNAT_POLICY plugin 12 -- 3 IR_VXLAN_INFO plugin 5 -- 4 IR_MRL_IP_INFO plugin 5 -- 5 IR_DNAT_CANDIDATE_IP plugin 5 -- \ No newline at end of file diff --git a/include/mrl_utils.h b/include/mrl_utils.h index 43368cd..56d2759 100644 --- a/include/mrl_utils.h +++ b/include/mrl_utils.h @@ -24,6 +24,7 @@ #define MRL_DATE_LEN 50 #define MRL_LOCATION_NAME_LEN 20 + #define MRL_MAX_PATH 50 #define MRL_IPV4_TYPE 4 diff --git a/src/Makefile b/src/Makefile index 0f9f9ae..db3549b 100644 --- a/src/Makefile +++ b/src/Makefile @@ -39,4 +39,4 @@ install: cp $(TARGET) /home/mesasoft/mrl_run/plug/business/mrl cp ../bin/conf/mrl.inf /home/mesasoft/mrl_run/plug/business/mrl cp ../bin/conf/*.conf /home/mesasoft/mrl_run/mrl_conf/ - cp ../bin/conf/all_ip_only_coun_v4.mmdb /home/mesasoft/mrl_run/mrl_conf + cp ../bin/conf/*.mmdb /home/mesasoft/mrl_run/mrl_conf diff --git a/src/mrl_io.cpp b/src/mrl_io.cpp index c14ac3e..2879108 100644 --- a/src/mrl_io.cpp +++ b/src/mrl_io.cpp @@ -281,7 +281,7 @@ void ht_nominee_iterate_cb(const uchar* key, uint size, void* data, void* user) struct mrl_nominee* nominee = (struct mrl_nominee*)data; if(nominee!= NULL) { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_nominee_iterate_cb","pending detect nominee ip is %s,nominee_type is %d",nominee->ip_addr,nominee->nominee_type); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_nominee_iterate_cb","cur iterate nominee ip is %s,nominee_type is %d",nominee->ip_addr,nominee->nominee_type); switch(nominee->nominee_type) { case MRL_SNAT_NOMINEE_TYPE: @@ -542,7 +542,7 @@ void ht_dnat_policy_free_cb(void * data) { MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_dnat_policy_free_cb","the dnat_policy item:" "[config_id:%d,original_addr_type:%d,original_dest_ip:%s,original_dest_port:%s,original_protocol:%s,translated_user_type:%s,translated_user_id:%s," - "translated_dest_port:%s,do_log:%d,action:%d,addr_type:%d,service:%d,is_valid:%d,effective_range:%s,op_time:%s] in ht_dnat_policy is free", + "translated_dest_port:%s,do_log:%d,action:%d,service:%d,is_valid:%d,effective_range:%s,op_time:%s] in ht_dnat_policy is free", dnat_policy->config_id,dnat_policy->original_addr_type,dnat_policy->original_dest_ip,dnat_policy->original_dest_port,dnat_policy->original_protocol, dnat_policy->translated_user_type,dnat_policy->translated_user_id, dnat_policy->translated_dest_port,dnat_policy->do_log,dnat_policy->action, dnat_policy->service,dnat_policy->is_valid,dnat_policy->effective_range, dnat_policy->op_time); @@ -604,7 +604,7 @@ void ht_mrl_ip_info_free_cb(void * data) } -//жǷdnatݰ + bool mrl_dnat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple) { bool ret = false; diff --git a/src/mrl_main.cpp b/src/mrl_main.cpp index ebad461..40ad9d4 100644 --- a/src/mrl_main.cpp +++ b/src/mrl_main.cpp @@ -185,7 +185,7 @@ extern "C" int mrl_init(void) mrl_socket_init(); - mrl_mmdb_init("./mrl_conf/all_ip_only_coun_v4.mmdb"); + mrl_mmdb_init("./mrl_conf/Kazakhstan_v4.mmdb"); mrl_instance.ht_link_identity = mrl_htable_init((void *)ht_link_identity_free_cb); diff --git a/src/mrl_redis.cpp b/src/mrl_redis.cpp index 78b12c5..90b83c4 100644 --- a/src/mrl_redis.cpp +++ b/src/mrl_redis.cpp @@ -31,8 +31,8 @@ long ht_dnat_nominee_search_cb(void *data, const uchar *key, uint size, void *us } MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_dnat_nominee_search_cb","get nominee value:" "[config_id:%d,addr_pool_id:%d,addr_type:%d,ip_addr:%s,is_valid:%d,effective_range:%s,op_time:%s,nominee_count:%d]", - dnat_nominee->config_id, dnat_nominee->addr_pool_id,dnat_nominee->addr_type, - dnat_nominee->ip_addr, dnat_nominee->is_valid,dnat_nominee->effective_range,dnat_nominee->op_time); + dnat_nominee->config_id, dnat_nominee->addr_pool_id,dnat_nominee->addr_type, dnat_nominee->ip_addr, + dnat_nominee->is_valid,dnat_nominee->effective_range,dnat_nominee->op_time,dnat_nominee->nominee_count); return dnat_nominee->nominee_count; } else @@ -240,33 +240,23 @@ bool Maat_del_line(Maat_feather_t feather, int rule_id, int expire_after,const c /*del the vxlan_info_table and mrl_ip_info table*/ void Maat_del_back_info(const int cfg_id, const char *back_ip) { - int ret = 0; if(MESA_htable_search_cb(mrl_instance.ht_vxlan_info, (const unsigned char *)back_ip, MRL_STR_IP_LEN,NULL,NULL,NULL) != NULL) { - ret = MESA_htable_del(mrl_instance.ht_vxlan_info, (const unsigned char *)back_ip, MRL_STR_IP_LEN, NULL); - if(ret < 0) - { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_del_back_info","ht_vxlan_info del vxlan_info key[back_ip:%s] error! ret is %d",back_ip,ret); - assert(0); - } - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_del_back_info","the vxlan_info key[back_ip:%s] of ht_vxlan_info is deleted.",back_ip); - global_stat.vxlan_info_num --; if(Maat_del_line(mrl_instance.dynamic_feather, cfg_id,MRL_DEL_AFTER,IR_VXLAN_INFO_TABLE_NAME)) { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle,RLOG_LV_FATAL,"mrl_del_back_info","Maat succeed to del vlxan_info item [rule_id:%d,ip_addr:%s]",cfg_id,back_ip); - global_stat.vxlan_info_num--; + MESA_handle_runtime_log(mrl_instance.mrl_log_handle,RLOG_LV_DEBUG,"mrl_del_back_info","Maat succeed to del vlxan_info item [rule_id:%d,ip_addr:%s]",cfg_id,back_ip); } else { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_del_back_info","Maat fail to del vlxan_info item[rule_id:%d,up_addr:%s]",cfg_id,back_ip); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_del_back_info","Maat fail to del vlxan_info item[rule_id:%d,up_addr:%s]",cfg_id,back_ip); } if(Maat_del_line(mrl_instance.dynamic_feather,cfg_id,MRL_DEL_NOW,IR_MRL_IP_INFO_TABLE_NAME)) { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_del_back_info","Maat succeed to del mrl_ip item[rule_id:%d,ip_addr: %s]",cfg_id,back_ip); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_del_back_info","Maat succeed to del mrl_ip item[rule_id:%d,ip_addr: %s]",cfg_id,back_ip); } else { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_del_back_info","Maat fail to del mrl_ip item %s",back_ip); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_del_back_info","Maat fail to del mrl_ip item %s",back_ip); } } else @@ -1001,20 +991,20 @@ void mrl_ip_info_update_cb(int table_id, const char *table_line, void *u_para) if(ret == MRL_HTABLE_ADD_SUCCESS) { global_stat.mrl_ip_num ++; - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","ht_mrl_ip_info succeed to add mrl_ip_info key[ip_addr:%s]!",mrl_ip_item->back_ip); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","ht_mrl_ip_info succeed to add mrl_ip_info key[ip_addr:%s]!",mrl_ip_item->back_ip); } else { if(ret == MRL_HTABLE_ADD_DUPLICATE) { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","the mrl_ip_info key[ip_addr:%s] is duplicated in ht_mrl_ip_info.",mrl_ip_item->back_ip); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","the mrl_ip_info key[ip_addr:%s] is duplicated in ht_mrl_ip_info.",mrl_ip_item->back_ip); free(mrl_ip_item); mrl_ip_item = NULL; } else { - MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","ht_mrl_ip_info fail to insert the mrl_ip_info key[ip_addr:%s], ret is %d",mrl_ip_item->back_ip,ret); + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_ip_info_update_cb","ht_mrl_ip_info fail to insert the mrl_ip_info key[ip_addr:%s], ret is %d",mrl_ip_item->back_ip,ret); free(mrl_ip_item); mrl_ip_item = NULL; assert(0); @@ -1161,16 +1151,30 @@ void mrl_construct_ir_mrl_ip(int mrl_ip_config_id, const char* back_ip, int back void mrl_deal_snat_detect(struct mrl_nominee* snat_nominee, uint64_t link_identity) { - struct mrl_snat_candidate snat_candidate; - memset(&snat_candidate,0,sizeof(struct mrl_snat_candidate)); + int ret = 0; + struct mrl_snat_candidate* snat_candidate = NULL; + if(MESA_htable_search_cb(mrl_instance.ht_snat_candidate, (const unsigned char *)snat_nominee->ip_addr, MRL_STR_IP_LEN,NULL,NULL,NULL) == NULL) { - mrl_create_snat_candidate(&snat_candidate,snat_nominee); - if(Maat_set_snat_candidate(mrl_instance.dynamic_feather,&snat_candidate)) + snat_candidate = (struct mrl_snat_candidate* )calloc(1,sizeof(struct mrl_snat_candidate)); + global_stat.malloc_memory += sizeof(struct mrl_snat_candidate); + mrl_create_snat_candidate(snat_candidate,snat_nominee); + ret = MESA_htable_add(mrl_instance.ht_snat_candidate, (const unsigned char *)snat_candidate->ip_addr, MRL_STR_IP_LEN, snat_candidate); + if(ret < 0) { - if(mrl_construct_ir_vxlan_info(snat_candidate.config_id,link_identity,snat_candidate.ip_addr,MRL_SNAT_BACK_TYPE)) + MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_deal_snat_detect","fail to add the snat_candidate key[ip_addr:%s] into ht_vxlan_info! ret is %d",snat_candidate->ip_addr,ret); + free(snat_candidate); + snat_candidate = NULL; + assert(0); + } + else + { + if(Maat_set_snat_candidate(mrl_instance.dynamic_feather,snat_candidate)) { - mrl_construct_ir_mrl_ip(snat_candidate.config_id,snat_candidate.ip_addr,MRL_SNAT_BACK_TYPE); + if(mrl_construct_ir_vxlan_info(snat_candidate->config_id,link_identity,snat_candidate->ip_addr,MRL_SNAT_BACK_TYPE)) + { + mrl_construct_ir_mrl_ip(snat_candidate->config_id,snat_candidate->ip_addr,MRL_SNAT_BACK_TYPE); + } } } } -- cgit v1.2.3