summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bin/conf/mrl.conf6
-rw-r--r--include/mrl_main.h15
-rw-r--r--include/mrl_redis.h30
-rw-r--r--include/mrl_utils.h2
-rw-r--r--src/mrl_main.c488
-rw-r--r--src/mrl_packet.c51
-rw-r--r--src/mrl_redis.c217
7 files changed, 575 insertions, 234 deletions
diff --git a/bin/conf/mrl.conf b/bin/conf/mrl.conf
index 92c58f0..071e4ce 100644
--- a/bin/conf/mrl.conf
+++ b/bin/conf/mrl.conf
@@ -13,15 +13,17 @@ mrl_ip=192.168.11.242
[MAAT_INFO]
Maat_table_path=./mrl_conf/table_info.conf
Maat_max_threads=1
-Maat_redis_ip=192.168.10.180
-Maat_redis_port=26379
+Maat_redis_ip=192.168.11.243
+Maat_redis_port=6800
Maat_stat_path=./log/Maat_stat.log
+Maat_redis_index=5
[HTABLE_INFO]
ht_slots=10000
ht_max_element_num=40000
ht_mutex_num=5
[VXLAN_INFO]
vxlan_gdev_num=1
+vxlan_link_id_num=1
vxlan_local_mac=e4:95:6e:20:0d:0a
vxlan_gdev_mac=00:1e:73:6c:fa:43
vxlan_local_ip=192.168.1.10
diff --git a/include/mrl_main.h b/include/mrl_main.h
index e74a59e..67530b1 100644
--- a/include/mrl_main.h
+++ b/include/mrl_main.h
@@ -37,6 +37,7 @@ struct mrl_global_cfg
uint16_t Maat_redis_port;
char Maat_stat_path[MRL_MAX_PATH];
unsigned int Maat_max_threads;
+ int redis_index;
//htable info
unsigned int ht_slots;
@@ -51,12 +52,14 @@ struct mrl_global_cfg
char vxlan_outer_local_ip[MRL_STR_IP_LEN];
char **vxlan_outer_gdev_port;
char xvlan_outer_local_port[MRL_STR_PORT_LEN];
- char **vxlan_encap_type;
- char **vxlan_vpn_id;
- char **vxlan_link_id;
- char **vxlan_link_dir;
- char **vxlan_inner_smac;
- char **vxlan_inner_dmac;
+ unsigned int vxlan_link_id_num;//���������豸������·��
+ int **vxlan_vpn_id;
+ int **vxlan_encap_type;
+ int **vxlan_link_dir;
+ int **vxlan_link_id;
+
+ char ***vxlan_inner_smac;
+ char ***vxlan_inner_dmac;
};
struct mrl_global_instance
diff --git a/include/mrl_redis.h b/include/mrl_redis.h
index 655173d..1b19cd5 100644
--- a/include/mrl_redis.h
+++ b/include/mrl_redis.h
@@ -5,7 +5,8 @@
#define IR_NOMINEE_IP_TABLE_NAME "IR_NOMINEE_IP"
#define IR_CANDIDATE_IP_TABLE_NAME "IR_CANDIDATE_IP"
-//#define REDIS_CANDIATE_KEY_NAME "IR_CANDIDATE_ID"
+#define IR_DNAT_POLICY_TABLE_NAME "IR_DNAT_POLICY"
+
struct mrl_ht_nominee_key{
uint32_t sip;
uint32_t dip;
@@ -15,10 +16,11 @@ uint16_t dport;
struct mrl_nominee_item{
int config_id;
- int group_id;
+ int addr_pool_id;
int addr_type;
char ip_addr[MRL_STR_IP_LEN];
- int is_vaild;
+ int is_valid;
+ char effective_range[MRL_STR_EFFEC_RANGE_LEN];
char op_time[MRL_DATE_LEN];
};
@@ -38,23 +40,35 @@ struct mrl_vxlan_info{
};
struct mrl_candidate_item{
int config_id;
- int group_id;
+ int addr_pool_id;
int addr_type;
char ip_addr[MRL_STR_IP_LEN];//�ͻ���IP
int location;
char mrl_ip[MRL_STR_IP_LEN];
struct mrl_vxlan_info vxlan_info;
- int is_vaild;
+ int is_valid;
+ char effective_range[MRL_STR_EFFEC_RANGE_LEN];
char op_time[MRL_DATE_LEN];
};
-
+/*
+struct mrl_dnat_policy_item{
+ int config_id;
+ char original_dest_ip[MRL_STR_IP_LEN];
+ char original_dest_port[MRL_STR_PORT_LEN];
+ char original_protocol[MRL_STR_PROT_LEN];
+ char translated_dest_ip[MRL_STR_PROT_LEN];
+ char translated_dest_port[MRL_STR_PROT_LEN];
+ int do_log;
+ int action;
+ int service;
+ int is_valid;
+};
+*/
MESA_htable_handle mrl_htable_init(void * fn_data_free_cb);
//void ht_candidate_free_cb(void * data);
void ht_nominee_free_cb(void * data);
void Maat_set_cmd_line(Maat_feather_t feather, struct mrl_candidate_item *candidate_item);
-void Maat_set_nominee_cmd_line(Maat_feather_t feather, struct mrl_nominee_item *nominee_item);
-
Maat_feather_t mrl_Maat_feather_init();
void nominee_update_cb(int table_id,const char* table_line,void* u_para);
bool mrl_identify_nominee(struct streaminfo *mystream);
diff --git a/include/mrl_utils.h b/include/mrl_utils.h
index ca148a6..d65f543 100644
--- a/include/mrl_utils.h
+++ b/include/mrl_utils.h
@@ -9,6 +9,8 @@
#define MRL_STR_LINK_ID_LEN 5
#define MRL_STR_LINK_DIR_LEN 2
#define MRL_STR_VPN_ID_LEN 5
+#define MRL_STR_PROT_LEN 4
+#define MRL_STR_EFFEC_RANGE_LEN 20
#define MRL_DATE_LEN 50
diff --git a/src/mrl_main.c b/src/mrl_main.c
index 0bd6ae6..f09e1ae 100644
--- a/src/mrl_main.c
+++ b/src/mrl_main.c
@@ -20,10 +20,24 @@ void mrl_cfg_init(const char *profile)
char *temp_vpn_id_str;
char *temp_link_id_str;
char *temp_link_dir_str;
+ char *temp_inner_mac_str;
+
+ char **_link_id_str;
+ char **_encap_type_str;
+ char **_vpn_id_str;
+ char **_link_dir_str;
+ char **_inner_mac_str;
+
+ char **encap_type_str;
+ char **vpn_id_str;
+ char **link_id_str;
+ char **link_dir_str;
+ char **gdev_inner_mac_str;
unsigned int split_num = 0;
int temp_port = 0;
unsigned int i=0;
+ unsigned int j = 0;
/********** load log info **********/
MESA_load_profile_int_def(profile, "LOG_INFO", "log_level", &(mrl_instance.mrl_cfg.mrl_log_level),RLOG_LV_DEBUG);
@@ -62,6 +76,7 @@ void mrl_cfg_init(const char *profile)
assert(temp_port > 0 && temp_port <= 65535);
mrl_instance.mrl_cfg.Maat_redis_port = temp_port;
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_int_def(profile, "MAAT_INFO", "Maat_redis_index", &(mrl_instance.mrl_cfg.redis_index), 1);
/********** load htable info *********/
@@ -81,151 +96,406 @@ void mrl_cfg_init(const char *profile)
temp_port_str = (char *)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_PORT_LEN, sizeof(char));
global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_PORT_LEN;
-
- temp_encap_type_str = (char *)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_ENCAP_TYPE_LEN,sizeof(char));
- global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_ENCAP_TYPE_LEN;
-
- temp_vpn_id_str = (char *)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_VPN_ID_LEN,sizeof(char));
- global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_VPN_ID_LEN;
-
- temp_link_id_str = (char *)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_ID_LEN,sizeof(char));
- global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_ID_LEN;
-
- temp_link_dir_str = (char *)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_DIR_LEN, sizeof(char));
- global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_DIR_LEN;
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_gdev_mac",temp_mac_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_MAC_LEN, "00:00:00:00:00:00");
- mrl_instance.mrl_cfg.vxlan_outer_gdev_mac = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_mac = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[i] = (char *)malloc(sizeof(char)*MRL_STR_MAC_LEN);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[i] = (char *)calloc(MRL_STR_MAC_LEN, sizeof(char));
global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN;
}
- split_num = mrl_split_str(temp_mac_str,",",mrl_instance.mrl_cfg.vxlan_outer_gdev_mac);
+ split_num = mrl_split_str(temp_mac_str,";",mrl_instance.mrl_cfg.vxlan_outer_gdev_mac);
assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_gdev_ip",temp_ip_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_IP_LEN, "0.0.0.0");
- mrl_instance.mrl_cfg.vxlan_outer_gdev_ip = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_ip = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[i] = (char *)malloc(sizeof(char)*MRL_STR_IP_LEN);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[i] = (char *)calloc(MRL_STR_IP_LEN,sizeof(char));
global_stat.malloc_memory += sizeof(char)*MRL_STR_IP_LEN;
}
- split_num = mrl_split_str(temp_ip_str,",",mrl_instance.mrl_cfg.vxlan_outer_gdev_ip);
+ split_num = mrl_split_str(temp_ip_str,";",mrl_instance.mrl_cfg.vxlan_outer_gdev_ip);
assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_gdev_port",temp_port_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_PORT_LEN, "8888");
- mrl_instance.mrl_cfg.vxlan_outer_gdev_port = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_port = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_outer_gdev_port[i] = (char *)malloc(sizeof(char)*MRL_STR_PORT_LEN);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_port[i] = (char *)calloc(MRL_STR_PORT_LEN, sizeof(char));
global_stat.malloc_memory += sizeof(char)*MRL_STR_PORT_LEN;
}
- split_num = mrl_split_str(temp_port_str,",",mrl_instance.mrl_cfg.vxlan_outer_gdev_port);
+ split_num = mrl_split_str(temp_port_str,";",mrl_instance.mrl_cfg.vxlan_outer_gdev_port);
assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
-
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_encap_type",temp_encap_type_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_ENCAP_TYPE_LEN, "0000");
- mrl_instance.mrl_cfg.vxlan_encap_type = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
- global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+
+ MESA_load_profile_uint_def(profile, "VXLAN_INFO", "vxlan_link_id_num", &(mrl_instance.mrl_cfg.vxlan_link_id_num), 1);
+ int link_id_len = mrl_instance.mrl_cfg.vxlan_gdev_num*mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_LINK_ID_LEN;
+ printf("link id len is %d\n",link_id_len);
+ temp_link_id_str = (char *)calloc(link_id_len,sizeof(char));
+ global_stat.malloc_memory += link_id_len;
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_link_id",temp_link_id_str,link_id_len,"0");
+ link_id_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ mrl_instance.mrl_cfg.vxlan_link_id= (int **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(int *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(int *);
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_encap_type[i] = (char *)malloc(sizeof(char)*MRL_STR_ENCAP_TYPE_LEN);
- global_stat.malloc_memory += sizeof(char)*MRL_STR_ENCAP_TYPE_LEN;
+ link_id_str[i] = (char *)calloc(MRL_STR_LINK_ID_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_LINK_ID_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ mrl_instance.mrl_cfg.vxlan_link_id[i] = (int *)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(int));
+ global_stat.malloc_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
}
- split_num = mrl_split_str(temp_encap_type_str,",",mrl_instance.mrl_cfg.vxlan_encap_type);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
-
-
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_vpn_id",temp_vpn_id_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_VPN_ID_LEN, "0000");
- mrl_instance.mrl_cfg.vxlan_vpn_id = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
- global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ split_num = mrl_split_str(temp_link_id_str,";",link_id_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ _link_id_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char*));
+ global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_link_id_num * sizeof(char *);
+ for(i =0; i< mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ _link_id_str[i] = (char *)calloc(MRL_STR_LINK_ID_LEN,sizeof(char));
+ global_stat.malloc_memory +=MRL_STR_LINK_ID_LEN * sizeof(char);
+ }
+ for(i = 0; i < mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ split_num = mrl_split_str(link_id_str[i],",",_link_id_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_link_id[i][j] = atoi(_link_id_str[j]);
+ printf("%d gdev %d link id is %d\n",i,j,mrl_instance.mrl_cfg.vxlan_link_id[i][j]);
+ }
+ }
+
+
+ int encap_type_len = mrl_instance.mrl_cfg.vxlan_gdev_num*mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_ENCAP_TYPE_LEN;
+ printf("encap type len is %d\n",encap_type_len);
+
+ temp_encap_type_str = (char *)calloc(encap_type_len,sizeof(char));
+ global_stat.malloc_memory += encap_type_len;
+
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_encap_type",temp_encap_type_str,encap_type_len,"0");
+ encap_type_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+
+ mrl_instance.mrl_cfg.vxlan_encap_type= (int **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(int *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(int *);
+
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_vpn_id[i] = (char *)malloc(sizeof(char)*MRL_STR_VPN_ID_LEN);
- global_stat.malloc_memory += sizeof(char)*MRL_STR_VPN_ID_LEN;
- }
- split_num = mrl_split_str(temp_vpn_id_str,",",mrl_instance.mrl_cfg.vxlan_vpn_id);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ encap_type_str[i] = (char *)calloc(MRL_STR_ENCAP_TYPE_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_ENCAP_TYPE_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ mrl_instance.mrl_cfg.vxlan_encap_type[i] = (int *)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(int));
+ global_stat.malloc_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+
+ split_num = mrl_split_str(temp_encap_type_str,";",encap_type_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ _encap_type_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char*));
+ global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_link_id_num * sizeof(char *);
+ for(i =0; i< mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ _encap_type_str[i] = (char *)calloc(MRL_STR_ENCAP_TYPE_LEN,sizeof(char));
+ global_stat.malloc_memory +=MRL_STR_ENCAP_TYPE_LEN * sizeof(char);
+ }
+ for(i = 0; i < mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ split_num = mrl_split_str(encap_type_str[i],",",_encap_type_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_encap_type[i][j] = atoi(_encap_type_str[j]);
+ printf("%d gdev %d encap type is %d\n",i,j,mrl_instance.mrl_cfg.vxlan_encap_type[i][j]);
+ }
+ }
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_link_id",temp_link_id_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_LINK_ID_LEN, "0");
- mrl_instance.mrl_cfg.vxlan_link_id= (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
+ int vpn_id_len = mrl_instance.mrl_cfg.vxlan_gdev_num*mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_VPN_ID_LEN;
+ printf("vpn id len is %d\n",vpn_id_len);
+
+ temp_vpn_id_str = (char *)calloc(vpn_id_len,sizeof(char));
+ global_stat.malloc_memory += vpn_id_len;
+
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_vpn_id",temp_vpn_id_str,vpn_id_len,"0");
+ vpn_id_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ mrl_instance.mrl_cfg.vxlan_vpn_id= (int **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(int *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(int *);
+
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_link_id[i] = (char *)malloc(sizeof(char)*MRL_STR_LINK_ID_LEN);
- global_stat.malloc_memory += sizeof(char)*MRL_STR_LINK_ID_LEN;
+ vpn_id_str[i] = (char *)calloc(MRL_STR_VPN_ID_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_VPN_ID_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ mrl_instance.mrl_cfg.vxlan_vpn_id[i] = (int *)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(int));
+ global_stat.malloc_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+
+ split_num = mrl_split_str(temp_vpn_id_str,";",vpn_id_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ _vpn_id_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char*));
+ global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_link_id_num * sizeof(char *);
+ for(i =0; i< mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ _vpn_id_str[i] = (char *)calloc(MRL_STR_VPN_ID_LEN,sizeof(char));
+ global_stat.malloc_memory += MRL_STR_VPN_ID_LEN * sizeof(char);
+ }
+ for(i = 0; i < mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ split_num = mrl_split_str(vpn_id_str[i],",",_vpn_id_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_vpn_id[i][j] = atoi(_vpn_id_str[j]);
+ printf("%d gdev %d vpn id is %d\n",i,j,mrl_instance.mrl_cfg.vxlan_vpn_id[i][j]);
+ }
}
- split_num = mrl_split_str(temp_link_id_str,",",mrl_instance.mrl_cfg.vxlan_link_id);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_link_dir",temp_link_dir_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_LINK_DIR_LEN, "0");
- mrl_instance.mrl_cfg.vxlan_link_dir= (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
+
+ int link_dir_len = mrl_instance.mrl_cfg.vxlan_gdev_num*mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_LINK_DIR_LEN;
+ printf("link dir len is %d\n",link_dir_len);
+
+ temp_link_dir_str = (char *)calloc(link_dir_len,sizeof(char));
+ global_stat.malloc_memory += link_dir_len;
+
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_link_id",temp_link_dir_str,link_dir_len,"0");
+
+ link_dir_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ mrl_instance.mrl_cfg.vxlan_link_dir= (int **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(int *));
+ global_stat.malloc_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(int *);
+
for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- mrl_instance.mrl_cfg.vxlan_link_dir[i] = (char *)malloc(sizeof(char)*MRL_STR_LINK_DIR_LEN);
- global_stat.malloc_memory += sizeof(char)*MRL_STR_LINK_DIR_LEN;
+ link_dir_str[i] = (char *)calloc(MRL_STR_LINK_DIR_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_LINK_DIR_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ mrl_instance.mrl_cfg.vxlan_link_dir[i] = (int *)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(int));
+ global_stat.malloc_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
}
- split_num = mrl_split_str(temp_link_dir_str,",",mrl_instance.mrl_cfg.vxlan_link_dir);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
-
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_inner_smac",temp_mac_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_MAC_LEN, "00:00:00:00:00:00");
- mrl_instance.mrl_cfg.vxlan_inner_smac = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
- global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
- for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
+ split_num = mrl_split_str(temp_link_dir_str,";",link_dir_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+
+ _link_dir_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char*));
+ global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_link_id_num * sizeof(char *);
+ for(i =0; i< mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
{
- mrl_instance.mrl_cfg.vxlan_inner_smac[i] = (char *)malloc(sizeof(char)*MRL_STR_MAC_LEN);
- global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN;
+ _link_dir_str[i] = (char *)calloc(MRL_STR_LINK_DIR_LEN,sizeof(char));
+ global_stat.malloc_memory +=MRL_STR_LINK_DIR_LEN * sizeof(char);
+ }
+ for(i = 0; i < mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ split_num = mrl_split_str(link_dir_str[i],",",_link_dir_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_link_dir[i][j] = atoi(_link_dir_str[j]);
+ printf("%d gdev %d link dir is %d\n",i,j,mrl_instance.mrl_cfg.vxlan_link_dir[i][j]);
+ }
}
- split_num = mrl_split_str(temp_mac_str,",",mrl_instance.mrl_cfg.vxlan_inner_smac);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
- MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_inner_dmac",temp_mac_str, mrl_instance.mrl_cfg.vxlan_gdev_num*MRL_STR_MAC_LEN, "00:00:00:00:00:00");
- mrl_instance.mrl_cfg.vxlan_inner_dmac = (char **)malloc(sizeof(char *)*mrl_instance.mrl_cfg.vxlan_gdev_num);
- global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ int inner_mac_len = mrl_instance.mrl_cfg.vxlan_gdev_num*mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_MAC_LEN;
+ printf("inner mac len is %d\n",inner_mac_len);
- for(i=0;i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
+ temp_inner_mac_str = (char *)calloc(inner_mac_len,sizeof(char));
+ global_stat.malloc_memory += inner_mac_len;
+
+ gdev_inner_mac_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num, sizeof(char *));
+ global_stat.malloc_memory +=mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ for(i = 0; i <mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
{
- mrl_instance.mrl_cfg.vxlan_inner_dmac[i] = (char *)malloc(sizeof(char)*MRL_STR_MAC_LEN);
+ gdev_inner_mac_str[i] = (char *)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num*MRL_STR_MAC_LEN,sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+ _inner_mac_str = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num,sizeof(char *));
+ global_stat.malloc_memory += sizeof(char *)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ for(i = 0; i<mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ _inner_mac_str[i]=(char *)calloc(MRL_STR_MAC_LEN,sizeof(char));
global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN;
}
- split_num = mrl_split_str(temp_mac_str,",",mrl_instance.mrl_cfg.vxlan_inner_dmac);
- assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_inner_smac",temp_inner_mac_str, inner_mac_len, "00:00:00:00:00:00");
+ split_num = mrl_split_str(temp_inner_mac_str,";",gdev_inner_mac_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ mrl_instance.mrl_cfg.vxlan_inner_smac = (char ***)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(char **));
+ global_stat.malloc_memory += sizeof(char **)*mrl_instance.mrl_cfg.vxlan_gdev_num;
+ for(i = 0; i< mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ mrl_instance.mrl_cfg.vxlan_inner_smac[i] = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char *));
+ global_stat.malloc_memory += sizeof(char *)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ for(j = 0; j< mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_inner_smac[i][j]=(char *)calloc(MRL_STR_MAC_LEN,sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN;
+ }
+ }
+ for(i=0; i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
+ {
+ split_num = mrl_split_str(gdev_inner_mac_str[i],",",_inner_mac_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ memcpy(mrl_instance.mrl_cfg.vxlan_inner_smac[i][j], _inner_mac_str[j],strlen(_inner_mac_str[j]));
+ printf("the smac of %d gdev %d link id is %s\n",i,j,mrl_instance.mrl_cfg.vxlan_inner_smac[i][j]);
+ }
+ }
+
+ MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_inner_dmac",temp_inner_mac_str, inner_mac_len, "00:00:00:00:00:00");
+ split_num = mrl_split_str(temp_inner_mac_str,";",gdev_inner_mac_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_gdev_num);
+ mrl_instance.mrl_cfg.vxlan_inner_dmac = (char ***)calloc(mrl_instance.mrl_cfg.vxlan_gdev_num,sizeof(char **));
+ global_stat.malloc_memory += sizeof(char **)*mrl_instance.mrl_cfg.vxlan_gdev_num;
+ for(i = 0; i< mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ mrl_instance.mrl_cfg.vxlan_inner_dmac[i] = (char **)calloc(mrl_instance.mrl_cfg.vxlan_link_id_num, sizeof(char *));
+ global_stat.malloc_memory += sizeof(char *)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ for(j = 0; j< mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ mrl_instance.mrl_cfg.vxlan_inner_dmac[i][j]=(char *)calloc(MRL_STR_MAC_LEN,sizeof(char));
+ global_stat.malloc_memory += sizeof(char)*MRL_STR_MAC_LEN;
+ }
+ }
+
+ for(i=0; i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
+ {
+ split_num = mrl_split_str(gdev_inner_mac_str[i],",",_inner_mac_str);
+ assert(split_num == mrl_instance.mrl_cfg.vxlan_link_id_num);
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j++)
+ {
+ memcpy(mrl_instance.mrl_cfg.vxlan_inner_dmac[i][j], _inner_mac_str[j],strlen(_inner_mac_str[j]));
+ printf("the dmac of %d gdev %d link id is %s\n",i,j,mrl_instance.mrl_cfg.vxlan_inner_dmac[i][j]);
+ }
+ }
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_mac", mrl_instance.mrl_cfg.vxlan_outer_local_mac, MRL_STR_MAC_LEN, "00:00:00:00:00:00");
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_ip", mrl_instance.mrl_cfg.vxlan_outer_local_ip, MRL_STR_IP_LEN, "0.0.0.0");
MESA_load_profile_string_def(profile, "VXLAN_INFO", "vxlan_local_port", mrl_instance.mrl_cfg.xvlan_outer_local_port,MRL_STR_PORT_LEN, "8888");
free(temp_mac_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_MAC_LEN;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_MAC_LEN*sizeof(char);
free(temp_ip_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_IP_LEN;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_IP_LEN*sizeof(char);
free(temp_port_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_PORT_LEN;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_PORT_LEN*sizeof(char);
free(temp_encap_type_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_ENCAP_TYPE_LEN;
+ global_stat.free_memory += encap_type_len*sizeof(char);
+
+ free(temp_vpn_id_str);
+ global_stat.free_memory += vpn_id_len*sizeof(char);
free(temp_link_id_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_ID_LEN;
+ global_stat.free_memory += link_id_len*sizeof(char);
free(temp_link_dir_str);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * MRL_STR_LINK_DIR_LEN;
+ global_stat.free_memory += link_dir_len*sizeof(char);
+
+ free(temp_inner_mac_str);
+ global_stat.free_memory += inner_mac_len*sizeof(char);
+
+ for(i=0; i<mrl_instance.mrl_cfg.vxlan_gdev_num; i++)
+ {
+ free(encap_type_str[i]);
+ encap_type_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_ENCAP_TYPE_LEN;
+
+ free(vpn_id_str[i]);
+ vpn_id_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_VPN_ID_LEN;
+
+ free(link_id_str[i]);
+ link_id_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_LINK_ID_LEN;
+
+ free(link_dir_str[i]);
+ link_dir_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_LINK_DIR_LEN;
+
+ free(gdev_inner_mac_str[i]);
+ gdev_inner_mac_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_MAC_LEN*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+
+
+ for(i=0; i<mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ free(_encap_type_str[i]);
+ _encap_type_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_ENCAP_TYPE_LEN;
+
+ free(_vpn_id_str[i]);
+ _vpn_id_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_VPN_ID_LEN;
+
+ free(_link_id_str[i]);
+ _link_id_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_LINK_ID_LEN;
+
+ free(_link_dir_str[i]);
+ _link_dir_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_LINK_DIR_LEN;
+
+ free(_inner_mac_str[i]);
+ _inner_mac_str[i]=NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_MAC_LEN;
+ }
+
+ free(encap_type_str);
+ encap_type_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char*);
+
+ free(_encap_type_str);
+ _encap_type_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_link_id_num* sizeof(char*);
+
+ free(vpn_id_str);
+ vpn_id_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char*);
+
+ free(_vpn_id_str);
+ _vpn_id_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_link_id_num* sizeof(char*);
+
+ free(link_id_str);
+ link_id_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char*);
+
+ free(_link_id_str);
+ _link_id_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_link_id_num* sizeof(char*);
+
+ free(link_dir_str);
+ link_dir_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char*);
+
+ free(_link_dir_str);
+ _link_dir_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_link_id_num* sizeof(char*);
+
+ free(gdev_inner_mac_str);
+ gdev_inner_mac_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num* sizeof(char*);
+
+ free(_inner_mac_str);
+ _inner_mac_str = NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num* sizeof(char*);
+
}
extern "C" int mrl_init(void)
@@ -293,57 +563,95 @@ extern "C" int mrl_init(void)
void mrl_destroy_cfg()
{
- unsigned int i=0;
+ unsigned int i=0, j = 0;
+ for(i=0;i<mrl_instance.mrl_cfg.vxlan_link_id_num; i++)
+ {
+ free(mrl_instance.mrl_cfg.vxlan_encap_type[i]);
+ mrl_instance.mrl_cfg.vxlan_encap_type[i] = NULL;
+ global_stat.free_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ free(mrl_instance.mrl_cfg.vxlan_link_id[i]);
+ mrl_instance.mrl_cfg.vxlan_link_id[i] = NULL;
+ global_stat.free_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ free(mrl_instance.mrl_cfg.vxlan_link_dir[i]);
+ mrl_instance.mrl_cfg.vxlan_link_dir[i] = NULL;
+ global_stat.free_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
+ free(mrl_instance.mrl_cfg.vxlan_vpn_id[i]);
+ mrl_instance.mrl_cfg.vxlan_vpn_id[i] = NULL;
+ global_stat.free_memory += sizeof(int)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+
for(i = 0; i<mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_MAC_LEN;
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[i] =NULL;
+ global_stat.free_memory += sizeof(int)*MRL_STR_MAC_LEN;
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[i]);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[i] =NULL;
global_stat.free_memory += sizeof(char)*MRL_STR_IP_LEN;
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_port[i]);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_port[i] =NULL;
global_stat.free_memory += sizeof(char)*MRL_STR_PORT_LEN;
- free(mrl_instance.mrl_cfg.vxlan_encap_type[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_ENCAP_TYPE_LEN;
-
- free(mrl_instance.mrl_cfg.vxlan_link_id[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_LINK_ID_LEN;
+ for(j=0;j<mrl_instance.mrl_cfg.vxlan_link_id_num;j++)
+ {
+ free(mrl_instance.mrl_cfg.vxlan_inner_smac[i][j]);
+ mrl_instance.mrl_cfg.vxlan_inner_smac[i][j] = NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_PORT_LEN;
- free(mrl_instance.mrl_cfg.vxlan_link_dir[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_LINK_DIR_LEN;
-
+ free(mrl_instance.mrl_cfg.vxlan_inner_dmac[i][j]);
+ mrl_instance.mrl_cfg.vxlan_inner_dmac[i][j] = NULL;
+ global_stat.free_memory += sizeof(char)*MRL_STR_PORT_LEN;
+ }
free(mrl_instance.mrl_cfg.vxlan_inner_smac[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_MAC_LEN;
-
+ mrl_instance.mrl_cfg.vxlan_inner_smac[i] = NULL;
+ global_stat.free_memory += sizeof(char*)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+
free(mrl_instance.mrl_cfg.vxlan_inner_dmac[i]);
- global_stat.free_memory += sizeof(char)*MRL_STR_MAC_LEN;
- }
+ mrl_instance.mrl_cfg.vxlan_inner_dmac[i] = NULL;
+ global_stat.free_memory += sizeof(char*)*mrl_instance.mrl_cfg.vxlan_link_id_num;
+ }
+
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_mac);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_mac =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_ip);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_ip =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
free(mrl_instance.mrl_cfg.vxlan_outer_gdev_port);
+ mrl_instance.mrl_cfg.vxlan_outer_gdev_port =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
free(mrl_instance.mrl_cfg.vxlan_encap_type);
+ mrl_instance.mrl_cfg.vxlan_encap_type =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
free(mrl_instance.mrl_cfg.vxlan_link_id);
+ mrl_instance.mrl_cfg.vxlan_link_id =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
free(mrl_instance.mrl_cfg.vxlan_link_dir);
+ mrl_instance.mrl_cfg.vxlan_link_dir =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
- free(mrl_instance.mrl_cfg.vxlan_inner_smac);
+ free(mrl_instance.mrl_cfg.vxlan_vpn_id);
+ mrl_instance.mrl_cfg.vxlan_vpn_id =NULL;
global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ free(mrl_instance.mrl_cfg.vxlan_inner_smac);
+ mrl_instance.mrl_cfg.vxlan_inner_smac =NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char **);
+
free(mrl_instance.mrl_cfg.vxlan_inner_dmac);
- global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char *);
+ mrl_instance.mrl_cfg.vxlan_inner_dmac =NULL;
+ global_stat.free_memory += mrl_instance.mrl_cfg.vxlan_gdev_num * sizeof(char **);
}
@@ -418,7 +726,7 @@ extern "C" char mrl_udp_entry(struct streaminfo *a_udp, void **pme, int thread_
{
if(mrl_identify_nominee(a_udp))
{
- ret =APP_STATE_DROPME;
+ ret =APP_STATE_GIVEME;
}
else
{
diff --git a/src/mrl_packet.c b/src/mrl_packet.c
index 1d8a7dd..466107f 100644
--- a/src/mrl_packet.c
+++ b/src/mrl_packet.c
@@ -17,7 +17,6 @@
extern struct global_stat_t global_stat;
extern struct mrl_global_instance mrl_instance;
-extern void mrl_get_vxlan_info(struct mrl_vxlan_info *vxlan, unsigned int index);
void mrl_socket_init()
{
@@ -260,24 +259,6 @@ bool mrl_pkt_signature_identify(struct streaminfo *mystream)
dip = ntohl(mystream->addr.tuple4_v4->daddr);
inet_ntop(AF_INET,&(mystream->addr.tuple4_v4->saddr),temp_sip,MRL_STR_IP_LEN);
inet_ntop(AF_INET,&(mystream->addr.tuple4_v4->daddr),temp_dip,MRL_STR_IP_LEN);
- /*
- if(memcmp(temp_sip,"61.135.169.121",strlen(temp_sip)) == 0)
- {
- printf("cur stream sip is baidu\n");
- return true;
- }
- else
- {
- if(memcmp(temp_dip,"61.135.169.121",strlen(temp_dip)) == 0)
- {
- printf("cur stream dip is baidu\n");
- return true;
- }
- else
- {
- return false;
- }
- }*/
switch(mystream->type)
{
case STREAM_TYPE_TCP:
@@ -402,13 +383,30 @@ size_t mrl_build_udp_payload(char *payload)
memcpy(payload,content,payload_len);
return payload_len;
}
+
+void mrl_construct_vxlan_info(struct mrl_vxlan_info *vxlan_info, int gdev_index, int link_id_index)
+{
+
+ memcpy(vxlan_info->vxlan_outer_local_port, mrl_instance.mrl_cfg.xvlan_outer_local_port,strlen(mrl_instance.mrl_cfg.xvlan_outer_local_port));
+ memcpy(vxlan_info->vxlan_outer_gdev_port , mrl_instance.mrl_cfg.vxlan_outer_gdev_port[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_port[gdev_index]));
+ memcpy(vxlan_info->vxlan_outer_local_ip, mrl_instance.mrl_cfg.vxlan_outer_local_ip,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_ip));
+ memcpy(vxlan_info->vxlan_outer_gdev_ip, mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[gdev_index]));
+ memcpy(vxlan_info->vxlan_outer_local_mac, mrl_instance.mrl_cfg.vxlan_outer_local_mac,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_mac));
+ memcpy(vxlan_info->vxlan_outer_gdev_mac, mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[gdev_index]));
+ vxlan_info->vxlan_link_id = mrl_instance.mrl_cfg.vxlan_link_id[gdev_index][link_id_index];
+ vxlan_info->vxlan_encap_type = mrl_instance.mrl_cfg.vxlan_encap_type[gdev_index][link_id_index];
+ vxlan_info->vxlan_vpn_id= mrl_instance.mrl_cfg.vxlan_vpn_id[gdev_index][link_id_index];
+ vxlan_info->vxlan_link_dir = mrl_instance.mrl_cfg.vxlan_link_dir[gdev_index][link_id_index];
+ memcpy(vxlan_info->vxlan_inner_smac, mrl_instance.mrl_cfg.vxlan_inner_smac[gdev_index][link_id_index],strlen(mrl_instance.mrl_cfg.vxlan_inner_smac[gdev_index][link_id_index]));
+ memcpy(vxlan_info->vxlan_inner_dmac, mrl_instance.mrl_cfg.vxlan_inner_dmac[gdev_index][link_id_index], strlen(mrl_instance.mrl_cfg.vxlan_inner_dmac[gdev_index][link_id_index]));
+}
void mrl_detect_action(uint32_t src_ip)
{
char temp_ip[MRL_STR_IP_LEN];
memset(temp_ip,0,MRL_STR_IP_LEN);
inet_ntop(AF_INET, &src_ip,temp_ip, MRL_STR_IP_LEN);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_detect_action","detect ip is %s",temp_ip);
- unsigned int i = 0;
+ unsigned int i = 0, j =0;
int thread_seq = 0;
int temp_len = 0;
size_t udp_payload_len = 0;
@@ -425,11 +423,14 @@ void mrl_detect_action(uint32_t src_ip)
ip_len = mrl_build_ip_hdr(ip_pkt,src_ip,dest_ip,udp_len);
for(i = 0; i< mrl_instance.mrl_cfg.vxlan_gdev_num;i++)
{
- memset(&vxlan_info,0,sizeof(vxlan_info));
- mrl_get_vxlan_info(&vxlan_info,i);
- mrl_send_to_gdev(thread_seq,&vxlan_info,ip_pkt,ip_len);
- global_stat.send_detect_pkts ++;
- global_stat.send_gdev_total_pkts ++;
+ for(j = 0; j < mrl_instance.mrl_cfg.vxlan_link_id_num; j ++)
+ {
+ memset(&vxlan_info,0,sizeof(vxlan_info));
+ mrl_construct_vxlan_info(&vxlan_info,i,j);
+ mrl_send_to_gdev(thread_seq,&vxlan_info,ip_pkt,ip_len);
+ global_stat.send_detect_pkts ++;
+ global_stat.send_gdev_total_pkts ++;
+ }
}
}
diff --git a/src/mrl_redis.c b/src/mrl_redis.c
index 966c94a..7de9db1 100644
--- a/src/mrl_redis.c
+++ b/src/mrl_redis.c
@@ -112,77 +112,25 @@ int Maat_plugin_table(Maat_feather_t feather,const char* table_name, Maat_start_
}
return ret;
}
-
-
-Maat_feather_t mrl_Maat_feather_init()
-{
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_Maat_feather_init","start init Maat feather!");
- Maat_feather_t feather;
- const char *nominee_instance = "mrl_nominee";
- const char *candidate_instance = "mrl_candidate";
- // init Maat
- feather = Maat_feather(mrl_instance.mrl_cfg.Maat_max_threads, mrl_instance.mrl_cfg.Maat_table_path, mrl_instance.mrl_log_handle);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, nominee_instance, strlen(nominee_instance)+1);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, candidate_instance, strlen(candidate_instance)+1);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_REDIS_IP, mrl_instance.mrl_cfg.Maat_redis_ip, strlen(mrl_instance.mrl_cfg.Maat_redis_ip)+1);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_REDIS_PORT, &(mrl_instance.mrl_cfg.Maat_redis_port), sizeof(mrl_instance.mrl_cfg.Maat_redis_port));
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_STAT_FILE_PATH, mrl_instance.mrl_cfg.Maat_stat_path, strlen(mrl_instance.mrl_cfg.Maat_stat_path)+1);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_STAT_ON, NULL, 0);
- wrapped_Maat_set_feather_opt(feather, MAAT_OPT_PERF_ON, NULL, 0);
- int ret = Maat_initiate_feather(feather);
- if(ret< 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"Maat_init","Maat_initiate_feather func error!");
- assert(0);
- }
- Maat_plugin_table(feather,IR_NOMINEE_IP_TABLE_NAME,NULL,nominee_update_cb,NULL,NULL);
- return feather;
-}
-
-int mrl_get_candidate_location(const char *ip_addr)
-{
- const char *mycountry="China";
- int location = 0;
- location = mrl_search_ip_country(mrl_instance.mrl_mmdb, ip_addr, mycountry);
- if(location < 0)
- {
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_get_candidate_location","cur ip addr %s not exist in mmdb",ip_addr);
- return 0;
- }
- return location;
-}
-void mrl_create_candidate_item(struct mrl_candidate_item *candidate_item, struct mrl_nominee_item *nominee_item)
-{
- candidate_item->config_id = nominee_item->config_id;
- candidate_item->group_id = nominee_item->group_id;
- candidate_item->addr_type = MRL_IPV4_TYPE ;
- memcpy(candidate_item->ip_addr,nominee_item->ip_addr,strlen(nominee_item->ip_addr));
- //to do how to get ip location
- candidate_item->location = mrl_get_candidate_location(candidate_item->ip_addr);
- memcpy(candidate_item->mrl_ip, mrl_instance.mrl_cfg.mrl_ip,strlen(mrl_instance.mrl_cfg.mrl_ip));
- candidate_item->is_vaild = 1;
- get_cur_time(candidate_item->op_time);
-}
-
-void nominee_update_cb(int table_id,const char* table_line,void* u_para)
+void nominee_update_cb(int table_id,const char *table_line,void *u_para)
{
int ret = 0;
struct mrl_nominee_item *nominee_item = (struct mrl_nominee_item *)calloc(1, sizeof(struct mrl_nominee_item));
global_stat.malloc_memory += sizeof(struct mrl_nominee_item);
- sscanf(table_line,"%d\t%d\t%d\t%s\t%d\t%s",
- &(nominee_item->config_id), &(nominee_item->group_id), &(nominee_item->addr_type),
- nominee_item->ip_addr, &(nominee_item->is_vaild), nominee_item->op_time);
+ sscanf(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);
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"nominee_update_cb","get nominee item:"
- "config_id:%d,group_id:%d,addr_type:%d,ip_addr:%s,is_vaild:%d,op_time:%s",
- nominee_item->config_id, nominee_item->group_id,nominee_item->addr_type,
- nominee_item->ip_addr, nominee_item->is_vaild,nominee_item->op_time);
+ "config_id:%d,group_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);
struct mrl_ht_nominee_key nominee_key;
memset(&nominee_key,0,sizeof(struct mrl_ht_nominee_key));
inet_pton(AF_INET,nominee_item->ip_addr,&(nominee_key.sip));
inet_pton(AF_INET,mrl_instance.mrl_cfg.dest_ip,&(nominee_key.dip));
nominee_key.sport=htons(mrl_instance.mrl_cfg.local_port);
nominee_key.dport=htons(mrl_instance.mrl_cfg.dest_port);
- switch(nominee_item->is_vaild)
+ switch(nominee_item->is_valid)
{
case 0:
if(MESA_htable_search_cb(mrl_instance.ht_nominee, (const unsigned char *)&nominee_key, sizeof(nominee_key),NULL,NULL,NULL) != NULL)
@@ -231,6 +179,68 @@ void nominee_update_cb(int table_id,const char* table_line,void* u_para)
}
+void dnat_policy_update_cb(int table_id, const char *table_line, void *u_para)
+{
+
+}
+
+Maat_feather_t mrl_Maat_feather_init()
+{
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"mrl_Maat_feather_init","start init Maat feather!");
+ Maat_feather_t feather;
+ const char *nominee_instance = "mrl_nominee";
+ const char *candidate_instance = "mrl_candidate";
+ const char *dnat_policy_instance ="mrl_dnat_policy";
+ // init Maat
+ feather = Maat_feather(mrl_instance.mrl_cfg.Maat_max_threads, mrl_instance.mrl_cfg.Maat_table_path, mrl_instance.mrl_log_handle);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, nominee_instance, strlen(nominee_instance)+1);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, candidate_instance, strlen(candidate_instance)+1);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_INSTANCE_NAME, dnat_policy_instance, strlen(dnat_policy_instance)+1);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_REDIS_IP, mrl_instance.mrl_cfg.Maat_redis_ip, strlen(mrl_instance.mrl_cfg.Maat_redis_ip)+1);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_REDIS_PORT, &(mrl_instance.mrl_cfg.Maat_redis_port), sizeof(mrl_instance.mrl_cfg.Maat_redis_port));
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_STAT_FILE_PATH, mrl_instance.mrl_cfg.Maat_stat_path, strlen(mrl_instance.mrl_cfg.Maat_stat_path)+1);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_STAT_ON, NULL, 0);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_PERF_ON, NULL, 0);
+ printf("redis index is %d\n",mrl_instance.mrl_cfg.redis_index);
+ wrapped_Maat_set_feather_opt(feather, MAAT_OPT_REDIS_INDEX,&(mrl_instance.mrl_cfg.redis_index), sizeof(mrl_instance.mrl_cfg.redis_index));
+ int ret = Maat_initiate_feather(feather);
+ if(ret< 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"Maat_init","Maat_initiate_feather func error!");
+ assert(0);
+ }
+ Maat_plugin_table(feather,IR_NOMINEE_IP_TABLE_NAME,NULL,nominee_update_cb,NULL,NULL);
+ //Maat_plugin_table(feather,IR_DNAT_POLICY_TABLE_NAME,NULL,dnat_policy_update_cb,NULL,NULL);
+ return feather;
+}
+
+int mrl_get_candidate_location(const char *ip_addr)
+{
+ const char *mycountry="China";
+ int location = 0;
+ location = mrl_search_ip_country(mrl_instance.mrl_mmdb, ip_addr, mycountry);
+ if(location < 0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_get_candidate_location","cur ip addr %s not exist in mmdb",ip_addr);
+ return 0;
+ }
+ return location;
+}
+void mrl_create_candidate_item(struct mrl_candidate_item *candidate_item, struct mrl_nominee_item *nominee_item)
+{
+ candidate_item->config_id = nominee_item->config_id;
+ candidate_item->addr_pool_id= nominee_item->addr_pool_id;
+ candidate_item->addr_type = MRL_IPV4_TYPE ;
+ memcpy(candidate_item->ip_addr,nominee_item->ip_addr,strlen(nominee_item->ip_addr));
+ candidate_item->location = mrl_get_candidate_location(candidate_item->ip_addr);
+ memcpy(candidate_item->mrl_ip, mrl_instance.mrl_cfg.mrl_ip,strlen(mrl_instance.mrl_cfg.mrl_ip));
+ candidate_item->is_valid = 1;
+ memcpy(candidate_item->effective_range, nominee_item->effective_range, strlen(nominee_item->effective_range));
+ get_cur_time(candidate_item->op_time);
+}
+
+
+
long ht_search_cb(void *data, const uchar *key, uint size, void *user_arg)
{
struct mrl_nominee_item *nominee_item = (struct mrl_nominee_item *)data;
@@ -243,21 +253,45 @@ long ht_search_cb(void *data, const uchar *key, uint size, void *user_arg)
return 1;
}
+int mrl_get_link_id_index(int gdev_index, int link_id)
+{
+ int position = -1;
+ unsigned int i = 0;
+ for(;i < mrl_instance.mrl_cfg.vxlan_link_id_num;i++)
+ {
+ if(mrl_instance.mrl_cfg.vxlan_link_id[gdev_index][i] == link_id)
+ {
+ position = i;
+ break;
+ }
+ }
+ return position;
+}
-void mrl_get_vxlan_info(struct mrl_vxlan_info *vxlan, unsigned int index)
+void mrl_get_vxlan_info(struct streaminfo *mystream, struct mrl_vxlan_info *vxlan_info, unsigned int gdev_index)
{
- memcpy(vxlan->vxlan_inner_smac, mrl_instance.mrl_cfg.vxlan_inner_smac[index],strlen(mrl_instance.mrl_cfg.vxlan_inner_smac[index]));
- memcpy(vxlan->vxlan_inner_dmac, mrl_instance.mrl_cfg.vxlan_inner_dmac[index], strlen(mrl_instance.mrl_cfg.vxlan_inner_dmac[index]));
- vxlan->vxlan_encap_type = atoi(mrl_instance.mrl_cfg.vxlan_encap_type[index]);
- vxlan->vxlan_vpn_id= atoi(mrl_instance.mrl_cfg.vxlan_vpn_id[index]);
- vxlan->vxlan_link_id = atoi(mrl_instance.mrl_cfg.vxlan_link_id[index]);
- vxlan->vxlan_link_dir = atoi(mrl_instance.mrl_cfg.vxlan_link_dir[index]);
- memcpy(vxlan->vxlan_outer_local_port, mrl_instance.mrl_cfg.xvlan_outer_local_port,strlen(mrl_instance.mrl_cfg.xvlan_outer_local_port));
- memcpy(vxlan->vxlan_outer_gdev_port , mrl_instance.mrl_cfg.vxlan_outer_gdev_port[index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_port[index]));
- memcpy(vxlan->vxlan_outer_local_ip, mrl_instance.mrl_cfg.vxlan_outer_local_ip,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_ip));
- memcpy(vxlan->vxlan_outer_gdev_ip, mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[index]));
- memcpy(vxlan->vxlan_outer_local_mac, mrl_instance.mrl_cfg.vxlan_outer_local_mac,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_mac));
- memcpy(vxlan->vxlan_outer_gdev_mac, mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[index]));
+ int link_id = 0;
+ memcpy(vxlan_info->vxlan_outer_local_port, mrl_instance.mrl_cfg.xvlan_outer_local_port,strlen(mrl_instance.mrl_cfg.xvlan_outer_local_port));
+ memcpy(vxlan_info->vxlan_outer_gdev_port , mrl_instance.mrl_cfg.vxlan_outer_gdev_port[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_port[gdev_index]));
+ memcpy(vxlan_info->vxlan_outer_local_ip, mrl_instance.mrl_cfg.vxlan_outer_local_ip,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_ip));
+ memcpy(vxlan_info->vxlan_outer_gdev_ip, mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_ip[gdev_index]));
+ memcpy(vxlan_info->vxlan_outer_local_mac, mrl_instance.mrl_cfg.vxlan_outer_local_mac,strlen(mrl_instance.mrl_cfg.vxlan_outer_local_mac));
+ memcpy(vxlan_info->vxlan_outer_gdev_mac, mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[gdev_index],strlen(mrl_instance.mrl_cfg.vxlan_outer_gdev_mac[gdev_index]));
+ get_rawpkt_opt_from_streaminfo(mystream, RAW_PKT_GET_VXLAN_ID, &link_id);
+ vxlan_info->vxlan_link_id = ntohl(link_id);
+ printf("cur link id is %d\n",vxlan_info->vxlan_link_id);
+ int position = mrl_get_link_id_index(gdev_index, vxlan_info->vxlan_link_id);
+ if(position <0)
+ {
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_FATAL,"mrl_get_vxlan_info","mrl_get_link_id_index error,link id is %d,gdev index is %d,position is %d",vxlan_info->vxlan_link_id,gdev_index,position);
+ assert(0);
+ }
+
+ vxlan_info->vxlan_encap_type = mrl_instance.mrl_cfg.vxlan_encap_type[gdev_index][position];
+ vxlan_info->vxlan_vpn_id= mrl_instance.mrl_cfg.vxlan_vpn_id[gdev_index][position];
+ vxlan_info->vxlan_link_dir = mrl_instance.mrl_cfg.vxlan_link_dir[gdev_index][position];
+ memcpy(vxlan_info->vxlan_inner_smac, mrl_instance.mrl_cfg.vxlan_inner_smac[gdev_index][position],strlen(mrl_instance.mrl_cfg.vxlan_inner_smac[gdev_index][position]));
+ memcpy(vxlan_info->vxlan_inner_dmac, mrl_instance.mrl_cfg.vxlan_inner_dmac[gdev_index][position], strlen(mrl_instance.mrl_cfg.vxlan_inner_dmac[gdev_index][position]));
}
@@ -272,8 +306,8 @@ void Maat_set_cmd_line(Maat_feather_t feather, struct mrl_candidate_item *candid
line_rule.label_id=0;
line_rule.rule_id=candidate_item->config_id;
line_rule.table_name=IR_CANDIDATE_IP_TABLE_NAME;
- snprintf(table_line,sizeof(table_line),"%d\t%d\t%d\t%s\t%d\t%s\t%d\t%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s",
- candidate_item->config_id, candidate_item->group_id,candidate_item->addr_type,
+ snprintf(table_line,sizeof(table_line),"%d\t%d\t%d\t%s\t%d\t%s\t%d\t%d\t%d\t%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%d\t%s\t%s",
+ candidate_item->config_id, candidate_item->addr_pool_id,candidate_item->addr_type,
candidate_item->ip_addr,candidate_item->location, candidate_item->mrl_ip,
candidate_item->vxlan_info.vxlan_link_id,candidate_item->vxlan_info.vxlan_encap_type,
candidate_item->vxlan_info.vxlan_link_dir,candidate_item->vxlan_info.vxlan_vpn_id,
@@ -281,7 +315,7 @@ void Maat_set_cmd_line(Maat_feather_t feather, struct mrl_candidate_item *candid
candidate_item->vxlan_info.vxlan_outer_local_ip,candidate_item->vxlan_info.vxlan_outer_gdev_ip,
candidate_item->vxlan_info.vxlan_outer_local_mac,candidate_item->vxlan_info.vxlan_outer_gdev_mac,
candidate_item->vxlan_info.vxlan_inner_smac,candidate_item->vxlan_info.vxlan_inner_dmac,
- candidate_item->is_vaild, candidate_item->op_time);
+ candidate_item->is_valid, candidate_item->effective_range, candidate_item->op_time);
line_rule.table_line=table_line;
line_rule.expire_after=0;
p_line = &line_rule;
@@ -293,8 +327,8 @@ void Maat_set_cmd_line(Maat_feather_t feather, struct mrl_candidate_item *candid
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"Maat_set_cmd_line","maat set candidate item:"
"config_id:%d,group_id:%d,addr_type:%d,ip_addr:%s,location:%d,mrl_ip:%s,link_id:%d,encap_type:%d,"
"link_dir:%d,vpn_id:%d,local_port:%s,gdev_port:%s, local_ip:%s,gdev_ip:%s,local_mac:%s, gdev_mac:%s,"
- "inner_smac:%s, inner_dmac:%s,is_vaild:%d,op_time:%s",
- candidate_item->config_id, candidate_item->group_id,candidate_item->addr_type, candidate_item->ip_addr,
+ "inner_smac:%s, inner_dmac:%s,is_valid:%d,effective_range:%s,op_time:%s",
+ candidate_item->config_id, candidate_item->addr_pool_id,candidate_item->addr_type, candidate_item->ip_addr,
candidate_item->location, candidate_item->mrl_ip,candidate_item->vxlan_info.vxlan_link_id,
candidate_item->vxlan_info.vxlan_encap_type, candidate_item->vxlan_info.vxlan_link_dir,
candidate_item->vxlan_info.vxlan_vpn_id,
@@ -302,7 +336,7 @@ void Maat_set_cmd_line(Maat_feather_t feather, struct mrl_candidate_item *candid
candidate_item->vxlan_info.vxlan_outer_local_ip,candidate_item->vxlan_info.vxlan_outer_gdev_ip,
candidate_item->vxlan_info.vxlan_outer_local_mac,candidate_item->vxlan_info.vxlan_outer_gdev_mac,
candidate_item->vxlan_info.vxlan_inner_smac, candidate_item->vxlan_info.vxlan_inner_dmac,
- candidate_item->is_vaild,candidate_item->op_time);
+ candidate_item->is_valid,candidate_item->effective_range,candidate_item->op_time);
return;
}
@@ -346,7 +380,7 @@ bool mrl_identify_nominee(struct streaminfo *mystream)
get_rawpkt_opt_from_streaminfo(mystream, RAW_PKT_GET_GDEV_IP, &(gdev_ip));
index = get_gdev_ip_index(gdev_ip);
assert(index < mrl_instance.mrl_cfg.vxlan_gdev_num);//������ھ�˵�������ݰ���GDEV��������̽���GDEV�У�����
- mrl_get_vxlan_info(&(candidate_item.vxlan_info),index);
+ mrl_get_vxlan_info(mystream, &(candidate_item.vxlan_info),index);
Maat_set_cmd_line(mrl_instance.mrl_feather,&candidate_item);
return true;
}
@@ -356,26 +390,3 @@ bool mrl_identify_nominee(struct streaminfo *mystream)
}
}
-void Maat_set_nominee_cmd_line(Maat_feather_t feather, struct mrl_nominee_item *nominee_item)
-{
- printf("start to insert %s to nominee table\n",nominee_item->ip_addr);
- const struct Maat_line_t *p_line;
- 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",
- nominee_item->config_id, nominee_item->group_id,nominee_item->addr_type,
- nominee_item->ip_addr,nominee_item->is_vaild, nominee_item->op_time);
- line_rule.table_line=table_line;
- line_rule.expire_after=0;
- p_line = &line_rule;
- ret=Maat_cmd_set_lines(feather, &p_line, 1, MAAT_OP_ADD);
- assert(ret>0);
- return;
-}
-