diff options
| author | lijie <[email protected]> | 2019-01-21 20:46:44 +0800 |
|---|---|---|
| committer | lijie <[email protected]> | 2019-01-21 20:46:44 +0800 |
| commit | a558cf074391f1f4b3581c9a4b5d6c6241d21c28 (patch) | |
| tree | 81e5921620171d742214cd38a238cbf7e7e1c526 | |
| parent | a5495b25b06223bf1b78eb7886c61042416a6c5c (diff) | |
修改无法支持dnat_policy中IP相同端口不同的策略问题v2.0.1
| -rw-r--r-- | bin/conf/mrl.conf | 2 | ||||
| -rw-r--r-- | doc/MRL部署及常见日志说明-简版.docx | bin | 0 -> 20871 bytes | |||
| -rw-r--r-- | include/mrl_io.h | 121 | ||||
| -rw-r--r-- | include/mrl_redis.h | 3 | ||||
| -rw-r--r-- | include/mrl_utils.h | 6 | ||||
| -rw-r--r-- | src/cJSON.o | bin | 74288 -> 0 bytes | |||
| -rw-r--r-- | src/mrl.so | bin | 203600 -> 0 bytes | |||
| -rw-r--r-- | src/mrl_io.cpp | 22 | ||||
| -rw-r--r-- | src/mrl_io.o | bin | 64800 -> 0 bytes | |||
| -rw-r--r-- | src/mrl_main.cpp | 798 | ||||
| -rw-r--r-- | src/mrl_main.o | bin | 51592 -> 0 bytes | |||
| -rw-r--r-- | src/mrl_redis.cpp | 194 | ||||
| -rw-r--r-- | src/mrl_redis.o | bin | 90928 -> 0 bytes | |||
| -rw-r--r-- | src/mrl_stat.cpp | 162 | ||||
| -rw-r--r-- | src/mrl_stat.o | bin | 23384 -> 0 bytes | |||
| -rw-r--r-- | src/mrl_utils.cpp | 3 | ||||
| -rw-r--r-- | src/mrl_utils.o | bin | 28440 -> 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 Binary files differnew file mode 100644 index 0000000..03414b3 --- /dev/null +++ b/doc/MRL部署及常见日志说明-简版.docx 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 Binary files differdeleted file mode 100644 index 3c13532..0000000 --- a/src/cJSON.o +++ /dev/null diff --git a/src/mrl.so b/src/mrl.so Binary files differdeleted file mode 100644 index 1d70301..0000000 --- a/src/mrl.so +++ /dev/null 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 Binary files differdeleted file mode 100644 index d57ec60..0000000 --- a/src/mrl_io.o +++ /dev/null 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 Binary files differdeleted file mode 100644 index 507b466..0000000 --- a/src/mrl_main.o +++ /dev/null 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 Binary files differdeleted file mode 100644 index 2af950a..0000000 --- a/src/mrl_redis.o +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9ba2ef8..0000000 --- a/src/mrl_stat.o +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9b93e9f..0000000 --- a/src/mrl_utils.o +++ /dev/null |
