summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlijie <[email protected]>2019-01-21 20:46:44 +0800
committerlijie <[email protected]>2019-01-21 20:46:44 +0800
commita558cf074391f1f4b3581c9a4b5d6c6241d21c28 (patch)
tree81e5921620171d742214cd38a238cbf7e7e1c526
parenta5495b25b06223bf1b78eb7886c61042416a6c5c (diff)
修改无法支持dnat_policy中IP相同端口不同的策略问题v2.0.1
-rw-r--r--bin/conf/mrl.conf2
-rw-r--r--doc/MRL部署及常见日志说明-简版.docxbin0 -> 20871 bytes
-rw-r--r--include/mrl_io.h121
-rw-r--r--include/mrl_redis.h3
-rw-r--r--include/mrl_utils.h6
-rw-r--r--src/cJSON.obin74288 -> 0 bytes
-rw-r--r--src/mrl.sobin203600 -> 0 bytes
-rw-r--r--src/mrl_io.cpp22
-rw-r--r--src/mrl_io.obin64800 -> 0 bytes
-rw-r--r--src/mrl_main.cpp798
-rw-r--r--src/mrl_main.obin51592 -> 0 bytes
-rw-r--r--src/mrl_redis.cpp194
-rw-r--r--src/mrl_redis.obin90928 -> 0 bytes
-rw-r--r--src/mrl_stat.cpp162
-rw-r--r--src/mrl_stat.obin23384 -> 0 bytes
-rw-r--r--src/mrl_utils.cpp3
-rw-r--r--src/mrl_utils.obin28440 -> 0 bytes
17 files changed, 695 insertions, 616 deletions
diff --git a/bin/conf/mrl.conf b/bin/conf/mrl.conf
index f2e1f62..e89b16b 100644
--- a/bin/conf/mrl.conf
+++ b/bin/conf/mrl.conf
@@ -2,7 +2,7 @@
log_level=10
log_path=./log/mrl.log
[DETECT_INFO]
-dest_ip=123.57.35.217
+dest_ip=192.168.10.180
dest_port=20181
local_port=20182
[SOCK_INFO]
diff --git a/doc/MRL部署及常见日志说明-简版.docx b/doc/MRL部署及常见日志说明-简版.docx
new file mode 100644
index 0000000..03414b3
--- /dev/null
+++ b/doc/MRL部署及常见日志说明-简版.docx
Binary files differ
diff --git a/include/mrl_io.h b/include/mrl_io.h
index 69946ee..2dc076f 100644
--- a/include/mrl_io.h
+++ b/include/mrl_io.h
@@ -1,60 +1,61 @@
-#ifndef __MRL_PACKET_H_
-#define __MRL_PACKET_H_
-
-#include "stream.h"
-#include "MESA_htable.h"
-#include "mrl_utils.h"
-
-struct mrl_nominee_key{
-char sip[MRL_STR_IP_LEN];
-char dip[MRL_STR_IP_LEN];
-uint16_t sport;//host order
-uint16_t dport;//host order
-};
-
-struct mrl_dnat_policy_key{
-char original_ip[MRL_STR_IP_LEN];
-uint16_t original_port;
-};
-
-struct user_data
-{
- char detect_ip[MRL_STR_IP_LEN];
- int nominee_type;
-};
-
-MESA_htable_handle mrl_htable_init(void * fn_data_free_cb);
-
-void ht_nominee_free_cb(void * data);
-void ht_snat_candidate_free_cb(void * data);
-
-void ht_dnat_candidate_free_cb(void * data);
-
-void ht_dnat_policy_free_cb(void * data);
-void ht_vxlan_info_free_cb(void * data);
-void ht_mrl_ip_info_free_cb(void * data);
-void ht_link_identity_free_cb(void * data);
-long ht_nominee_search_cb(void *data, const uchar *key, uint size, void *user_arg);
-
-//long ht_dnat_policy_search_cb(void *data, const uchar *key, uint size, void *user_arg);
-
-
-int mrl_htable_add(MESA_htable_handle htable,const unsigned char* key,unsigned int key_len,const void* value);
-int mrl_htable_delete(MESA_htable_handle htable,const unsigned char* key,unsigned int key_len);
-
-void mrl_socket_init();
-void mrl_socket_close();
-
-bool mrl_snat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple);
-
-bool mrl_dnat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple);
-
-void mrl_send_to_gdev(int thread_seq, struct mrl_vxlan_info * vxlan_info, const char *payload, size_t payload_len);
-int mrl_send_to_mgw(void *raw_pkt, int thread_seq);
-void *mrl_recv_from_mgw(void *arg);
-
-void *mrl_detect_action(void *arg);
-
-#endif
-
-
+#ifndef __MRL_PACKET_H_
+#define __MRL_PACKET_H_
+
+#include "stream.h"
+#include "MESA_htable.h"
+#include "mrl_utils.h"
+
+struct mrl_nominee_key{
+char sip[MRL_STR_IP_LEN];
+char dip[MRL_STR_IP_LEN];
+uint16_t sport;//host order
+uint16_t dport;//host order
+};
+
+struct mrl_dnat_policy_key{
+ char original_ip[MRL_STR_IP_LEN];
+ uint16_t original_port;
+ int original_protocol;
+};
+
+struct user_data
+{
+ char detect_ip[MRL_STR_IP_LEN];
+ int nominee_type;
+};
+
+MESA_htable_handle mrl_htable_init(void * fn_data_free_cb);
+
+void ht_nominee_free_cb(void * data);
+void ht_snat_candidate_free_cb(void * data);
+
+void ht_dnat_candidate_free_cb(void * data);
+
+void ht_dnat_policy_free_cb(void * data);
+void ht_vxlan_info_free_cb(void * data);
+void ht_mrl_ip_info_free_cb(void * data);
+void ht_link_identity_free_cb(void * data);
+long ht_nominee_search_cb(void *data, const uchar *key, uint size, void *user_arg);
+
+//long ht_dnat_policy_search_cb(void *data, const uchar *key, uint size, void *user_arg);
+
+
+int mrl_htable_add(MESA_htable_handle htable,const unsigned char* key,unsigned int key_len,const void* value);
+int mrl_htable_delete(MESA_htable_handle htable,const unsigned char* key,unsigned int key_len);
+
+void mrl_socket_init();
+void mrl_socket_close();
+
+bool mrl_snat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple);
+
+bool mrl_dnat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple);
+
+void mrl_send_to_gdev(int thread_seq, struct mrl_vxlan_info * vxlan_info, const char *payload, size_t payload_len);
+int mrl_send_to_mgw(void *raw_pkt, int thread_seq);
+void *mrl_recv_from_mgw(void *arg);
+
+void *mrl_detect_action(void *arg);
+
+#endif
+
+
diff --git a/include/mrl_redis.h b/include/mrl_redis.h
index 360eaf5..3a00432 100644
--- a/include/mrl_redis.h
+++ b/include/mrl_redis.h
@@ -13,6 +13,7 @@ struct mrl_nominee{
char effective_range[MRL_STR_EFFEC_RANGE_LEN];
char op_time[MRL_DATE_LEN];
int nominee_type;//0--snat_nominee;1--dnat_nominee
+ int nominee_count;//��ǰ��ѡIP��DNAT_POLICY���ж�Ӧ������Ŀ��ֻ�е�ֵΪ1ʱ����DNAT_POLICYִ��ɾ������ʱ�ŻὫ��ӹ�ϣ��ht_nominee��ɾ��
};
struct mrl_snat_candidate{
@@ -43,7 +44,7 @@ struct mrl_dnat_policy{
char op_time[MRL_DATE_LEN];
};
-
+/*mrl�Ƿֲ�ʽ����Ϊ�˱�֤���������dnat_candidate��ͬ������Ҫһ��dnat_candidate��*/
struct mrl_dnat_candidate{
int config_id;
char ip_addr[MRL_STR_IP_LEN];
diff --git a/include/mrl_utils.h b/include/mrl_utils.h
index affc144..c08e887 100644
--- a/include/mrl_utils.h
+++ b/include/mrl_utils.h
@@ -49,6 +49,12 @@
#define MRL_DEL_AFTER 1800
#define MRL_DEL_NOW 0
+#define MRL_INVALID 0
+#define MRL_VALID 1
+
+#define MRL_ADD_DNAT_NOMINEE 0
+#define MRL_DEL_DNAT_NOMINEE 1
+
#define RLOG_LV_DEBUG 10
#define RLOG_LV_INFO 20
#define RLOG_LV_FATAL 30
diff --git a/src/cJSON.o b/src/cJSON.o
deleted file mode 100644
index 3c13532..0000000
--- a/src/cJSON.o
+++ /dev/null
Binary files differ
diff --git a/src/mrl.so b/src/mrl.so
deleted file mode 100644
index 1d70301..0000000
--- a/src/mrl.so
+++ /dev/null
Binary files differ
diff --git a/src/mrl_io.cpp b/src/mrl_io.cpp
index 74842ed..5009f3a 100644
--- a/src/mrl_io.cpp
+++ b/src/mrl_io.cpp
@@ -227,7 +227,7 @@ size_t mrl_build_udp_payload(char *payload,uint64_t link_identity, int nominee_t
char content[MRL_MAX_PAYLOAD_LEN];
memset(content,0,MRL_MAX_PAYLOAD_LEN);
snprintf(content,MRL_MAX_PAYLOAD_LEN,"nominee_type:%d,link_identity:%lu",nominee_type, link_identity);
- size_t payload_len = strlen(content) +1;
+ size_t payload_len = strlen(content)+1;
strncpy(payload,content,payload_len);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_build_udp_payload",
"cur detect udp payload is %s",content);
@@ -331,7 +331,7 @@ void ht_link_identity_iterate_cb(const uchar* key, uint size, void* data, void*
const uint64_t link_identity = *identity_value;
struct user_data *mydata = (struct user_data* )user;
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);
+ 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);
ip_len = mrl_build_ip_hdr(ip_pkt,sip,dip,udp_len);
@@ -369,20 +369,22 @@ long ht_dnat_policy_search_cb(void *data, const uchar *key, uint size, void *use
long ht_nominee_search_cb(void *data, const uchar *key, uint size, void *user_arg)
{
struct mrl_nominee* nominee = (struct mrl_nominee* )data;
+ struct mrl_nominee_key* nominee_key = (struct mrl_nominee_key*)key;
struct mrl_nominee *user_nominee = (struct mrl_nominee*) user_arg;
if(nominee != NULL)//�û��������ö˿ڣ�
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_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]",
+ "[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]",
nominee->config_id, nominee->addr_pool_id,nominee->addr_type,
- nominee->ip_addr, nominee->is_valid,nominee->effective_range,nominee->op_time);
+ nominee->ip_addr, nominee->is_valid,nominee->effective_range,nominee->op_time,nominee->nominee_count);
memcpy(user_nominee,nominee,sizeof(struct mrl_nominee));
return 1;
}
else
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_nominee_search_cb","cur ht_nominee is NULL!");
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_nominee_search_cb","cur nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is NULL!",
+ nominee_key->sip,nominee_key->sport,nominee_key->dip,nominee_key->dport);
return 0;
}
@@ -393,7 +395,14 @@ bool mrl_dnat_key_search(struct streaminfo *mystream, struct mrl_dnat_policy_key
{
if(MESA_htable_search_cb(mrl_instance.ht_dnat_policy, (const unsigned char *)dnat_policy_key, sizeof(struct mrl_dnat_policy_key),NULL,NULL,NULL) != NULL)
{
- return true;
+ if(MESA_htable_search_cb(mrl_instance.ht_dnat_candidate, (const unsigned char *)dnat_policy_key->original_ip, sizeof(dnat_policy_key->original_ip),NULL,NULL,NULL) != NULL)
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
}
else
{
@@ -572,6 +581,7 @@ bool mrl_dnat_pkt_identify(struct streaminfo *mystream, struct mrl_tuple *tuple)
memset(&dnat_policy_key,0,sizeof(struct mrl_dnat_policy_key));
strncpy(dnat_policy_key.original_ip,(const char*)tuple->dip,MRL_STR_IP_LEN);
+ dnat_policy_key.original_protocol = tuple->protocol;
dnat_policy_key.original_port = tuple->dport;
if(mrl_dnat_key_search(mystream,&dnat_policy_key))
diff --git a/src/mrl_io.o b/src/mrl_io.o
deleted file mode 100644
index d57ec60..0000000
--- a/src/mrl_io.o
+++ /dev/null
Binary files differ
diff --git a/src/mrl_main.cpp b/src/mrl_main.cpp
index 5c16bfc..6440270 100644
--- a/src/mrl_main.cpp
+++ b/src/mrl_main.cpp
@@ -1,399 +1,399 @@
-#include <stdio.h>
-#include <unistd.h>
-#include <pthread.h>
-#include <string.h>
-#include <assert.h>
-
-#include "mrl_io.h"
-#include "mrl_main.h"
-#include "mrl_redis.h"
-#include "mrl_stat.h"
-
-struct mrl_global_instance mrl_instance;
-extern struct global_stat_t global_stat;
-/*
-extern bool Maat_del_line(Maat_feather_t feather, int rule_id, const char* table_name);
-void test_Maat_del_nominee_line()
-{
- int rule_id =1;
- Maat_del_line(mrl_instance.mrl_feather, rule_id, IR_NOMINEE_IP_TABLE_NAME);
-}
-
-void test_Maat_set_nominee_line()
-{
- const char ip_addr[MRL_STR_IP_LEN]="192.168.11.60";
- struct mrl_nominee_item nominee_item;
- memset(&nominee_item, 0, sizeof(struct mrl_nominee_item));
- nominee_item.config_id = 1;
- nominee_item.addr_pool_id =1;
- nominee_item.addr_type = 4;
- memcpy(nominee_item.ip_addr,ip_addr,MRL_STR_IP_LEN);
- nominee_item.is_valid = 1;
- memcpy(nominee_item.effective_range,"{}",strlen("{}"));
- memcpy(nominee_item.op_time,"20181212",strlen("20181212"));
- struct Maat_line_t line_rule;
- char table_line[512];
- int ret=0;
- memset(&line_rule,0,sizeof(line_rule));
- memset(&table_line,0,sizeof(table_line));
- line_rule.label_id=0;
- line_rule.rule_id=nominee_item.config_id;
- line_rule.table_name=IR_NOMINEE_IP_TABLE_NAME;
- snprintf(table_line,sizeof(table_line),"%d\t%d\t%d\t%s\t%d\t%s\t%s",
- nominee_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
- nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time);
- line_rule.table_line=table_line;
- line_rule.expire_after=0;
- ret=Maat_cmd_set_line(mrl_instance.mrl_feather, (const struct Maat_line_t*)&line_rule, MAAT_OP_ADD);
- if(ret < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"test_Maat_set_nominee_line","Maat fail to set the 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], ret is %d",
- nominee_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
- nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time, ret);
- }
- else
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"test_Maat_set_nominee_line","Maat succeed to set the 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_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
- nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time);
- }
- return;
-}
-*/
-
-
-void mrl_cfg_init(const char *profile)
-{
- 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");
-
- mrl_instance.mrl_log_handle = MESA_create_runtime_log_handle(mrl_instance.mrl_cfg.mrl_log_path, mrl_instance.mrl_cfg.mrl_log_level);
- if(mrl_instance.mrl_log_handle == NULL)
- {
- assert(0);
- }
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load log info is:"
- "[log_path:%s,log_level:%d]",mrl_instance.mrl_cfg.mrl_log_path,mrl_instance.mrl_cfg.mrl_log_level);
-
-
- /********** 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);
- 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);
- 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);
-
- /********** 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);
- assert(temp_port > 0 && temp_port <= 65535);
- mrl_instance.mrl_cfg.mgw_port = temp_port;
-
- char mrl_netcard[MRL_STR_NETCARD_LEN];
- memset(mrl_netcard,0,MRL_STR_NETCARD_LEN);
- MESA_load_profile_string_def(profile, "SOCK_INFO", "mrl_netcard", mrl_netcard, MRL_STR_NETCARD_LEN, "eth0");
- uint32_t temp_mrl_ip = mrl_get_ip_by_eth_name(mrl_netcard);
- if(temp_mrl_ip < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_cfg_init","get ip from eth name error,eth name is %s",mrl_netcard);
- 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);
- assert(temp_port > 0 && temp_port <= 65535);
- mrl_instance.mrl_cfg.mrl_port = temp_port;
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load sock info is:"
- "[mgw_ip:%s,mgw_port:%hu,mrl_ip:%s,mrl_port:%hu]",
- mrl_instance.mrl_cfg.mgw_ip,mrl_instance.mrl_cfg.mgw_port,
- mrl_instance.mrl_cfg.mrl_ip,mrl_instance.mrl_cfg.mrl_port);
-
-
- /********** load maat info **********/
- MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_table_path", mrl_instance.mrl_cfg.Maat_table_path, MRL_MAX_PATH, "./conf/table_info.conf");
- MESA_load_profile_uint_def(profile, "MAAT_INFO", "Maat_max_threads", &(mrl_instance.mrl_cfg.Maat_max_threads), 1);
- 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);
- 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);
- 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);
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load maat info is:"
- "[Maat_table_path:%s,Maat_max_threads:%d,Maat_stat_path:%s\n"
- "static_redis_ip:%s,static_redis_port:%hu,static_redis_index:%d\n"
- "dynamic_redis_ip:%s,dynamic_redis_port:%hu,dynamic_redis_index:%d\n",
- mrl_instance.mrl_cfg.Maat_table_path,mrl_instance.mrl_cfg.Maat_max_threads,mrl_instance.mrl_cfg.Maat_stat_path,
- mrl_instance.mrl_cfg.static_redis_ip,mrl_instance.mrl_cfg.static_redis_port,mrl_instance.mrl_cfg.static_redis_index,
- mrl_instance.mrl_cfg.dynamic_redis_ip,mrl_instance.mrl_cfg.dynamic_redis_port,mrl_instance.mrl_cfg.dynamic_redis_index);
-
-
- /********** load htable info *********/
- MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_slot_size", &(mrl_instance.mrl_cfg.ht_slot_size), 1048576);
- MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_max_element_num", &(mrl_instance.mrl_cfg.ht_max_element_num), 0);
- MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_mutex_num", &(mrl_instance.mrl_cfg.ht_mutex_num), 1);
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load htable info is:"
- "[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 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");
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load link_identity_path info is:"
- "[link_identity_path:%s]",mrl_instance.mrl_cfg.link_identity_path);
-
-}
-
-extern "C" int mrl_init(void)
-{
- int ret = 0;
- mrl_instance.stop_flag = 0;
-
- mrl_stat_init();
-
- mrl_cfg_init("./mrl_conf/mrl.conf");
-
- mrl_socket_init();
-
- mrl_mmdb_init("./mrl_conf/all_ip_only_coun_v4.mmdb");
-
-
- mrl_instance.ht_link_identity = mrl_htable_init((void *)ht_link_identity_free_cb);
- mrl_instance.ht_nominee = mrl_htable_init((void *)ht_nominee_free_cb);
-
- mrl_instance.ht_snat_candidate = mrl_htable_init((void *)ht_snat_candidate_free_cb);
- mrl_instance.ht_dnat_policy = mrl_htable_init((void *)ht_dnat_policy_free_cb);
- mrl_instance.ht_dnat_candidate = mrl_htable_init((void *)ht_dnat_candidate_free_cb);
-
- mrl_instance.ht_vxlan_info = mrl_htable_init((void *)ht_vxlan_info_free_cb);
- mrl_instance.ht_mrl_ip_info= mrl_htable_init((void *)ht_mrl_ip_info_free_cb);
-
- //���������߳̽��ղ�����mwg���͵����ݰ�
- pthread_t recv_pid, detect_pid, stat_pid;
- ret = pthread_create(&recv_pid,NULL,mrl_recv_from_mgw,NULL);
- if( ret < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","recv pthread create error,error is %d",ret);
- assert(0);
- }
- pthread_detach(recv_pid);
-
- ret = pthread_create(&detect_pid,NULL,mrl_detect_action,NULL);
- if( ret < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","detect pthread create error,error is %d",ret);
- assert(0);
- }
- pthread_detach(detect_pid);
-
- ret = pthread_create(&stat_pid,NULL,mrl_stat_action,NULL);
- if( ret < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","stat pthread create error,error is %d",ret);
- assert(0);
- }
- pthread_detach(stat_pid);
-
- mrl_instance.static_feather = Maat_static_feather_init(mrl_instance.mrl_cfg.static_redis_ip,mrl_instance.mrl_cfg.static_redis_port,mrl_instance.mrl_cfg.static_redis_index);
- Maat_plugin_table(mrl_instance.static_feather,IR_DNAT_POLICY_TABLE_NAME,dnat_policy_start_cb,dnat_policy_update_cb,dnat_policy_finish_cb,NULL);
-
- mrl_instance.dynamic_feather = Maat_dynamic_feather_init(mrl_instance.mrl_cfg.dynamic_redis_ip,mrl_instance.mrl_cfg.dynamic_redis_port, mrl_instance.mrl_cfg.dynamic_redis_index);
- Maat_plugin_table(mrl_instance.dynamic_feather,IR_NOMINEE_IP_TABLE_NAME,snat_nominee_start_cb,snat_nominee_update_cb,snat_nominee_finish_cb,NULL);
- Maat_plugin_table(mrl_instance.dynamic_feather,IR_CANDIDATE_IP_TABLE_NAME,snat_candidate_start_cb,snat_candidate_update_cb,snat_candidate_finish_cb,NULL);
- Maat_plugin_table(mrl_instance.dynamic_feather,IR_VXLAN_INFO_TABLE_NAME,vxlan_info_start_cb,vxlan_info_update_cb,vxlan_info_finish_cb,NULL);
- Maat_plugin_table(mrl_instance.dynamic_feather,IR_MRL_IP_INFO_TABLE_NAME,mrl_ip_info_start_cb,mrl_ip_info_update_cb,mrl_ip_info_finish_cb,NULL);
- Maat_plugin_table(mrl_instance.dynamic_feather,IR_DNAT_CANDIDATE_IP_TABLE_NAME,dnat_candidate_start_cb,dnat_candidate_update_cb,dnat_candidate_finish_cb,NULL);
-
- //test_Maat_set_nominee_line();
- //test_Maat_del_nominee_line();
- return 1;
-}
-
-extern "C" void mrl_destroy(void)
-{
- MESA_htable_destroy(mrl_instance.ht_link_identity,ht_link_identity_free_cb);
- MESA_htable_destroy(mrl_instance.ht_nominee,ht_nominee_free_cb);
- MESA_htable_destroy(mrl_instance.ht_snat_candidate,ht_snat_candidate_free_cb);
- MESA_htable_destroy(mrl_instance.ht_dnat_policy,ht_dnat_policy_free_cb);
- MESA_htable_destroy(mrl_instance.ht_dnat_candidate,ht_dnat_candidate_free_cb);
- MESA_htable_destroy(mrl_instance.ht_vxlan_info,ht_vxlan_info_free_cb);
- MESA_htable_destroy(mrl_instance.ht_mrl_ip_info,ht_mrl_ip_info_free_cb);
-
- Maat_burn_feather(mrl_instance.static_feather);
- Maat_burn_feather(mrl_instance.dynamic_feather);
- mrl_socket_close();
- mrl_instance.stop_flag = 1;
- MESA_destroy_runtime_log_handle(mrl_instance.mrl_log_handle);
-}
-
-extern "C" char mrl_tcpall_entry(struct streaminfo *a_tcp,void **pme, int thread_seq, void *raw_packet)
-{
- int send_len = 0;
- char ret = APP_STATE_GIVEME| APP_STATE_FAWPKT;
- struct mrl_tuple five_tuple;
- memset(&five_tuple,0,sizeof(struct mrl_tuple));
- if(raw_packet != NULL)
- {
- mrl_get_pkt_tuple((const char* )raw_packet,&five_tuple);
- }
- switch(a_tcp->pktstate){
- case OP_STATE_PENDING:
- if(mrl_dnat_pkt_identify(a_tcp,&five_tuple))
- {
- global_stat.recv_ir_tcp_pkts ++;
- send_len =mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
- send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
-
- ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
- }
- else
- {
- if(mrl_snat_pkt_identify(a_tcp,&five_tuple))
- {
- global_stat.recv_ir_tcp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
- send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
-
- ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
- }
- else
- {
- ret = APP_STATE_DROPME|APP_STATE_FAWPKT;//�����ǰIP���Ƽ����е�IP����ô�������ݰ����ø��ң����һ���ת��
- }
- }
- break;
-
- case OP_STATE_DATA:
- global_stat.recv_ir_tcp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
- send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
- ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
- break;
-
- case OP_STATE_CLOSE:
- if(raw_packet != NULL)
- {
- global_stat.recv_ir_tcp_pkts ++;
- send_len=mrl_send_to_mgw(raw_packet, thread_seq);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
- send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
- }
- ret = APP_STATE_DROPME|APP_STATE_DROPPKT;
- break;
-
- default:
- ret = APP_STATE_DROPME | APP_STATE_FAWPKT;
- break;
- }
- return ret;
-}
-
-
-extern "C" char mrl_udp_entry(struct streaminfo *a_udp, void **pme, int thread_seq, void *raw_packet)
-{
- int send_len = 0;
- char ret = APP_STATE_GIVEME| APP_STATE_FAWPKT;
- struct mrl_tuple tuple;
- memset(&tuple,0,sizeof(struct mrl_tuple));
- if(raw_packet != NULL)
- {
- mrl_get_pkt_tuple((const char* )raw_packet,&tuple);
- char sip[MRL_STR_IP_LEN];
- memset(sip,0,MRL_STR_IP_LEN);
- char dip[MRL_STR_IP_LEN];
- memset(dip,0,MRL_STR_IP_LEN);
- uint16_t sport = 0;
- uint16_t dport = 0;
- inet_ntop(AF_INET,(void *)&(a_udp->addr.tuple4_v4->saddr),sip,MRL_STR_IP_LEN);
- inet_ntop(AF_INET,(void *)&(a_udp->addr.tuple4_v4->daddr),dip,MRL_STR_IP_LEN);
- sport = ntohs(a_udp->addr.tuple4_v4->source);
- 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))
- {
- 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))
- {
- 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.",
- 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;
- }
- return ret;
-}
-
+#include <stdio.h>
+#include <unistd.h>
+#include <pthread.h>
+#include <string.h>
+#include <assert.h>
+
+#include "mrl_io.h"
+#include "mrl_main.h"
+#include "mrl_redis.h"
+#include "mrl_stat.h"
+
+struct mrl_global_instance mrl_instance;
+extern struct global_stat_t global_stat;
+/*
+extern bool Maat_del_line(Maat_feather_t feather, int rule_id, const char* table_name);
+void test_Maat_del_nominee_line()
+{
+ int rule_id =1;
+ Maat_del_line(mrl_instance.mrl_feather, rule_id, IR_NOMINEE_IP_TABLE_NAME);
+}
+
+void test_Maat_set_nominee_line()
+{
+ const char ip_addr[MRL_STR_IP_LEN]="192.168.11.60";
+ struct mrl_nominee_item nominee_item;
+ memset(&nominee_item, 0, sizeof(struct mrl_nominee_item));
+ nominee_item.config_id = 1;
+ nominee_item.addr_pool_id =1;
+ nominee_item.addr_type = 4;
+ memcpy(nominee_item.ip_addr,ip_addr,MRL_STR_IP_LEN);
+ nominee_item.is_valid = 1;
+ memcpy(nominee_item.effective_range,"{}",strlen("{}"));
+ memcpy(nominee_item.op_time,"20181212",strlen("20181212"));
+ struct Maat_line_t line_rule;
+ char table_line[512];
+ int ret=0;
+ memset(&line_rule,0,sizeof(line_rule));
+ memset(&table_line,0,sizeof(table_line));
+ line_rule.label_id=0;
+ line_rule.rule_id=nominee_item.config_id;
+ line_rule.table_name=IR_NOMINEE_IP_TABLE_NAME;
+ snprintf(table_line,sizeof(table_line),"%d\t%d\t%d\t%s\t%d\t%s\t%s",
+ nominee_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
+ nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time);
+ line_rule.table_line=table_line;
+ line_rule.expire_after=0;
+ ret=Maat_cmd_set_line(mrl_instance.mrl_feather, (const struct Maat_line_t*)&line_rule, MAAT_OP_ADD);
+ if(ret < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"test_Maat_set_nominee_line","Maat fail to set the 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], ret is %d",
+ nominee_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
+ nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time, ret);
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"test_Maat_set_nominee_line","Maat succeed to set the 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_item.config_id, nominee_item.addr_pool_id,nominee_item.addr_type,
+ nominee_item.ip_addr,nominee_item.is_valid,nominee_item.effective_range, nominee_item.op_time);
+ }
+ return;
+}
+*/
+
+
+void mrl_cfg_init(const char *profile)
+{
+ 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");
+
+ mrl_instance.mrl_log_handle = MESA_create_runtime_log_handle(mrl_instance.mrl_cfg.mrl_log_path, mrl_instance.mrl_cfg.mrl_log_level);
+ if(mrl_instance.mrl_log_handle == NULL)
+ {
+ assert(0);
+ }
+
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load log info is:"
+ "[log_path:%s,log_level:%d]",mrl_instance.mrl_cfg.mrl_log_path,mrl_instance.mrl_cfg.mrl_log_level);
+
+
+ /********** 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);
+ 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);
+ 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);
+
+ /********** 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);
+ assert(temp_port > 0 && temp_port <= 65535);
+ mrl_instance.mrl_cfg.mgw_port = temp_port;
+
+ char mrl_netcard[MRL_STR_NETCARD_LEN];
+ memset(mrl_netcard,0,MRL_STR_NETCARD_LEN);
+ MESA_load_profile_string_def(profile, "SOCK_INFO", "mrl_netcard", mrl_netcard, MRL_STR_NETCARD_LEN, "eth0");
+ uint32_t temp_mrl_ip = mrl_get_ip_by_eth_name(mrl_netcard);
+ if(temp_mrl_ip < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_cfg_init","get ip from eth name error,eth name is %s",mrl_netcard);
+ 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);
+ assert(temp_port > 0 && temp_port <= 65535);
+ mrl_instance.mrl_cfg.mrl_port = temp_port;
+
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load sock info is:"
+ "[mgw_ip:%s,mgw_port:%hu,mrl_ip:%s,mrl_port:%hu]",
+ mrl_instance.mrl_cfg.mgw_ip,mrl_instance.mrl_cfg.mgw_port,
+ mrl_instance.mrl_cfg.mrl_ip,mrl_instance.mrl_cfg.mrl_port);
+
+
+ /********** load maat info **********/
+ MESA_load_profile_string_def(profile, "MAAT_INFO", "Maat_table_path", mrl_instance.mrl_cfg.Maat_table_path, MRL_MAX_PATH, "./conf/table_info.conf");
+ MESA_load_profile_uint_def(profile, "MAAT_INFO", "Maat_max_threads", &(mrl_instance.mrl_cfg.Maat_max_threads), 1);
+ 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);
+ 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);
+ 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);
+
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load maat info is:"
+ "[Maat_table_path:%s,Maat_max_threads:%d,Maat_stat_path:%s\n"
+ "static_redis_ip:%s,static_redis_port:%hu,static_redis_index:%d\n"
+ "dynamic_redis_ip:%s,dynamic_redis_port:%hu,dynamic_redis_index:%d\n",
+ mrl_instance.mrl_cfg.Maat_table_path,mrl_instance.mrl_cfg.Maat_max_threads,mrl_instance.mrl_cfg.Maat_stat_path,
+ mrl_instance.mrl_cfg.static_redis_ip,mrl_instance.mrl_cfg.static_redis_port,mrl_instance.mrl_cfg.static_redis_index,
+ mrl_instance.mrl_cfg.dynamic_redis_ip,mrl_instance.mrl_cfg.dynamic_redis_port,mrl_instance.mrl_cfg.dynamic_redis_index);
+
+
+ /********** load htable info *********/
+ MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_slot_size", &(mrl_instance.mrl_cfg.ht_slot_size), 1048576);
+ MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_max_element_num", &(mrl_instance.mrl_cfg.ht_max_element_num), 0);
+ MESA_load_profile_uint_def(profile, "HTABLE_INFO", "ht_mutex_num", &(mrl_instance.mrl_cfg.ht_mutex_num), 1);
+
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load htable info is:"
+ "[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 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");
+
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_cfg_init","load link_identity_path info is:"
+ "[link_identity_path:%s]",mrl_instance.mrl_cfg.link_identity_path);
+
+}
+
+extern "C" int mrl_init(void)
+{
+ int ret = 0;
+ mrl_instance.stop_flag = 0;
+
+ mrl_stat_init();
+
+ mrl_cfg_init("./mrl_conf/mrl.conf");
+
+ mrl_socket_init();
+
+ mrl_mmdb_init("./mrl_conf/all_ip_only_coun_v4.mmdb");
+
+
+ mrl_instance.ht_link_identity = mrl_htable_init((void *)ht_link_identity_free_cb);
+ mrl_instance.ht_nominee = mrl_htable_init((void *)ht_nominee_free_cb);
+
+ mrl_instance.ht_snat_candidate = mrl_htable_init((void *)ht_snat_candidate_free_cb);
+ mrl_instance.ht_dnat_policy = mrl_htable_init((void *)ht_dnat_policy_free_cb);
+ mrl_instance.ht_dnat_candidate = mrl_htable_init((void *)ht_dnat_candidate_free_cb);
+
+ mrl_instance.ht_vxlan_info = mrl_htable_init((void *)ht_vxlan_info_free_cb);
+ mrl_instance.ht_mrl_ip_info= mrl_htable_init((void *)ht_mrl_ip_info_free_cb);
+
+ //���������߳̽��ղ�����mwg���͵����ݰ�
+ pthread_t recv_pid, detect_pid, stat_pid;
+ ret = pthread_create(&recv_pid,NULL,mrl_recv_from_mgw,NULL);
+ if( ret < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","recv pthread create error,error is %d",ret);
+ assert(0);
+ }
+ pthread_detach(recv_pid);
+
+ ret = pthread_create(&detect_pid,NULL,mrl_detect_action,NULL);
+ if( ret < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","detect pthread create error,error is %d",ret);
+ assert(0);
+ }
+ pthread_detach(detect_pid);
+
+ ret = pthread_create(&stat_pid,NULL,mrl_stat_action,NULL);
+ if( ret < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_init","stat pthread create error,error is %d",ret);
+ assert(0);
+ }
+ pthread_detach(stat_pid);
+
+ mrl_instance.static_feather = Maat_static_feather_init(mrl_instance.mrl_cfg.static_redis_ip,mrl_instance.mrl_cfg.static_redis_port,mrl_instance.mrl_cfg.static_redis_index);
+ Maat_plugin_table(mrl_instance.static_feather,IR_DNAT_POLICY_TABLE_NAME,dnat_policy_start_cb,dnat_policy_update_cb,dnat_policy_finish_cb,NULL);
+
+ mrl_instance.dynamic_feather = Maat_dynamic_feather_init(mrl_instance.mrl_cfg.dynamic_redis_ip,mrl_instance.mrl_cfg.dynamic_redis_port, mrl_instance.mrl_cfg.dynamic_redis_index);
+ Maat_plugin_table(mrl_instance.dynamic_feather,IR_NOMINEE_IP_TABLE_NAME,snat_nominee_start_cb,snat_nominee_update_cb,snat_nominee_finish_cb,NULL);
+ Maat_plugin_table(mrl_instance.dynamic_feather,IR_CANDIDATE_IP_TABLE_NAME,snat_candidate_start_cb,snat_candidate_update_cb,snat_candidate_finish_cb,NULL);
+ Maat_plugin_table(mrl_instance.dynamic_feather,IR_VXLAN_INFO_TABLE_NAME,vxlan_info_start_cb,vxlan_info_update_cb,vxlan_info_finish_cb,NULL);
+ Maat_plugin_table(mrl_instance.dynamic_feather,IR_MRL_IP_INFO_TABLE_NAME,mrl_ip_info_start_cb,mrl_ip_info_update_cb,mrl_ip_info_finish_cb,NULL);
+ Maat_plugin_table(mrl_instance.dynamic_feather,IR_DNAT_CANDIDATE_IP_TABLE_NAME,dnat_candidate_start_cb,dnat_candidate_update_cb,dnat_candidate_finish_cb,NULL);
+
+ //test_Maat_set_nominee_line();
+ //test_Maat_del_nominee_line();
+ return 1;
+}
+
+extern "C" void mrl_destroy(void)
+{
+ MESA_htable_destroy(mrl_instance.ht_link_identity,ht_link_identity_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_nominee,ht_nominee_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_snat_candidate,ht_snat_candidate_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_dnat_policy,ht_dnat_policy_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_dnat_candidate,ht_dnat_candidate_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_vxlan_info,ht_vxlan_info_free_cb);
+ MESA_htable_destroy(mrl_instance.ht_mrl_ip_info,ht_mrl_ip_info_free_cb);
+
+ Maat_burn_feather(mrl_instance.static_feather);
+ Maat_burn_feather(mrl_instance.dynamic_feather);
+ mrl_socket_close();
+ mrl_instance.stop_flag = 1;
+ MESA_destroy_runtime_log_handle(mrl_instance.mrl_log_handle);
+}
+
+extern "C" char mrl_tcpall_entry(struct streaminfo *a_tcp,void **pme, int thread_seq, void *raw_packet)
+{
+ int send_len = 0;
+ char ret = APP_STATE_GIVEME| APP_STATE_FAWPKT;
+ struct mrl_tuple five_tuple;
+ memset(&five_tuple,0,sizeof(struct mrl_tuple));
+ if(raw_packet != NULL)
+ {
+ mrl_get_pkt_tuple((const char* )raw_packet,&five_tuple);
+ }
+ switch(a_tcp->pktstate){
+ case OP_STATE_PENDING:
+ if(mrl_dnat_pkt_identify(a_tcp,&five_tuple))
+ {
+ global_stat.recv_ir_tcp_pkts ++;
+ send_len =mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes dnat pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
+
+ ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ }
+ else
+ {
+ if(mrl_snat_pkt_identify(a_tcp,&five_tuple))
+ {
+ global_stat.recv_ir_tcp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes snat pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
+
+ ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ }
+ else
+ {
+ ret = APP_STATE_DROPME|APP_STATE_FAWPKT;//�����ǰIP���Ƽ����е�IP����ô�������ݰ����ø��ң����һ���ת��
+ }
+ }
+ break;
+
+ case OP_STATE_DATA:
+ global_stat.recv_ir_tcp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
+ ret = APP_STATE_GIVEME|APP_STATE_DROPPKT;
+ break;
+
+ case OP_STATE_CLOSE:
+ if(raw_packet != NULL)
+ {
+ global_stat.recv_ir_tcp_pkts ++;
+ send_len=mrl_send_to_mgw(raw_packet, thread_seq);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_tcpall_entry","send %d Bytes pkt[sip:%s,sport:%hu,dip:%s,dport:%hu]to mgw.",
+ send_len,five_tuple.sip,five_tuple.sport,five_tuple.dip,five_tuple.dport);
+ }
+ ret = APP_STATE_DROPME|APP_STATE_DROPPKT;
+ break;
+
+ default:
+ ret = APP_STATE_DROPME | APP_STATE_FAWPKT;
+ break;
+ }
+ return ret;
+}
+
+
+extern "C" char mrl_udp_entry(struct streaminfo *a_udp, void **pme, int thread_seq, void *raw_packet)
+{
+ int send_len = 0;
+ char ret = APP_STATE_GIVEME| APP_STATE_FAWPKT;
+ struct mrl_tuple tuple;
+ memset(&tuple,0,sizeof(struct mrl_tuple));
+ if(raw_packet != NULL)
+ {
+ mrl_get_pkt_tuple((const char* )raw_packet,&tuple);
+ char sip[MRL_STR_IP_LEN];
+ memset(sip,0,MRL_STR_IP_LEN);
+ char dip[MRL_STR_IP_LEN];
+ memset(dip,0,MRL_STR_IP_LEN);
+ uint16_t sport = 0;
+ uint16_t dport = 0;
+ inet_ntop(AF_INET,(void *)&(a_udp->addr.tuple4_v4->saddr),sip,MRL_STR_IP_LEN);
+ inet_ntop(AF_INET,(void *)&(a_udp->addr.tuple4_v4->daddr),dip,MRL_STR_IP_LEN);
+ sport = ntohs(a_udp->addr.tuple4_v4->source);
+ 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))
+ {
+ 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))
+ {
+ 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.",
+ 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;
+ }
+ return ret;
+}
+
diff --git a/src/mrl_main.o b/src/mrl_main.o
deleted file mode 100644
index 507b466..0000000
--- a/src/mrl_main.o
+++ /dev/null
Binary files differ
diff --git a/src/mrl_redis.cpp b/src/mrl_redis.cpp
index e7a5274..41d3580 100644
--- a/src/mrl_redis.cpp
+++ b/src/mrl_redis.cpp
@@ -10,6 +10,39 @@ extern struct global_stat_t global_stat;
bool mrl_construct_ir_vxlan_info(struct streaminfo *mystream, int cfg_id,const char* back_ip, int back_type);
+long ht_dnat_nominee_search_cb(void *data, const uchar *key, uint size, void *user_arg)
+{
+ struct mrl_nominee* dnat_nominee = (struct mrl_nominee* )data;
+ struct mrl_nominee_key* nominee_key = (struct mrl_nominee_key*)key;
+ int* operation = (int*)user_arg;
+ if(dnat_nominee != NULL)
+ {
+ switch(*operation)
+ {
+ case MRL_ADD_DNAT_NOMINEE:
+ dnat_nominee->nominee_count ++;
+ break;
+ case MRL_DEL_DNAT_NOMINEE:
+ dnat_nominee->nominee_count --;
+ break;
+ default:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"ht_dnat_nominee_search_cb","cur dnat_nominee_search operation is %d",*operation);
+ assert(0);
+ }
+ 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);
+ return dnat_nominee->nominee_count;
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_dnat_nominee_search_cb","cur nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is NULL!",
+ nominee_key->sip,nominee_key->sport,nominee_key->dip,nominee_key->dport);
+ return -1;
+ }
+}
+
void wrapped_Maat_set_feather_opt(Maat_feather_t feather, enum MAAT_INIT_OPT type, const void* value, int size)
{
int ret = Maat_set_feather_opt(feather, type, value, size);
@@ -204,6 +237,7 @@ 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)
{
int ret = 0;
@@ -243,6 +277,20 @@ void Maat_del_back_info(const char *back_ip)
}
}
+void Maat_del_dnat_candidate(const char *candidate_ip,int rule_id)
+{
+ if(Maat_del_line(mrl_instance.dynamic_feather, rule_id,MRL_DEL_AFTER,IR_DNAT_CANDIDATE_IP_TABLE_NAME))
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle,RLOG_LV_FATAL,"Maat_del_dnat_candidate","Maat succeed to del dnat_candidate item %s",candidate_ip);
+ global_stat.vxlan_info_num--;
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"Maat_del_dnat_candidate","Maat fail to del dnat_candidate item %s",candidate_ip);
+ }
+}
+
+
void mrl_create_snat_candidate(struct mrl_snat_candidate* snat_candidate, struct mrl_nominee* snat_nominee)
{
snat_candidate->config_id = snat_nominee->config_id;
@@ -282,10 +330,11 @@ void mrl_create_dnat_nominee(struct mrl_nominee* dnat_nominee, struct mrl_dnat_p
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",
- 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);
+ "[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)
@@ -371,7 +420,7 @@ void snat_nominee_update_cb(int table_id,const char *table_line,void *u_para)
nominee_key.dport=mrl_instance.mrl_cfg.dest_port;
switch(snat_nominee->is_valid)
{
- case 0:
+ 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)
{
@@ -391,7 +440,7 @@ void snat_nominee_update_cb(int table_id,const char *table_line,void *u_para)
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
@@ -445,13 +494,12 @@ void snat_candidate_update_cb(int table_id, const char *table_line, void *u_para
snat_candidate->location,snat_candidate->is_valid,snat_candidate->effective_range, snat_candidate->op_time);
switch(snat_candidate->is_valid)
{
- case 0:
+ case MRL_INVALID:
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);
}
else
@@ -467,7 +515,7 @@ void snat_candidate_update_cb(int table_id, const char *table_line, void *u_para
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
@@ -510,6 +558,9 @@ 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 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);
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",
@@ -527,10 +578,7 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para)
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);
-
- struct mrl_nominee* dnat_nominee = (struct mrl_nominee* )calloc(1,sizeof(struct mrl_nominee));
- global_stat.malloc_memory += sizeof(struct mrl_nominee);
-
+ 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);
@@ -540,39 +588,49 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para)
switch(dnat_policy->is_valid)
{
- case 0:
- ret =mrl_htable_delete(mrl_instance.ht_dnat_policy,(const unsigned char*)&dnat_policy_key,sizeof(struct mrl_dnat_policy_key));
- if(ret == MRL_HTABLE_DEL_SUCCESS)
- {
- global_stat.dnat_policy_num --;
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_dnat_policy succeed to delete the dnat key[original_ip:%s,original_port:%hu]!",
+ case MRL_INVALID:
+ ret =mrl_htable_delete(mrl_instance.ht_dnat_policy,(const unsigned char*)&dnat_policy_key,sizeof(struct mrl_dnat_policy_key));
+ if(ret == MRL_HTABLE_DEL_SUCCESS)
+ {
+ global_stat.dnat_policy_num --;
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_dnat_policy succeed to delete the dnat key[original_ip:%s,original_port:%hu]!",
dnat_policy_key.original_ip,dnat_policy_key.original_port);
-
- ret =mrl_htable_delete(mrl_instance.ht_nominee,(const unsigned char*)&nominee_key,sizeof(struct mrl_nominee_key));
- if(ret ==MRL_HTABLE_DEL_SUCCESS)
- {
- 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);
- }
- else
- {
- if(ret ==MRL_HTABLE_DEL_NULL)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","the dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is not exist in ht_nominee.",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
- }
- else
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_nominee fail 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);
- assert(0);
+ operation = MRL_DEL_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)
+ {
+ if(nominee_count == 0)
+ {
+ ret = MESA_htable_del(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key, sizeof(struct mrl_nominee_key), NULL);
+ 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);
+ }
+ else
+ {
+ 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);
+ }
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","cur nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] nominee_count is %d.",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport,nominee_count);
+ }
+
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"dnat_policy_update_cb","the dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is not exist in ht_nominee.",nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
}
- }
}
else
{
if(ret == MRL_HTABLE_DEL_NULL)
{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","the dnat key[original_ip:%s,original_port:%hu] is not exsit in ht_dnat_policy.",
+ 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 not exsit in ht_dnat_policy.",
dnat_policy_key.original_ip,dnat_policy_key.original_port);
}
else
@@ -583,35 +641,38 @@ void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para)
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
global_stat.dnat_policy_num ++;
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_dnat_policy success insert the dnat_policy key[original_ip:%s,original_port:%hu]!",
dnat_policy_key.original_ip,dnat_policy_key.original_port);
- mrl_create_dnat_nominee(dnat_nominee,dnat_policy);
- ret =mrl_htable_add(mrl_instance.ht_nominee,(const unsigned char* )&nominee_key,sizeof(struct mrl_nominee_key),(const void* )dnat_nominee);
- if(ret ==MRL_HTABLE_ADD_SUCCESS)
- {
- 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 add dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu].",
+
+ 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));
+ 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);
+ 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);
+ }
+ else
+ {
+ 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 insert dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu].",
nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport);
- }
- else
- {
- if(ret ==MRL_HTABLE_ADD_DUPLICATE)
- {
-
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","the dnat 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);
- }
- else
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","ht_nominee fail 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);
- }
- }
+ }
+ }
+ else
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","the dnat nominee key[sip:%s,sport:%hu,dip:%s,dport:%hu] is duplicated in ht_nominee,nominee_count is %ld",
+ nominee_key.sip,nominee_key.sport,nominee_key.dip,nominee_key.dport,nominee_count);
+ }
}
else
{
@@ -661,7 +722,7 @@ void dnat_candidate_update_cb(int table_id, const char *table_line, void *u_para
dnat_candidate->is_valid,dnat_candidate->effective_range, dnat_candidate->op_time);
switch(dnat_candidate->is_valid)
{
- case 0:
+ case MRL_INVALID:
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)
{
@@ -681,7 +742,7 @@ void dnat_candidate_update_cb(int table_id, const char *table_line, void *u_para
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
@@ -713,7 +774,6 @@ void dnat_candidate_finish_cb(void* u_para)
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_candidate_finish_cb","finish update IR_CANDIDATE_IP");
return;
}
-
void vxlan_info_start_cb(int update_type,void* u_para)
{
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"vxlan_info_start_cb","start to update IR_VXLAN_INFO, cur update type is %d", update_type);
@@ -735,7 +795,7 @@ void vxlan_info_update_cb(int table_id, const char *table_line, void *u_para)
vxlan_info->is_valid, vxlan_info->effective_range, vxlan_info->op_time);
switch(vxlan_info->is_valid)
{
- case 0:
+ case MRL_INVALID:
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)
{
@@ -755,7 +815,7 @@ void vxlan_info_update_cb(int table_id, const char *table_line, void *u_para)
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
@@ -811,7 +871,7 @@ void mrl_ip_info_update_cb(int table_id, const char *table_line, void *u_para)
mrl_ip->is_valid,mrl_ip->effective_range,mrl_ip->op_time);
switch(mrl_ip->is_valid)
{
- case 0:
+ case MRL_INVALID:
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)
{
@@ -831,7 +891,7 @@ void mrl_ip_info_update_cb(int table_id, const char *table_line, void *u_para)
}
}
break;
- case 1:
+ 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);
if(ret == MRL_HTABLE_ADD_SUCCESS)
{
diff --git a/src/mrl_redis.o b/src/mrl_redis.o
deleted file mode 100644
index 2af950a..0000000
--- a/src/mrl_redis.o
+++ /dev/null
Binary files differ
diff --git a/src/mrl_stat.cpp b/src/mrl_stat.cpp
index a02ca8a..e97564c 100644
--- a/src/mrl_stat.cpp
+++ b/src/mrl_stat.cpp
@@ -1,81 +1,81 @@
-#include"mrl_stat.h"
-#include<stdio.h>
-#include<stdlib.h>
-#include<string.h>
-#include<unistd.h>
-
-struct global_stat_t global_stat;
-struct fs_stat_t global_fs_stat;
-void mrl_stat_init()
-{
- int value = 0;
- char stat_file[] = "log/mrl_stat.log";
- memset(&global_stat,0,sizeof(struct global_stat_t));
-
- global_fs_stat.handle = FS_create_handle();
-
- FS_set_para(global_fs_stat.handle, OUTPUT_DEVICE, stat_file, strlen(stat_file)+1);
-
- value = 1;
- FS_set_para(global_fs_stat.handle, PRINT_MODE, &value, sizeof(value));
-
- value = 0;
- FS_set_para(global_fs_stat.handle, CREATE_THREAD, &value, sizeof(value));
-
- /* field */
- global_fs_stat.fs_field_id[FIELD_RECV_IR_TCP_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_ir_tcp");
- global_fs_stat.fs_field_id[FIELD_RECV_IR_UDP_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_ir_udp");
- global_fs_stat.fs_field_id[FIELD_RECV_MGW_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_mgw_pkts");
-
- /*status*/
- global_fs_stat.fs_status_id[STATUS_SNAT_CANDIDATE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "snat_candidate_num");
- global_fs_stat.fs_status_id[STATUS_DNAT_CANDIDATE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_candiate_num");
- global_fs_stat.fs_status_id[STATUS_SNAT_NOMINEE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "snat_nominee_num");
- global_fs_stat.fs_status_id[STATUS_DNAT_NOMINEE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_nominee_num");
- global_fs_stat.fs_status_id[STATUS_LINK_IDENTITY_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "link_identity_num");
- global_fs_stat.fs_status_id[STATUS_DNAT_POLICYC_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_policy_num");
- global_fs_stat.fs_status_id[STATUS_VXLAN_INFO_ITEM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "vxlan_info_num");
- global_fs_stat.fs_status_id[STATUS_MRL_IP_ITEM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "mrl_info_num");
-
- global_fs_stat.fs_status_id[STATUS_MALLOC_MEMORY] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "malloc_memory(Byte)");
- global_fs_stat.fs_status_id[STATUS_FREE_MEMORY] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "free_memory(Byte)");
-
- FS_start(global_fs_stat.handle);
-}
-
-
-void mrl_stat_output()
-{
- /*field*/
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_IR_TCP_PKTS], 0, FS_OP_SET, global_stat.recv_ir_tcp_pkts);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_IR_UDP_PKTS], 0, FS_OP_SET, global_stat.recv_ir_udp_pkts);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_MGW_PKTS], 0, FS_OP_SET, global_stat.recv_mgw_pkts);
-
- /*status*/
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_SNAT_CANDIDATE_NUM], 0, FS_OP_SET, global_stat.snat_candidate_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_CANDIDATE_NUM], 0, FS_OP_SET, global_stat.dnat_candidate_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_SNAT_NOMINEE_NUM], 0, FS_OP_SET, global_stat.snat_nominee_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_NOMINEE_NUM], 0, FS_OP_SET, global_stat.dnat_nominee_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_LINK_IDENTITY_NUM], 0, FS_OP_SET, global_stat.link_identity_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_POLICYC_NUM], 0, FS_OP_SET, global_stat.dnat_policy_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_VXLAN_INFO_ITEM], 0, FS_OP_SET, global_stat.vxlan_info_num);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_MRL_IP_ITEM], 0, FS_OP_SET, global_stat.mrl_ip_num);
-
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_MALLOC_MEMORY], 0, FS_OP_SET, global_stat.malloc_memory);
- FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_FREE_MEMORY], 0, FS_OP_SET, global_stat.free_memory);
-
- FS_passive_output(global_fs_stat.handle);
-}
-
-
-void *mrl_stat_action(void *arg)
-{
- for(;;)
- {
- mrl_stat_output();
- sleep(1);
- }
- return NULL;
-}
-
-
+#include"mrl_stat.h"
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+#include<unistd.h>
+
+struct global_stat_t global_stat;
+struct fs_stat_t global_fs_stat;
+void mrl_stat_init()
+{
+ int value = 0;
+ char stat_file[] = "log/mrl_stat.log";
+ memset(&global_stat,0,sizeof(struct global_stat_t));
+
+ global_fs_stat.handle = FS_create_handle();
+
+ FS_set_para(global_fs_stat.handle, OUTPUT_DEVICE, stat_file, strlen(stat_file)+1);
+
+ value = 1;
+ FS_set_para(global_fs_stat.handle, PRINT_MODE, &value, sizeof(value));
+
+ value = 0;
+ FS_set_para(global_fs_stat.handle, CREATE_THREAD, &value, sizeof(value));
+
+ /* field */
+ global_fs_stat.fs_field_id[FIELD_RECV_IR_TCP_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_ir_tcp");
+ global_fs_stat.fs_field_id[FIELD_RECV_IR_UDP_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_ir_udp");
+ global_fs_stat.fs_field_id[FIELD_RECV_MGW_PKTS] = FS_register(global_fs_stat.handle, FS_STYLE_FIELD, FS_CALC_SPEED,"recv_mgw_pkts");
+
+ /*status*/
+ global_fs_stat.fs_status_id[STATUS_SNAT_CANDIDATE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "snat_candidate_num");
+ global_fs_stat.fs_status_id[STATUS_DNAT_CANDIDATE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_candiate_num");
+ global_fs_stat.fs_status_id[STATUS_SNAT_NOMINEE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "snat_nominee_num");
+ global_fs_stat.fs_status_id[STATUS_DNAT_NOMINEE_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_nominee_num");
+ global_fs_stat.fs_status_id[STATUS_LINK_IDENTITY_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "link_identity_num");
+ global_fs_stat.fs_status_id[STATUS_DNAT_POLICYC_NUM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "dnat_policy_num");
+ global_fs_stat.fs_status_id[STATUS_VXLAN_INFO_ITEM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "vxlan_info_num");
+ global_fs_stat.fs_status_id[STATUS_MRL_IP_ITEM] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "mrl_info_num");
+
+ global_fs_stat.fs_status_id[STATUS_MALLOC_MEMORY] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "malloc_memory(Byte)");
+ global_fs_stat.fs_status_id[STATUS_FREE_MEMORY] = FS_register(global_fs_stat.handle, FS_STYLE_STATUS, FS_CALC_CURRENT, "free_memory(Byte)");
+
+ FS_start(global_fs_stat.handle);
+}
+
+
+void mrl_stat_output()
+{
+ /*field*/
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_IR_TCP_PKTS], 0, FS_OP_SET, global_stat.recv_ir_tcp_pkts);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_IR_UDP_PKTS], 0, FS_OP_SET, global_stat.recv_ir_udp_pkts);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_field_id[FIELD_RECV_MGW_PKTS], 0, FS_OP_SET, global_stat.recv_mgw_pkts);
+
+ /*status*/
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_SNAT_CANDIDATE_NUM], 0, FS_OP_SET, global_stat.snat_candidate_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_CANDIDATE_NUM], 0, FS_OP_SET, global_stat.dnat_candidate_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_SNAT_NOMINEE_NUM], 0, FS_OP_SET, global_stat.snat_nominee_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_NOMINEE_NUM], 0, FS_OP_SET, global_stat.dnat_nominee_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_LINK_IDENTITY_NUM], 0, FS_OP_SET, global_stat.link_identity_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_DNAT_POLICYC_NUM], 0, FS_OP_SET, global_stat.dnat_policy_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_VXLAN_INFO_ITEM], 0, FS_OP_SET, global_stat.vxlan_info_num);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_MRL_IP_ITEM], 0, FS_OP_SET, global_stat.mrl_ip_num);
+
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_MALLOC_MEMORY], 0, FS_OP_SET, global_stat.malloc_memory);
+ FS_operate(global_fs_stat.handle, global_fs_stat.fs_status_id[STATUS_FREE_MEMORY], 0, FS_OP_SET, global_stat.free_memory);
+
+ FS_passive_output(global_fs_stat.handle);
+}
+
+
+void *mrl_stat_action(void *arg)
+{
+ for(;;)
+ {
+ mrl_stat_output();
+ sleep(1);
+ }
+ return NULL;
+}
+
+
diff --git a/src/mrl_stat.o b/src/mrl_stat.o
deleted file mode 100644
index 9ba2ef8..0000000
--- a/src/mrl_stat.o
+++ /dev/null
Binary files differ
diff --git a/src/mrl_utils.cpp b/src/mrl_utils.cpp
index 0106d54..a2e2668 100644
--- a/src/mrl_utils.cpp
+++ b/src/mrl_utils.cpp
@@ -36,7 +36,8 @@ int mrl_get_pkt_tuple(const char *raw_packet, struct mrl_tuple *five_tuple)
five_tuple->dport = ntohs(tcp_hdr->dest);
break;
default:
- assert(0);
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_get_pkt_tuple","cur stream[sip:%s,dip:%s] ip payload type is %d.",
+ five_tuple->sip,five_tuple->dip,five_tuple->protocol);
break;
}
diff --git a/src/mrl_utils.o b/src/mrl_utils.o
deleted file mode 100644
index 9b93e9f..0000000
--- a/src/mrl_utils.o
+++ /dev/null
Binary files differ