diff options
| author | lijie <[email protected]> | 2019-01-22 20:18:52 +0800 |
|---|---|---|
| committer | lijie <[email protected]> | 2019-01-22 20:18:52 +0800 |
| commit | 8fd0a24f86624b3c985038e60887b32e41b0559e (patch) | |
| tree | df102d89dd9b78e7ca26f132f75dbf27364e4591 | |
| parent | a558cf074391f1f4b3581c9a4b5d6c6241d21c28 (diff) | |
添加Ip location功能,同时修复读取redis数据,当进行删除操作时内存泄漏问题
| -rw-r--r-- | bin/conf/mrl.conf | 13 | ||||
| -rw-r--r-- | include/mrl_main.h | 16 | ||||
| -rw-r--r-- | include/mrl_utils.h | 9 | ||||
| -rw-r--r-- | src/mrl_io.cpp | 49 | ||||
| -rw-r--r-- | src/mrl_main.cpp | 128 | ||||
| -rw-r--r-- | src/mrl_redis.cpp | 411 | ||||
| -rw-r--r-- | src/mrl_utils.cpp | 22 |
7 files changed, 403 insertions, 245 deletions
diff --git a/bin/conf/mrl.conf b/bin/conf/mrl.conf index e89b16b..8c02639 100644 --- a/bin/conf/mrl.conf +++ b/bin/conf/mrl.conf @@ -2,8 +2,10 @@ log_level=10
log_path=./log/mrl.log
[DETECT_INFO]
-dest_ip=192.168.10.180
-dest_port=20181
+inside_detect_ip=192.168.10.180
+outside_detect_ip=123.57.35.217
+
+detect_port=20181
local_port=20182
[SOCK_INFO]
mrl_port=23456
@@ -26,7 +28,10 @@ dynamic_redis_index=5 ht_slot_size=1048576
ht_max_element_num=0
ht_mutex_num=5
-[CANDIDATE_INFO]
-ip_location=Kazakhstan
+
+[IP_LOCATION_INFO]
+ip_location_enable=0
+ip_location_level=0
+ip_location_name=Kazakhstan
[LINK_INFO]
link_identity_path=/run/mrzcpd/mrmonit.tunnat
diff --git a/include/mrl_main.h b/include/mrl_main.h index 8ccae5e..70f6039 100644 --- a/include/mrl_main.h +++ b/include/mrl_main.h @@ -20,11 +20,11 @@ struct mrl_global_cfg char mrl_log_path[MRL_MAX_PATH];
int mrl_log_level;
- //detect info
- //TODO �¸��汾��Ҫ������̨̽���������һ̨����һ̨����
- char dest_ip[MRL_STR_IP_LEN];
- uint16_t dest_port;
- uint16_t local_port;
+ //detect server info
+ char inside_detect_ip[MRL_STR_IP_LEN];
+ char outside_detect_ip[MRL_STR_IP_LEN];
+ uint16_t detect_port;
+ uint16_t local_port;
//socket info
char mgw_ip[MRL_STR_IP_LEN];
@@ -50,8 +50,10 @@ struct mrl_global_cfg unsigned int ht_max_element_num;
unsigned int ht_mutex_num;
- //candidate info
- char ip_location[MRL_LOCATION_LEN];
+ //ip location info
+ unsigned int ip_location_enable;//0--close;1--enable
+ unsigned int ip_location_level;//0--contruny;1--province
+ char ip_location_name[MRL_LOCATION_NAME_LEN];
//vxlan_info
char link_identity_path[MRL_MAX_PATH];
diff --git a/include/mrl_utils.h b/include/mrl_utils.h index c08e887..43368cd 100644 --- a/include/mrl_utils.h +++ b/include/mrl_utils.h @@ -23,7 +23,7 @@ #define MRL_DATE_LEN 50
-#define MRL_LOCATION_LEN 20
+#define MRL_LOCATION_NAME_LEN 20
#define MRL_MAX_PATH 50
#define MRL_IPV4_TYPE 4
@@ -52,6 +52,13 @@ #define MRL_INVALID 0
#define MRL_VALID 1
+#define MRL_CLOSED_LOCATION -1
+#define MRL_INSIDE_LOCATION 0
+#define MRL_OUTSIDE_LOCATION 1
+
+#define MRL_COUNTRY_LEVEL 0
+#define MRL_PROVINCE_LEVEL 1
+
#define MRL_ADD_DNAT_NOMINEE 0
#define MRL_DEL_DNAT_NOMINEE 1
diff --git a/src/mrl_io.cpp b/src/mrl_io.cpp index 5009f3a..c14ac3e 100644 --- a/src/mrl_io.cpp +++ b/src/mrl_io.cpp @@ -216,7 +216,7 @@ size_t mrl_build_udp_hdr(char *udp_pkt,size_t payload_len) {
struct udphdr *udp_hdr = (struct udphdr *)udp_pkt;
udp_hdr->source = htons(mrl_instance.mrl_cfg.local_port);
- udp_hdr->dest = htons(mrl_instance.mrl_cfg.dest_port);
+ udp_hdr->dest = htons(mrl_instance.mrl_cfg.detect_port);
udp_hdr->len = htons(payload_len + MRL_UDP_HDR_LEN);
udp_hdr->check = 0;
return payload_len + MRL_UDP_HDR_LEN;
@@ -323,6 +323,7 @@ void ht_link_identity_iterate_cb(const uchar* key, uint size, void* data, void* size_t ip_len = 0;
int thread_seq = 0;
int temp_len = 0;
+ int is_inside = -1;
char ip_pkt[MRL_IP_PKT_LEN];
memset(ip_pkt,0,MRL_IP_PKT_LEN);
uint64_t* identity_value = (uint64_t* )data;
@@ -333,14 +334,47 @@ void ht_link_identity_iterate_cb(const uchar* key, uint size, void* data, void* udp_payload_len = mrl_build_udp_payload(ip_pkt +MRL_UDP_HDR_LEN + MRL_IP_HDR_LEN,link_identity,mydata->nominee_type);
udp_len = mrl_build_udp_hdr(ip_pkt + MRL_IP_HDR_LEN, udp_payload_len);
inet_pton(AF_INET,mydata->detect_ip,&sip);
- inet_pton(AF_INET,mrl_instance.mrl_cfg.dest_ip,&dip);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ is_inside =mrl_is_inside_ip(mydata->detect_ip);
+ if(is_inside)
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.outside_detect_ip,&dip);
+ }
+ else
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.inside_detect_ip,&dip);
+ }
+ }
+ else
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.outside_detect_ip,&dip);
+ }
ip_len = mrl_build_ip_hdr(ip_pkt,sip,dip,udp_len);
sapp_get_platform_opt(SPO_INDEPENDENT_THREAD_ID, &thread_seq, &temp_len);
mrl_send_to_gdev(thread_seq,link_identity,ip_pkt,ip_len);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
- "cur detect ip %s detect info[nominee_type:%d,link_identity:%lu]",
- mydata->detect_ip,mydata->nominee_type,link_identity);
- global_stat.send_detect_pkts ++;
+ global_stat.send_detect_pkts ++;
+ switch(is_inside)
+ {
+ case MRL_CLOSED_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur ip location function is closed,cur detect ip is :%s detect dest ip is: %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.outside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ case MRL_INSIDE_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur detect ip %s is inside ip,detect dest ip is %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.outside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ case MRL_OUTSIDE_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur detect ip %s is outside ip,detect dest ip is %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.inside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ default:
+ assert(0);
+ break;
+ }
}
}
@@ -350,8 +384,7 @@ long ht_dnat_policy_search_cb(void *data, const uchar *key, uint size, void *use struct mrl_dnat_policy* dnat_policy = (struct mrl_dnat_policy* )data;
struct mrl_dnat_policy* user_dnat_policy = (struct mrl_dnat_policy* )user_arg;
- if(dnat_policy != NULL)//�û��������ö˿ڣ�
- {
+ if(dnat_policy != NULL)
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","get ht_dnat_policy value:"
"[config_id:%d,original_addr_type:%d,original_dest_ip:%s,original_dest_port:%s,original_protocol:%s,translated_dest_ip:%s,"
"translated_dest_port:%s,do_log:%d,action:%d,addr_type:%d,service:%d,is_valid:%d,effective_range:%s,op_time:%s]",
diff --git a/src/mrl_main.cpp b/src/mrl_main.cpp index 6440270..ebad461 100644 --- a/src/mrl_main.cpp +++ b/src/mrl_main.cpp @@ -66,7 +66,7 @@ void test_Maat_set_nominee_line() void mrl_cfg_init(const char *profile)
{
- int temp_port = 0;
+ unsigned int temp_port = 0;
/********** load log info **********/
MESA_load_profile_int_def(profile, "LOG_INFO", "log_level", &(mrl_instance.mrl_cfg.mrl_log_level),RLOG_LV_DEBUG);
MESA_load_profile_string_def(profile, "LOG_INFO", "log_path", mrl_instance.mrl_cfg.mrl_log_path, MRL_MAX_PATH, "./log/mrl.log");
@@ -82,21 +82,25 @@ void mrl_cfg_init(const char *profile) /********** load detect info **********/
- MESA_load_profile_string_def(profile, "DETECT_INFO", "dest_ip", mrl_instance.mrl_cfg.dest_ip, MRL_STR_IP_LEN, "0.0.0.0");
- MESA_load_profile_int_def(profile, "DETECT_INFO", "dest_port",&(temp_port),8888);
+ MESA_load_profile_string_def(profile, "DETECT_INFO", "inside_detect_ip", mrl_instance.mrl_cfg.inside_detect_ip, MRL_STR_IP_LEN, "0.0.0.0");
+ MESA_load_profile_string_def(profile, "DETECT_INFO", "outside_detect_ip", mrl_instance.mrl_cfg.outside_detect_ip, MRL_STR_IP_LEN, "0.0.0.0");
+
+ MESA_load_profile_uint_def(profile, "DETECT_INFO", "detect_port",&(temp_port),8888);
assert(temp_port > 0 && temp_port <= 65535);
- mrl_instance.mrl_cfg.dest_port = temp_port;
- MESA_load_profile_int_def(profile, "DETECT_INFO", "local_port",&(temp_port),8888);
+ mrl_instance.mrl_cfg.detect_port = temp_port;
+
+ MESA_load_profile_uint_def(profile, "DETECT_INFO", "local_port",&(temp_port),8888);
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.local_port = temp_port;
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load detect info is:"
- "[dest_ip:%s,dest_port:%hu,local_port:%hu]",
- mrl_instance.mrl_cfg.dest_ip,mrl_instance.mrl_cfg.dest_port, mrl_instance.mrl_cfg.local_port);
+ "[inside_detect_ip:%s,outside_detect_ip:%s,detect_port:%hu,local_port:%hu]",
+ mrl_instance.mrl_cfg.inside_detect_ip, mrl_instance.mrl_cfg.outside_detect_ip,
+ mrl_instance.mrl_cfg.detect_port,mrl_instance.mrl_cfg.local_port);
/********** load sock info **********/
MESA_load_profile_string_def(profile, "SOCK_INFO", "mgw_ip", mrl_instance.mrl_cfg.mgw_ip, MRL_STR_IP_LEN, "0.0.0.0");
- MESA_load_profile_int_def(profile, "SOCK_INFO", "mgw_port",&(temp_port),8888);
+ MESA_load_profile_uint_def(profile, "SOCK_INFO", "mgw_port",&(temp_port),8888);
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.mgw_port = temp_port;
@@ -110,7 +114,7 @@ void mrl_cfg_init(const char *profile) assert(0);
}
inet_ntop(AF_INET,(void *)&temp_mrl_ip, mrl_instance.mrl_cfg.mrl_ip,MRL_STR_IP_LEN);
- MESA_load_profile_int_def(profile, "SOCK_INFO", "mrl_port",&(temp_port),8888);
+ MESA_load_profile_uint_def(profile, "SOCK_INFO", "mrl_port",&(temp_port),8888);
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.mrl_port = temp_port;
@@ -126,13 +130,13 @@ void mrl_cfg_init(const char *profile) MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_stat_path", mrl_instance.mrl_cfg.Maat_stat_path,MRL_MAX_PATH, "./log/Maat_stat.log");
MESA_load_profile_string_def(profile, "MAAT_INFO", "static_redis_ip", mrl_instance.mrl_cfg.static_redis_ip, MRL_STR_IP_LEN, "127.0.0.1");
- MESA_load_profile_int_def(profile, "MAAT_INFO", "static_redis_port", &(temp_port), 6379);
+ MESA_load_profile_uint_def(profile, "MAAT_INFO", "static_redis_port", &(temp_port), 6379);
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.static_redis_port = temp_port;
MESA_load_profile_int_def(profile, "MAAT_INFO", "static_redis_index", &(mrl_instance.mrl_cfg.static_redis_index), 1);
MESA_load_profile_string_def(profile, "MAAT_INFO", "dynamic_redis_ip", mrl_instance.mrl_cfg.dynamic_redis_ip, MRL_STR_IP_LEN, "127.0.0.1");
- MESA_load_profile_int_def(profile, "MAAT_INFO", "dynamic_redis_port", &(temp_port), 6379);
+ MESA_load_profile_uint_def(profile, "MAAT_INFO", "dynamic_redis_port", &(temp_port), 6379);
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.dynamic_redis_port = temp_port;
MESA_load_profile_int_def(profile, "MAAT_INFO", "dynamic_redis_index", &(mrl_instance.mrl_cfg.dynamic_redis_index), 1);
@@ -155,11 +159,12 @@ void mrl_cfg_init(const char *profile) "[ht_slot_size:%d,ht_max_element_num:%d,ht_mutex_num:%d]",
mrl_instance.mrl_cfg.ht_slot_size,mrl_instance.mrl_cfg.ht_max_element_num, mrl_instance.mrl_cfg.ht_mutex_num);
- /********** load candidate info **********/
- MESA_load_profile_string_def(profile, "CANDIDATE_INFO", "ip_location", mrl_instance.mrl_cfg.ip_location, MRL_LOCATION_LEN, "China");
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load candidate info is:"
- "[ip_location:%s]",mrl_instance.mrl_cfg.ip_location);
+ /********** load ip location info **********/
+ MESA_load_profile_uint_def(profile, "IP_LOCATION_INFO", "ip_location_enable", &(mrl_instance.mrl_cfg.ip_location_enable), 0);
+ MESA_load_profile_uint_def(profile, "IP_LOCATION_INFO", "ip_location_level", &(mrl_instance.mrl_cfg.ip_location_level),0);
+ MESA_load_profile_string_def(profile, "IP_LOCATION_INFO", "ip_location_name", mrl_instance.mrl_cfg.ip_location_name, MRL_LOCATION_NAME_LEN, "China");
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load ip location info is:"
+ "[ip_location_enable::%u,ip_location_level:%u,ip_location_name:%s]",mrl_instance.mrl_cfg.ip_location_enable,mrl_instance.mrl_cfg.ip_location_level,mrl_instance.mrl_cfg.ip_location_name);
/********** load link identity info **********/
MESA_load_profile_string_def(profile, "LINK_INFO", "link_identity_path", mrl_instance.mrl_cfg.link_identity_path, MRL_MAX_PATH, "./conf/link_dentity.json");
@@ -338,62 +343,59 @@ extern "C" char mrl_udp_entry(struct streaminfo *a_udp, void **pme, int thread_ dport = ntohs(a_udp->addr.tuple4_v4->dest);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","cur udp pkt streaminfo:[sip:%s,sport:%hu,dip:%s,dport:%hu]",
sip,sport,dip,dport);
- }
- switch(a_udp->pktstate){
- case OP_STATE_PENDING:
- if(mrl_identify_detect_pkt(a_udp,(const char*)raw_packet,&tuple))
+ if(mrl_identify_detect_pkt(a_udp,(const char*)raw_packet,&tuple))
+ {
+ global_stat.recv_detect_pkts ++;
+ ret =APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ }
+ else
+ {
+ switch(a_udp->pktstate)
{
- global_stat.recv_detect_pkts ++;
- ret =APP_STATE_DROPME|APP_STATE_DROPPKT;
- }
- else
- {
- if(mrl_dnat_pkt_identify(a_udp,&tuple))
- {
- global_stat.recv_ir_udp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
- send_len,tuple.sip,tuple.sport,tuple.dip,tuple.dport);
- ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
- }
- else
- {
- if(mrl_snat_pkt_identify(a_udp,&tuple))
+ case OP_STATE_PENDING:
+ if(mrl_dnat_pkt_identify(a_udp,&tuple))
{
- global_stat.recv_ir_udp_pkts ++;
+ global_stat.recv_ir_udp_pkts ++;
send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ send_len,tuple.sip,tuple.sport,tuple.dip,tuple.dport);
ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
}
else
{
- ret =APP_STATE_DROPME|APP_STATE_FAWPKT;
- }
- }
- }
- break;
- case OP_STATE_DATA:
- global_stat.recv_ir_udp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ if(mrl_snat_pkt_identify(a_udp,&tuple))
+ {
+ global_stat.recv_ir_udp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ }
+ else
+ {
+ ret =APP_STATE_DROPME|APP_STATE_FAWPKT;
+ }
+ }
+ break;
+ case OP_STATE_DATA:
+ global_stat.recv_ir_udp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
send_len,tuple.sip,tuple.sport,tuple.dip,tuple.dport);
- ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
- break;
-
- case OP_STATE_CLOSE:
- if(raw_packet != NULL)
- {
- global_stat.recv_ir_udp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ break;
+ case OP_STATE_CLOSE:
+ global_stat.recv_ir_udp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_udp_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
send_len,tuple.sip,tuple.sport,tuple.dip,tuple.dport);
- }
- ret = APP_STATE_DROPME|APP_STATE_DROPPKT;
- break;
-
- default:
- ret = APP_STATE_DROPME | APP_STATE_FAWPKT;
- break;
- }
+ ret = APP_STATE_DROPME|APP_STATE_DROPPKT;
+ break;
+ default:
+ ret = APP_STATE_DROPME | APP_STATE_FAWPKT;
+ break;
+ }
+
+ }
+ }
return ret;
}
diff --git a/src/mrl_redis.cpp b/src/mrl_redis.cpp index 41d3580..78b12c5 100644 --- a/src/mrl_redis.cpp +++ b/src/mrl_redis.cpp @@ -238,10 +238,9 @@ 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 char *back_ip)
+void Maat_del_back_info(const int cfg_id, const char *back_ip)
{
int ret = 0;
- int rule_id = 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);
@@ -252,19 +251,18 @@ void Maat_del_back_info(const char *back_ip) }
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 --;
- inet_pton(AF_INET,back_ip, &rule_id);
- if(Maat_del_line(mrl_instance.dynamic_feather, rule_id,MRL_DEL_AFTER,IR_VXLAN_INFO_TABLE_NAME))
+ 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 %s",back_ip);
+ 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--;
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_del_back_info","Maat fail to del vlxan_info item %s",back_ip);
+ 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);
}
- if(Maat_del_line(mrl_instance.dynamic_feather,rule_id,MRL_DEL_NOW,IR_MRL_IP_INFO_TABLE_NAME))
+ 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 %s",back_ip);
+ 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);
}
else
{
@@ -297,7 +295,15 @@ void mrl_create_snat_candidate(struct mrl_snat_candidate* snat_candidate, struct snat_candidate->addr_pool_id= snat_nominee->addr_pool_id;
snat_candidate->addr_type = MRL_IPV4_TYPE ;
strncpy(snat_candidate->ip_addr,(const char*)snat_nominee->ip_addr,MRL_STR_IP_LEN);
- snat_candidate->location = mrl_is_inside_ip(snat_candidate->ip_addr);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ snat_candidate->location = mrl_is_inside_ip(snat_candidate->ip_addr);
+ }
+ else
+ {
+ snat_candidate->location = MRL_CLOSED_LOCATION;
+ }
+
snat_candidate->is_valid = 1;
strncpy(snat_candidate->effective_range, (const char*)snat_nominee->effective_range, MRL_STR_EFFEC_RANGE_LEN);
mrl_get_cur_time(snat_candidate->op_time);
@@ -311,7 +317,14 @@ void mrl_create_dnat_candidate(struct mrl_dnat_candidate* dnat_candidate, struct dnat_candidate->config_id = dnat_nominee->config_id;
strncpy(dnat_candidate->ip_addr, dnat_nominee->ip_addr, MRL_STR_IP_LEN);
dnat_candidate->addr_type = dnat_nominee->addr_type;
- dnat_candidate->location = mrl_is_inside_ip(dnat_candidate->ip_addr);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ dnat_candidate->location = mrl_is_inside_ip(dnat_candidate->ip_addr);
+ }
+ else
+ {
+ dnat_candidate->location = MRL_CLOSED_LOCATION;
+ }
dnat_candidate->is_valid = 1;
strncpy(dnat_candidate->effective_range, dnat_nominee->effective_range,MRL_STR_EFFEC_RANGE_LEN);
mrl_get_cur_time(dnat_candidate->op_time);
@@ -320,22 +333,6 @@ void mrl_create_dnat_candidate(struct mrl_dnat_candidate* dnat_candidate, struct dnat_candidate->config_id,dnat_candidate->ip_addr,dnat_candidate->addr_type,dnat_candidate->location,
dnat_candidate->is_valid,dnat_candidate->effective_range,dnat_candidate->op_time);
}
-void mrl_create_dnat_nominee(struct mrl_nominee* dnat_nominee, struct mrl_dnat_policy* dnat_policy)
-{
- dnat_nominee->config_id = dnat_policy->config_id;
- dnat_nominee->addr_pool_id = 0;
- strncpy(dnat_nominee->ip_addr,dnat_policy->original_dest_ip,MRL_STR_IP_LEN);
- dnat_nominee->addr_type = dnat_policy->original_addr_type;
- dnat_nominee->is_valid = 1;
- strncpy(dnat_nominee->effective_range,dnat_policy->effective_range,MRL_STR_EFFEC_RANGE_LEN);
- mrl_get_cur_time(dnat_nominee->op_time);
- dnat_nominee->nominee_type=MRL_DNAT_NOMINEE_TYPE;
- dnat_nominee->nominee_count = 1;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_create_dnat_nominee","create dnat nominee item:"
- "[config_id:%d,addr_pool_id:%d,ip_addr:%s,addr_type:%d,effective_range:%s,op_time:%s],nominee_type:%d,nominee_count:%d",
- dnat_nominee->config_id,dnat_nominee->addr_pool_id,dnat_nominee->ip_addr,dnat_nominee->addr_type,
- dnat_nominee->effective_range,dnat_nominee->op_time,dnat_nominee->nominee_type,dnat_nominee->nominee_count);
-}
void mrl_create_vxlan_info(struct mrl_vxlan_info *vxlan_info, int cfg_id, uint64_t link_identity, const char *back_ip, int back_type)
{
@@ -390,6 +387,24 @@ void mrl_create_mrl_ip(struct mrl_mrl_ip *mrl_ip, int config_id, const char *bac mrl_ip->is_valid, mrl_ip->effective_range, mrl_ip->op_time);
}
+
+void mrl_build_dnat_nominee_item(struct mrl_nominee* dnat_nominee_item, struct mrl_dnat_policy* dnat_policy)
+{
+ dnat_nominee_item->config_id = dnat_policy->config_id;
+ dnat_nominee_item->addr_pool_id = 0;
+ strncpy(dnat_nominee_item->ip_addr,dnat_policy->original_dest_ip,MRL_STR_IP_LEN);
+ dnat_nominee_item->addr_type = dnat_policy->original_addr_type;
+ dnat_nominee_item->is_valid = 1;
+ strncpy(dnat_nominee_item->effective_range,dnat_policy->effective_range,MRL_STR_EFFEC_RANGE_LEN);
+ mrl_get_cur_time(dnat_nominee_item->op_time);
+ dnat_nominee_item->nominee_type=MRL_DNAT_NOMINEE_TYPE;
+ dnat_nominee_item->nominee_count = 1;
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_create_dnat_nominee","create dnat nominee item:"
+ "[config_id:%d,addr_pool_id:%d,ip_addr:%s,addr_type:%d,effective_range:%s,op_time:%s],nominee_type:%d,nominee_count:%d",
+ dnat_nominee_item->config_id,dnat_nominee_item->addr_pool_id,dnat_nominee_item->ip_addr,dnat_nominee_item->addr_type,
+ dnat_nominee_item->effective_range,dnat_nominee_item->op_time,dnat_nominee_item->nominee_type,dnat_nominee_item->nominee_count);
+}
+
void snat_nominee_start_cb(int update_type,void* u_para)
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_start_cb","start to update IR_NOMINEE_IP, cur update type is %d", update_type);
@@ -398,28 +413,49 @@ void snat_nominee_start_cb(int update_type,void* u_para) void snat_nominee_update_cb(int table_id,const char *table_line,void *u_para)
{
- int ret = 0;
- struct mrl_nominee *snat_nominee = (struct mrl_nominee *)calloc(1, sizeof(struct mrl_nominee));
- global_stat.malloc_memory += sizeof(struct mrl_nominee);
-
- sscanf(table_line,"%d\t%d\t%d\t%s\t%d\t%s\t%s",
- &(snat_nominee->config_id), &(snat_nominee->addr_pool_id), &(snat_nominee->addr_type),
- snat_nominee->ip_addr, &(snat_nominee->is_valid), snat_nominee->effective_range, snat_nominee->op_time);
- snat_nominee->nominee_type = MRL_SNAT_NOMINEE_TYPE;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","get IR_NOMINEE_IP item:"
- "[config_id:%d,addr_pool_id:%d,addr_type:%d,ip_addr:%s,is_valid:%d,effective_range:%s,op_time:%s],nominee_type:%d",
- snat_nominee->config_id, snat_nominee->addr_pool_id,snat_nominee->addr_type,
- snat_nominee->ip_addr, snat_nominee->is_valid,snat_nominee->effective_range,snat_nominee->op_time,snat_nominee->nominee_type);
+ int ret = 0;
+ int is_inside = -1;
+ struct mrl_nominee snat_nominee;
+ memset(&snat_nominee,0,sizeof(snat_nominee));
+
+ struct mrl_nominee *snat_nominee_item = NULL;
+
+ sscanf(table_line,"%d\t%d\t%d\t%s\t%d\t%s\t%s",
+ &(snat_nominee.config_id), &(snat_nominee.addr_pool_id), &(snat_nominee.addr_type),
+ snat_nominee.ip_addr, &(snat_nominee.is_valid), snat_nominee.effective_range, snat_nominee.op_time);
+ snat_nominee.nominee_type = MRL_SNAT_NOMINEE_TYPE;
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","get IR_NOMINEE_IP item:"
+ "[config_id:%d,addr_pool_id:%d,addr_type:%d,ip_addr:%s,is_valid:%d,effective_range:%s,op_time:%s],nominee_type:%d",
+ snat_nominee.config_id, snat_nominee.addr_pool_id,snat_nominee.addr_type,
+ snat_nominee.ip_addr, snat_nominee.is_valid,snat_nominee.effective_range,snat_nominee.op_time,snat_nominee.nominee_type);
- struct mrl_nominee_key nominee_key;
- memset(&nominee_key,0,sizeof(struct mrl_nominee_key));
- strncpy(nominee_key.sip,(const char*)snat_nominee->ip_addr,MRL_STR_IP_LEN);
- //TODO:����ip_addr����������ѡ����������෴��̽�������
- strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.dest_ip,MRL_STR_IP_LEN);
- nominee_key.sport=mrl_instance.mrl_cfg.local_port;
- nominee_key.dport=mrl_instance.mrl_cfg.dest_port;
- switch(snat_nominee->is_valid)
- {
+ struct mrl_nominee_key nominee_key;
+ memset(&nominee_key,0,sizeof(struct mrl_nominee_key));
+ strncpy(nominee_key.sip,(const char*)snat_nominee.ip_addr,MRL_STR_IP_LEN);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ is_inside = mrl_is_inside_ip(snat_nominee.ip_addr);
+ switch(is_inside)
+ {
+ case MRL_INSIDE_LOCATION:
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.outside_detect_ip,MRL_STR_IP_LEN);
+ break;
+ case MRL_OUTSIDE_LOCATION:
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.inside_detect_ip,MRL_STR_IP_LEN);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ }
+ else
+ {
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.outside_detect_ip,MRL_STR_IP_LEN);
+ }
+ nominee_key.sport=mrl_instance.mrl_cfg.local_port;
+ nominee_key.dport=mrl_instance.mrl_cfg.detect_port;
+ switch(snat_nominee.is_valid)
+ {
case MRL_INVALID:
ret =mrl_htable_delete(mrl_instance.ht_nominee,(const unsigned char*)&nominee_key,sizeof(struct mrl_nominee_key));
if(ret == MRL_HTABLE_DEL_SUCCESS)
@@ -440,8 +476,11 @@ void snat_nominee_update_cb(int table_id,const char *table_line,void *u_para) }
}
break;
- case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key,sizeof(struct mrl_nominee_key),(const void* )snat_nominee);
+ case MRL_VALID:
+ snat_nominee_item = (struct mrl_nominee *)calloc(1, sizeof(struct mrl_nominee));
+ global_stat.malloc_memory += sizeof(struct mrl_nominee);
+ memcpy(snat_nominee_item,&snat_nominee,sizeof(struct mrl_nominee));
+ ret =mrl_htable_add(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key,sizeof(struct mrl_nominee_key),(const void* )snat_nominee_item);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.snat_nominee_num ++;
@@ -451,17 +490,22 @@ void snat_nominee_update_cb(int table_id,const char *table_line,void *u_para) {
if(ret == MRL_HTABLE_ADD_DUPLICATE)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","the snat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is duplicated in ht_nominee",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport); }
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","the snat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is duplicated in ht_nominee",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
+ free(snat_nominee_item);
+ snat_nominee_item = NULL;
+ }
else
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_nominee_update_cb","ht_nominee fail to insert the snat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu], ret is %d",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport,ret);
+ free(snat_nominee_item);
+ snat_nominee_item = NULL;
assert(0);
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","cur item is_valid is %d",snat_nominee->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_nominee_update_cb","cur item is_valid is %d",snat_nominee.is_valid);
break;
}
@@ -482,62 +526,70 @@ void snat_candidate_start_cb(int update_type,void* u_para) void snat_candidate_update_cb(int table_id, const char *table_line, void *u_para)
{
int ret = 0;
- struct mrl_snat_candidate* snat_candidate = (struct mrl_snat_candidate *)calloc(1, sizeof(struct mrl_snat_candidate));
- global_stat.malloc_memory += sizeof(struct mrl_snat_candidate);
-
+ struct mrl_snat_candidate snat_candidate;
+ memset(&snat_candidate,0,sizeof(snat_candidate));
+ struct mrl_snat_candidate* snat_candidate_item = NULL;
+
sscanf(table_line,"%d\t%d\t%d\t%s\t%d\t%d\t%s\t%s",
- &(snat_candidate->config_id), &(snat_candidate->addr_pool_id), &(snat_candidate->addr_type), snat_candidate->ip_addr,
- &(snat_candidate->location),&(snat_candidate->is_valid), snat_candidate->effective_range, snat_candidate->op_time);
+ &(snat_candidate.config_id), &(snat_candidate.addr_pool_id), &(snat_candidate.addr_type), snat_candidate.ip_addr,
+ &(snat_candidate.location),&(snat_candidate.is_valid), snat_candidate.effective_range, snat_candidate.op_time);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","get IR_CANDIDATE_IP item:"
"[config_id:%d,addr_pool_id:%d,addr_type:%d,ip_addr:%s,location:%d,is_vaild:%d,effective_range:%s,op_time:%s]",
- snat_candidate->config_id, snat_candidate->addr_pool_id,snat_candidate->addr_type,snat_candidate->ip_addr,
- snat_candidate->location,snat_candidate->is_valid,snat_candidate->effective_range, snat_candidate->op_time);
- switch(snat_candidate->is_valid)
+ snat_candidate.config_id, snat_candidate.addr_pool_id,snat_candidate.addr_type,snat_candidate.ip_addr,
+ snat_candidate.location,snat_candidate.is_valid,snat_candidate.effective_range, snat_candidate.op_time);
+ switch(snat_candidate.is_valid)
{
case MRL_INVALID:
- ret =mrl_htable_delete(mrl_instance.ht_snat_candidate,(const unsigned char*)snat_candidate->ip_addr,MRL_STR_IP_LEN);
+ ret =mrl_htable_delete(mrl_instance.ht_snat_candidate,(const unsigned char*)snat_candidate.ip_addr,MRL_STR_IP_LEN);
if(ret == MRL_HTABLE_DEL_SUCCESS)
{
global_stat.snat_candidate_num --;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","ht_snat_candidate succeed to del candidate key[ip_addr:%s]!",snat_candidate->ip_addr);
- Maat_del_back_info(snat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","ht_snat_candidate succeed to del candidate key[ip_addr:%s]!",snat_candidate.ip_addr);
+ Maat_del_back_info(snat_candidate.config_id,snat_candidate.ip_addr);
}
else
{
if(ret == MRL_HTABLE_DEL_NULL)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","the candidate ip[ip_addr:%s] is not exsit in ht_snat_candidate,can not del.",snat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","the candidate ip[ip_addr:%s] is not exsit in ht_snat_candidate,can not del.",snat_candidate.ip_addr);
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","ht_snat_candidate fail to del candidate key[ip_addr:%s]! ret is %d",snat_candidate->ip_addr,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","ht_snat_candidate fail to del candidate key[ip_addr:%s]! ret is %d",snat_candidate.ip_addr,ret);
assert(0);
}
}
break;
case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_snat_candidate,(const unsigned char* )snat_candidate->ip_addr,MRL_STR_IP_LEN,(const void*)snat_candidate);
+ snat_candidate_item= (struct mrl_snat_candidate *)calloc(1, sizeof(struct mrl_snat_candidate));
+ global_stat.malloc_memory += sizeof(struct mrl_snat_candidate);
+ memcpy(snat_candidate_item,&snat_candidate,sizeof(struct mrl_snat_candidate));
+ ret =mrl_htable_add(mrl_instance.ht_snat_candidate,(const unsigned char* )snat_candidate_item->ip_addr,MRL_STR_IP_LEN,(const void*)snat_candidate_item);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.snat_candidate_num ++;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","ht_snat_candidate succeed to add candidate key[ip_addr:%s]!",snat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","ht_snat_candidate succeed to add candidate key[ip_addr:%s]!",snat_candidate_item->ip_addr);
}
else
{
if(ret == MRL_HTABLE_ADD_DUPLICATE)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","the candidate key[ip_addr:%s] is duplicated in ht_snat_candidate.",snat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"snat_candidate_update_cb","the candidate key[ip_addr:%s] is duplicated in ht_snat_candidate.",snat_candidate_item->ip_addr);
+ free(snat_candidate_item);
+ snat_candidate_item = NULL;
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","ht_snat_candidate fail to insert the candidate key[ip_addr:%s], ret is %d",snat_candidate->ip_addr,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","ht_snat_candidate fail to insert the candidate key[ip_addr:%s], ret is %d",snat_candidate_item->ip_addr,ret);
+ free(snat_candidate_item);
+ snat_candidate_item = NULL;
assert(0);
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","cur item is_valid is %d",snat_candidate->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"snat_candidate_update_cb","cur item is_valid is %d",snat_candidate.is_valid);
break;
}
}
@@ -557,36 +609,58 @@ void dnat_policy_start_cb(int update_type,void* u_para) void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para)
{
- int ret = 0;
+ int ret = 0, is_inside = -1;
int operation = MRL_ADD_DNAT_NOMINEE;
long nominee_count = 0;
- struct mrl_nominee* dnat_nominee =NULL;
- struct mrl_dnat_policy *dnat_policy = (struct mrl_dnat_policy *)calloc(1, sizeof(struct mrl_dnat_policy));
- global_stat.malloc_memory += sizeof(struct mrl_dnat_policy);
+ struct mrl_dnat_policy dnat_policy;
+ memset(&dnat_policy,0,sizeof(dnat_policy));
+
+ struct mrl_dnat_policy *dnat_policy_item = NULL;
+ struct mrl_nominee* dnat_nominee_item =NULL;
+
sscanf(table_line,"%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%d\t%d\t%d\t%s\t%s",
- &(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);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","get IP_DNAT_POLICY item:"
+ &(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);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","get IP_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,service:%d,is_valid:%d,effective_range:%s,op_time:%s]",
- 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);
+ 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);
struct mrl_dnat_policy_key dnat_policy_key;
memset(&dnat_policy_key,0,sizeof(struct mrl_dnat_policy_key));
- strncpy(dnat_policy_key.original_ip,(const char*)dnat_policy->original_dest_ip,MRL_STR_IP_LEN);
- dnat_policy_key.original_port = atoi(dnat_policy->original_dest_port);
- dnat_policy_key.original_protocol = atoi(dnat_policy->original_protocol);
+ strncpy(dnat_policy_key.original_ip,(const char*)dnat_policy.original_dest_ip,MRL_STR_IP_LEN);
+ dnat_policy_key.original_port = atoi(dnat_policy.original_dest_port);
+ dnat_policy_key.original_protocol = atoi(dnat_policy.original_protocol);
struct mrl_nominee_key nominee_key;
memset(&nominee_key,0,sizeof(struct mrl_nominee_key));
- strncpy(nominee_key.sip,dnat_policy->original_dest_ip,MRL_STR_IP_LEN);
- strncpy(nominee_key.dip,mrl_instance.mrl_cfg.dest_ip,MRL_STR_IP_LEN);
+ strncpy(nominee_key.sip,dnat_policy.original_dest_ip,MRL_STR_IP_LEN);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ is_inside = mrl_is_inside_ip(dnat_policy.original_dest_ip);
+ switch(is_inside)
+ {
+ case MRL_INSIDE_LOCATION:
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.outside_detect_ip,MRL_STR_IP_LEN);
+ break;
+ case MRL_OUTSIDE_LOCATION:
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.inside_detect_ip,MRL_STR_IP_LEN);
+ break;
+ default:
+ assert(0);
+ break;
+ }
+ }
+ else
+ {
+ strncpy(nominee_key.dip,(const char*)mrl_instance.mrl_cfg.outside_detect_ip,MRL_STR_IP_LEN);
+ }
nominee_key.sport=mrl_instance.mrl_cfg.local_port;
- nominee_key.dport=mrl_instance.mrl_cfg.dest_port;
+ nominee_key.dport=mrl_instance.mrl_cfg.detect_port;
- switch(dnat_policy->is_valid)
+ switch(dnat_policy.is_valid)
{
case MRL_INVALID:
ret =mrl_htable_delete(mrl_instance.ht_dnat_policy,(const unsigned char*)&dnat_policy_key,sizeof(struct mrl_dnat_policy_key));
@@ -611,8 +685,8 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para) {
global_stat.dnat_nominee_num --;
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_nominee succeed to del dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu].",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
- Maat_del_back_info(dnat_policy_key.original_ip);
- Maat_del_dnat_candidate(dnat_policy_key.original_ip,dnat_policy->config_id);
+ Maat_del_back_info(dnat_policy.config_id,dnat_policy_key.original_ip);
+ Maat_del_dnat_candidate(dnat_policy_key.original_ip,dnat_policy.config_id);
}
}
else
@@ -642,7 +716,10 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para) }
break;
case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_dnat_policy,(const unsigned char* )&dnat_policy_key,sizeof(struct mrl_dnat_policy_key),(const void*)dnat_policy);
+ dnat_policy_item= (struct mrl_dnat_policy *)calloc(1, sizeof(struct mrl_dnat_policy));
+ global_stat.malloc_memory += sizeof(struct mrl_dnat_policy);
+ memcpy(dnat_policy_item,&dnat_policy,sizeof(struct mrl_dnat_policy));
+ ret =mrl_htable_add(mrl_instance.ht_dnat_policy,(const unsigned char* )&dnat_policy_key,sizeof(struct mrl_dnat_policy_key),(const void*)dnat_policy_item);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.dnat_policy_num ++;
@@ -652,14 +729,16 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para) operation = MRL_ADD_DNAT_NOMINEE;
if(MESA_htable_search_cb(mrl_instance.ht_nominee, (const unsigned char* )&nominee_key, sizeof(struct mrl_nominee_key),ht_dnat_nominee_search_cb,&operation,&nominee_count) == NULL)
{
- dnat_nominee = (struct mrl_nominee* )calloc(1,sizeof(struct mrl_nominee));
+ dnat_nominee_item = (struct mrl_nominee* )calloc(1,sizeof(struct mrl_nominee));
global_stat.malloc_memory += sizeof(struct mrl_nominee);
- mrl_create_dnat_nominee(dnat_nominee,dnat_policy);
- ret = MESA_htable_add(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key, sizeof(struct mrl_nominee_key), dnat_nominee);
+ mrl_build_dnat_nominee_item(dnat_nominee_item,&dnat_policy);
+ ret = MESA_htable_add(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key, sizeof(struct mrl_nominee_key), dnat_nominee_item);
if(ret < 0)
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_policy_update_cb","ht_nominee fail to insert dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu]!ret is %d",
nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport,ret);
+ free(dnat_nominee_item);
+ dnat_nominee_item = NULL;
}
else
{
@@ -680,16 +759,20 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para) {
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","the dnat_policy key[original_ip:%s,original_port:%hu] is duplicated in ht_dnat_policy htable.",
dnat_policy_key.original_ip,dnat_policy_key.original_port);
+ free(dnat_policy_item);
+ dnat_policy_item =NULL;
}
else
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_policy_update_cb","ht_dnat_policy fail to add dnat_policy key[original_ip:%s,original_port:%hu]! ret is %d",
dnat_policy_key.original_ip,dnat_policy_key.original_port,ret);
+ free(dnat_policy_item);
+ dnat_policy_item =NULL;
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_policy_update_cb","cur item is_valid is %d",dnat_policy->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_policy_update_cb","cur item is_valid is %d",dnat_policy.is_valid);
break;
}
@@ -710,61 +793,70 @@ void dnat_candidate_start_cb(int update_type,void* u_para) void dnat_candidate_update_cb(int table_id, const char *table_line, void *u_para)
{
int ret = 0;
- struct mrl_dnat_candidate* dnat_candidate = (struct mrl_dnat_candidate *)calloc(1, sizeof(struct mrl_dnat_candidate));
- global_stat.malloc_memory += sizeof(struct mrl_dnat_candidate);
+ struct mrl_dnat_candidate dnat_candidate;
+ memset(&dnat_candidate,0,sizeof(dnat_candidate));
+
+ struct mrl_dnat_candidate* dnat_candidate_item = NULL;
sscanf(table_line,"%d\t%s\t%d\t%d\t%d\t%s\t%s",
- &(dnat_candidate->config_id),dnat_candidate->ip_addr,&(dnat_candidate->addr_type),
- &(dnat_candidate->location),&(dnat_candidate->is_valid), dnat_candidate->effective_range, dnat_candidate->op_time);
+ &(dnat_candidate.config_id),dnat_candidate.ip_addr,&(dnat_candidate.addr_type),
+ &(dnat_candidate.location),&(dnat_candidate.is_valid), dnat_candidate.effective_range, dnat_candidate.op_time);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","get IR_DNAT_CANDIDATE_IP item:"
"[config_id:%d,ip_addr:%s,addr_type:%d,location:%d,is_vaild:%d,effective_range:%s,op_time:%s]",
- dnat_candidate->config_id, dnat_candidate->ip_addr,dnat_candidate->addr_type,dnat_candidate->location,
- dnat_candidate->is_valid,dnat_candidate->effective_range, dnat_candidate->op_time);
- switch(dnat_candidate->is_valid)
+ dnat_candidate.config_id, dnat_candidate.ip_addr,dnat_candidate.addr_type,dnat_candidate.location,
+ dnat_candidate.is_valid,dnat_candidate.effective_range, dnat_candidate.op_time);
+ switch(dnat_candidate.is_valid)
{
case MRL_INVALID:
- ret =mrl_htable_delete(mrl_instance.ht_dnat_candidate,(const unsigned char*)dnat_candidate->ip_addr,MRL_STR_IP_LEN);
+ ret =mrl_htable_delete(mrl_instance.ht_dnat_candidate,(const unsigned char*)dnat_candidate.ip_addr,MRL_STR_IP_LEN);
if(ret == MRL_HTABLE_DEL_SUCCESS)
{
global_stat.dnat_candidate_num --;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","ht_dnat_candidate succeed to del candidate key[ip_addr:%s]!",dnat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","ht_dnat_candidate succeed to del candidate key[ip_addr:%s]!",dnat_candidate.ip_addr);
}
else
{
if(ret == MRL_HTABLE_DEL_NULL)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","the candidate ip[ip_addr:%s] is not exsit in ht_dnat_candidate,can not del.",dnat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","the candidate ip[ip_addr:%s] is not exsit in ht_dnat_candidate,can not del.",dnat_candidate.ip_addr);
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","ht_dnat_candidate fail to del candidate key[ip_addr:%s]! ret is %d",dnat_candidate->ip_addr,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","ht_dnat_candidate fail to del candidate key[ip_addr:%s]! ret is %d",dnat_candidate.ip_addr,ret);
assert(0);
}
}
break;
case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_dnat_candidate,(const unsigned char* )dnat_candidate->ip_addr,MRL_STR_IP_LEN,(const void*)dnat_candidate);
+ dnat_candidate_item = (struct mrl_dnat_candidate *)calloc(1, sizeof(struct mrl_dnat_candidate));
+ global_stat.malloc_memory += sizeof(struct mrl_dnat_candidate);
+ memcpy(dnat_candidate_item,&dnat_candidate,sizeof(struct mrl_dnat_candidate));
+ ret =mrl_htable_add(mrl_instance.ht_dnat_candidate,(const unsigned char* )dnat_candidate_item->ip_addr,MRL_STR_IP_LEN,(const void*)dnat_candidate_item);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.dnat_candidate_num ++;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","ht_dnat_candidate succeed to add candidate key[ip_addr:%s]!",dnat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","ht_dnat_candidate succeed to add candidate key[ip_addr:%s]!",dnat_candidate_item->ip_addr);
}
else
{
if(ret == MRL_HTABLE_ADD_DUPLICATE)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","the candidate key[ip_addr:%s] is duplicated in ht_dnat_candidate.",dnat_candidate->ip_addr);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_update_cb","the candidate key[ip_addr:%s] is duplicated in ht_dnat_candidate.",dnat_candidate_item->ip_addr);
+ free(dnat_candidate_item);
+ dnat_candidate_item = NULL;
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","ht_dnat_candidate fail to insert the candidate key[ip_addr:%s], ret is %d",dnat_candidate->ip_addr,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","ht_dnat_candidate fail to insert the candidate key[ip_addr:%s], ret is %d",dnat_candidate_item->ip_addr,ret);
+ free(dnat_candidate_item);
+ dnat_candidate_item = NULL;
assert(0);
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","cur item is_valid is %d",dnat_candidate->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_candidate_update_cb","cur item is_valid is %d",dnat_candidate_item->is_valid);
break;
}
}
@@ -783,61 +875,70 @@ void vxlan_info_start_cb(int update_type,void* u_para) void vxlan_info_update_cb(int table_id, const char *table_line, void *u_para)
{
int ret = 0;
- struct mrl_vxlan_info* vxlan_info = (struct mrl_vxlan_info* )calloc(1, sizeof(struct mrl_vxlan_info));
- global_stat.malloc_memory += sizeof(struct mrl_vxlan_info);
+ struct mrl_vxlan_info vxlan_info;
+ memset(&vxlan_info,0,sizeof(vxlan_info));
+ struct mrl_vxlan_info* vxlan_info_item =NULL;
+
sscanf(table_line,"%d\t%s\t%d\t%lu\t%d\t%s\t%s",
- &(vxlan_info->config_id), vxlan_info->back_ip, &(vxlan_info->back_type), &(vxlan_info->link_identity),
- &(vxlan_info->is_valid), vxlan_info->effective_range, vxlan_info->op_time);
+ &(vxlan_info.config_id), vxlan_info.back_ip, &(vxlan_info.back_type), &(vxlan_info.link_identity),
+ &(vxlan_info.is_valid), vxlan_info.effective_range, vxlan_info.op_time);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","get IR_VXLAN_INFO item:"
"[config_id:%d,back_ip:%s,back_type:%d,link_identity:%lu,is_vaild:%d,effective_range:%s,op_time:%s]",
- vxlan_info->config_id, vxlan_info->back_ip, vxlan_info->back_type,vxlan_info->link_identity,
- vxlan_info->is_valid, vxlan_info->effective_range, vxlan_info->op_time);
- switch(vxlan_info->is_valid)
+ vxlan_info.config_id, vxlan_info.back_ip, vxlan_info.back_type,vxlan_info.link_identity,
+ vxlan_info.is_valid, vxlan_info.effective_range, vxlan_info.op_time);
+ switch(vxlan_info.is_valid)
{
case MRL_INVALID:
- ret =mrl_htable_delete(mrl_instance.ht_vxlan_info,(const unsigned char*)vxlan_info->back_ip,MRL_STR_IP_LEN);
+ ret =mrl_htable_delete(mrl_instance.ht_vxlan_info,(const unsigned char*)vxlan_info.back_ip,MRL_STR_IP_LEN);
if(ret == MRL_HTABLE_DEL_SUCCESS)
{
global_stat.vxlan_info_num --;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","ht_vxlan_info succeed to del vxlan_info key[ip_addr:%s]!",vxlan_info->back_ip);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","ht_vxlan_info succeed to del vxlan_info key[ip_addr:%s]!",vxlan_info.back_ip);
}
else
{
if(ret == MRL_HTABLE_DEL_NULL)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","the vxlan_info ip[ip_addr:%s] is not exsit in ht_vxlan_info,can not del.",vxlan_info->back_ip);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","the vxlan_info ip[ip_addr:%s] is not exsit in ht_vxlan_info,can not del.",vxlan_info.back_ip);
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","ht_vxlan_info fail to del vxlan_info key[ip_addr:%s]! ret is %d",vxlan_info->back_ip,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","ht_vxlan_info fail to del vxlan_info key[ip_addr:%s]! ret is %d",vxlan_info.back_ip,ret);
assert(0);
}
}
break;
case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_vxlan_info,(const unsigned char* )vxlan_info->back_ip,MRL_STR_IP_LEN,(const void*)vxlan_info);
+ vxlan_info_item= (struct mrl_vxlan_info* )calloc(1, sizeof(struct mrl_vxlan_info));
+ global_stat.malloc_memory += sizeof(struct mrl_vxlan_info);
+ memcpy(vxlan_info_item,&vxlan_info,sizeof(struct mrl_vxlan_info));
+ ret =mrl_htable_add(mrl_instance.ht_vxlan_info,(const unsigned char* )vxlan_info_item->back_ip,MRL_STR_IP_LEN,(const void*)vxlan_info_item);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.vxlan_info_num ++;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","ht_vxlan_info succeed to add vxlan_info key[ip_addr:%s]!",vxlan_info->back_ip);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","ht_vxlan_info succeed to add vxlan_info key[ip_addr:%s]!",vxlan_info_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 vxlan_info key[ip_addr:%s] is duplicated in ht_vxlan_info.",vxlan_info->back_ip);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_update_cb","the vxlan_info key[ip_addr:%s] is duplicated in ht_vxlan_info.",vxlan_info_item->back_ip);
+ free(vxlan_info_item);
+ vxlan_info_item= NULL;
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","ht_vxlan_info fail to insert the vxlan_info key[ip_addr:%s], ret is %d",vxlan_info->back_ip,ret);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","ht_vxlan_info fail to insert the vxlan_info key[ip_addr:%s], ret is %d",vxlan_info_item->back_ip,ret);
+ free(vxlan_info_item);
+ vxlan_info_item= NULL;
assert(0);
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","cur item is_valid is %d",vxlan_info->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"vxlan_info_update_cb","cur item is_valid is %d",vxlan_info.is_valid);
break;
}
@@ -859,61 +960,69 @@ void mrl_ip_info_start_cb(int update_type,void* u_para) void mrl_ip_info_update_cb(int table_id, const char *table_line, void *u_para)
{
int ret = 0;
- struct mrl_mrl_ip* mrl_ip = (struct mrl_mrl_ip* )calloc(1, sizeof(struct mrl_mrl_ip));
- global_stat.malloc_memory += sizeof(struct mrl_mrl_ip);
+ struct mrl_mrl_ip mrl_ip;
+ memset(&mrl_ip,0,sizeof(mrl_ip));
+ struct mrl_mrl_ip* mrl_ip_item = NULL;
sscanf(table_line,"%d\t%s\t%d\t%s\t%d\t%s\t%s",
- &(mrl_ip->config_id), mrl_ip->back_ip, &(mrl_ip->back_type),mrl_ip->mrl_ip,
- &(mrl_ip->is_valid), mrl_ip->effective_range, mrl_ip->op_time);
+ &(mrl_ip.config_id), mrl_ip.back_ip, &(mrl_ip.back_type),mrl_ip.mrl_ip,
+ &(mrl_ip.is_valid), mrl_ip.effective_range, mrl_ip.op_time);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","get IR_MRL_IP_INFO item:"
"[config_id:%d,back_ip:%s,back_type:%d,mrl_ip:%s,is_valid:%d,effective_range:%s,op_time:%s]",
- mrl_ip->config_id, mrl_ip->back_ip, mrl_ip->back_type, mrl_ip->mrl_ip,
- mrl_ip->is_valid,mrl_ip->effective_range,mrl_ip->op_time);
- switch(mrl_ip->is_valid)
+ mrl_ip.config_id, mrl_ip.back_ip, mrl_ip.back_type, mrl_ip.mrl_ip,
+ mrl_ip.is_valid,mrl_ip.effective_range,mrl_ip.op_time);
+ switch(mrl_ip.is_valid)
{
case MRL_INVALID:
- ret =mrl_htable_delete(mrl_instance.ht_mrl_ip_info,(const unsigned char*)mrl_ip->back_ip,MRL_STR_IP_LEN);
+ ret =mrl_htable_delete(mrl_instance.ht_mrl_ip_info,(const unsigned char*)mrl_ip.back_ip,MRL_STR_IP_LEN);
if(ret == MRL_HTABLE_DEL_SUCCESS)
{
global_stat.mrl_ip_num --;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","ht_mrl_ip_info succeed to del mrl_ip_info key[ip_addr:%s]!",mrl_ip->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 del mrl_ip_info key[ip_addr:%s]!",mrl_ip.back_ip);
}
else
{
if(ret == MRL_HTABLE_DEL_NULL)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","the mrl_ip_info ip[ip_addr:%s] is not exsit in ht_mrl_ip_info,can not del.",mrl_ip->back_ip);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_ip_info_update_cb","the mrl_ip_info ip[ip_addr:%s] is not exsit in ht_mrl_ip_info,can not del.",mrl_ip.back_ip);
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_ip_info_update_cb","ht_mrl_ip_info fail to del mrl_ip_info key[ip_addr:%s]! ret is %d",mrl_ip->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 del mrl_ip_info key[ip_addr:%s]! ret is %d",mrl_ip.back_ip,ret);
assert(0);
}
}
break;
case MRL_VALID:
- ret =mrl_htable_add(mrl_instance.ht_mrl_ip_info,(const unsigned char* )mrl_ip->back_ip,MRL_STR_IP_LEN,(const void*)mrl_ip);
+ mrl_ip_item =(struct mrl_mrl_ip* )calloc(1, sizeof(struct mrl_mrl_ip));
+ global_stat.malloc_memory += sizeof(struct mrl_mrl_ip);
+ memcpy(mrl_ip_item,&mrl_ip,sizeof(struct mrl_mrl_ip));
+ ret =mrl_htable_add(mrl_instance.ht_mrl_ip_info,(const unsigned char* )mrl_ip_item->back_ip,MRL_STR_IP_LEN,(const void*)mrl_ip_item);
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->back_ip);
+ 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);
}
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->back_ip);
+ 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);
+ 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->back_ip,ret);
+ 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);
+ free(mrl_ip_item);
+ mrl_ip_item = NULL;
assert(0);
}
}
break;
default:
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_ip_info_update_cb","cur item is_valid is %d",mrl_ip->is_valid);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_ip_info_update_cb","cur item is_valid is %d",mrl_ip.is_valid);
break;
}
@@ -1116,7 +1225,7 @@ bool mrl_identify_detect_pkt(struct streaminfo *mystream, const char * udp_pkt, strncpy(nominee_key.dip,(const char*)tuple->sip,MRL_STR_IP_LEN);
nominee_key.sport= tuple->dport;
nominee_key.dport= tuple->sport;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_identify_detect_pkt","cur detect pkt stream info:[sip:%s,sport:%hu,dip:%s,dport:%hu,protocol:%hu]",
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_identify_detect_pkt","cur identify pkt info:[sip:%s,sport:%hu,dip:%s,dport:%hu,protocol:%hu]",
tuple->sip,tuple->sport,tuple->dip,tuple->dport,tuple->protocol);
if(MESA_htable_search_cb(mrl_instance.ht_nominee, (const unsigned char *)&nominee_key, sizeof(nominee_key),ht_nominee_search_cb,(void *)&nominee,&ret) != NULL)
{
@@ -1141,18 +1250,6 @@ bool mrl_identify_detect_pkt(struct streaminfo *mystream, const char * udp_pkt, }
else
{
- strncpy(nominee_key.sip,(const char*)tuple->sip,MRL_STR_IP_LEN);
- strncpy(nominee_key.dip,(const char*)tuple->dip,MRL_STR_IP_LEN);
- nominee_key.sport= tuple->sport;
- nominee_key.dport= tuple->dport;
- if(MESA_htable_search_cb(mrl_instance.ht_nominee, (const unsigned char *)&nominee_key, sizeof(nominee_key),NULL,NULL,NULL) != NULL)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_identify_detect_pkt","the type of nominee key [sip:%s,sport:%hu,dip:%s,dport:%hu] is detect origin pkt!",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
- return true;
- }
- else
- {
- return false;
- }
+ return false;
}
}
diff --git a/src/mrl_utils.cpp b/src/mrl_utils.cpp index a2e2668..7c9283f 100644 --- a/src/mrl_utils.cpp +++ b/src/mrl_utils.cpp @@ -247,7 +247,7 @@ void mrl_mmdb_init(const char *path) }
}
-int mrl_search_ip_country(MMDB_s mmdb, const char *ip_address, const char *mycountry)
+int mrl_search_ip_country(MMDB_s mmdb, const char *ip_address, const unsigned int level, const char *name)
{
int gai_error, mmdb_error;
MMDB_lookup_result_s result = MMDB_lookup_string(&mmdb, ip_address, &gai_error, &mmdb_error);
@@ -263,9 +263,21 @@ int mrl_search_ip_country(MMDB_s mmdb, const char *ip_address, const char *mycou assert(0);
}
MMDB_entry_data_s entry_data;
+ int status = 0;
if (result.found_entry)
- {
- int status = MMDB_get_value(&result.entry, &entry_data, "COUNTRY", NULL);
+ {
+ switch (level)
+ {
+ case MRL_COUNTRY_LEVEL:
+ status = MMDB_get_value(&result.entry, &entry_data, "COUNTRY", NULL);
+ break;
+ case MRL_PROVINCE_LEVEL:
+ status = MMDB_get_value(&result.entry, &entry_data, "PROVINCE", NULL);
+ break;
+ default:
+ assert(0);
+ break;
+ }
if (MMDB_SUCCESS != status)
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_mmdb_search","Got an error looking up the entry data - %s!",MMDB_strerror(status));
@@ -273,7 +285,7 @@ int mrl_search_ip_country(MMDB_s mmdb, const char *ip_address, const char *mycou }
if (entry_data.has_data)
{
- if(memcmp(mycountry, entry_data.utf8_string, entry_data.data_size) == 0)
+ if(memcmp(name, entry_data.utf8_string, entry_data.data_size) == 0)
{
return 0;
}
@@ -289,7 +301,7 @@ int mrl_search_ip_country(MMDB_s mmdb, const char *ip_address, const char *mycou int mrl_is_inside_ip(const char *ip_addr)
{
int location = 0;
- location = mrl_search_ip_country(mrl_instance.mrl_mmdb, ip_addr, mrl_instance.mrl_cfg.ip_location);
+ location = mrl_search_ip_country(mrl_instance.mrl_mmdb, ip_addr, mrl_instance.mrl_cfg.ip_location_level,mrl_instance.mrl_cfg.ip_location_name);
if(location < 0)
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_is_inside_ip","cur ip addr %s not exist in mmdb",ip_addr);
|
