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 /src/mrl_io.cpp | |
| parent | a5495b25b06223bf1b78eb7886c61042416a6c5c (diff) | |
修改无法支持dnat_policy中IP相同端口不同的策略问题v2.0.1
Diffstat (limited to 'src/mrl_io.cpp')
| -rw-r--r-- | src/mrl_io.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
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))
|
