diff options
Diffstat (limited to 'src/mrl_io.cpp')
| -rw-r--r-- | src/mrl_io.cpp | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/mrl_io.cpp b/src/mrl_io.cpp index 5009f3a..c14ac3e 100644 --- a/src/mrl_io.cpp +++ b/src/mrl_io.cpp @@ -216,7 +216,7 @@ size_t mrl_build_udp_hdr(char *udp_pkt,size_t payload_len) {
struct udphdr *udp_hdr = (struct udphdr *)udp_pkt;
udp_hdr->source = htons(mrl_instance.mrl_cfg.local_port);
- udp_hdr->dest = htons(mrl_instance.mrl_cfg.dest_port);
+ udp_hdr->dest = htons(mrl_instance.mrl_cfg.detect_port);
udp_hdr->len = htons(payload_len + MRL_UDP_HDR_LEN);
udp_hdr->check = 0;
return payload_len + MRL_UDP_HDR_LEN;
@@ -323,6 +323,7 @@ void ht_link_identity_iterate_cb(const uchar* key, uint size, void* data, void* size_t ip_len = 0;
int thread_seq = 0;
int temp_len = 0;
+ int is_inside = -1;
char ip_pkt[MRL_IP_PKT_LEN];
memset(ip_pkt,0,MRL_IP_PKT_LEN);
uint64_t* identity_value = (uint64_t* )data;
@@ -333,14 +334,47 @@ void ht_link_identity_iterate_cb(const uchar* key, uint size, void* data, void* udp_payload_len = mrl_build_udp_payload(ip_pkt +MRL_UDP_HDR_LEN + MRL_IP_HDR_LEN,link_identity,mydata->nominee_type);
udp_len = mrl_build_udp_hdr(ip_pkt + MRL_IP_HDR_LEN, udp_payload_len);
inet_pton(AF_INET,mydata->detect_ip,&sip);
- inet_pton(AF_INET,mrl_instance.mrl_cfg.dest_ip,&dip);
+ if(mrl_instance.mrl_cfg.ip_location_enable)
+ {
+ is_inside =mrl_is_inside_ip(mydata->detect_ip);
+ if(is_inside)
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.outside_detect_ip,&dip);
+ }
+ else
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.inside_detect_ip,&dip);
+ }
+ }
+ else
+ {
+ inet_pton(AF_INET,mrl_instance.mrl_cfg.outside_detect_ip,&dip);
+ }
ip_len = mrl_build_ip_hdr(ip_pkt,sip,dip,udp_len);
sapp_get_platform_opt(SPO_INDEPENDENT_THREAD_ID, &thread_seq, &temp_len);
mrl_send_to_gdev(thread_seq,link_identity,ip_pkt,ip_len);
- MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
- "cur detect ip %s detect info[nominee_type:%d,link_identity:%lu]",
- mydata->detect_ip,mydata->nominee_type,link_identity);
- global_stat.send_detect_pkts ++;
+ global_stat.send_detect_pkts ++;
+ switch(is_inside)
+ {
+ case MRL_CLOSED_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur ip location function is closed,cur detect ip is :%s detect dest ip is: %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.outside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ case MRL_INSIDE_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur detect ip %s is inside ip,detect dest ip is %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.outside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ case MRL_OUTSIDE_LOCATION:
+ MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"ht_link_identity_iterate_cb",
+ "cur detect ip %s is outside ip,detect dest ip is %s,detect payload info is [nominee_type:%d,link_identity:%lu]",
+ mydata->detect_ip,mrl_instance.mrl_cfg.inside_detect_ip,mydata->nominee_type,link_identity);
+ break;
+ default:
+ assert(0);
+ break;
+ }
}
}
@@ -350,8 +384,7 @@ long ht_dnat_policy_search_cb(void *data, const uchar *key, uint size, void *use struct mrl_dnat_policy* dnat_policy = (struct mrl_dnat_policy* )data;
struct mrl_dnat_policy* user_dnat_policy = (struct mrl_dnat_policy* )user_arg;
- if(dnat_policy != NULL)//�û��������ö˿ڣ�
- {
+ if(dnat_policy != NULL)
MESA_handle_runtime_log(mrl_instance.mrl_log_handle, RLOG_LV_DEBUG,"dnat_policy_update_cb","get ht_dnat_policy value:"
"[config_id:%d,original_addr_type:%d,original_dest_ip:%s,original_dest_port:%s,original_protocol:%s,translated_dest_ip:%s,"
"translated_dest_port:%s,do_log:%d,action:%d,addr_type:%d,service:%d,is_valid:%d,effective_range:%s,op_time:%s]",
|
