aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovico Cavedon <ludovico.cavedon@gmail.com>2019-01-16 01:15:43 -0800
committerLudovico Cavedon <ludovico.cavedon@gmail.com>2019-01-16 01:15:43 -0800
commit2c672a4ea2a79fc1dad555c55a59b807fdfdd65b (patch)
tree3353a2e68b1878af2eaccdfc2d8d7bd5ab64e64e
parent0cb4bae27503d2fa6e9e2efd1944049338d7c3c4 (diff)
Compute packet_direction consistently independently from endianness
Ensure packet_direction is computed in the same way on little endian and big endian architectures. This change will convert IP addresses and port from little endian to host endian (instead of converting from network endian to host endian) so that it does not change the behavior on little endian architecture where ndpi is usually developed. A better (but more invasive) change would be to use the ntoh*() functions and then adjust all affected tests.
-rw-r--r--src/lib/ndpi_main.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 863943c4a..ac8543648 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -3693,7 +3693,7 @@ void ndpi_connection_tracking(struct ndpi_detection_module_struct *ndpi_struct,
if(ndpi_struct->direction_detect_disable) {
packet->packet_direction = flow->packet_direction;
} else {
- if(iph != NULL && iph->saddr < iph->daddr)
+ if(iph != NULL && le32toh(iph->saddr) < le32toh(iph->daddr))
packet->packet_direction = 1;
#ifdef NDPI_DETECTION_SUPPORT_IPV6
@@ -3717,7 +3717,7 @@ void ndpi_connection_tracking(struct ndpi_detection_module_struct *ndpi_struct,
packet->num_retried_bytes = 0;
if(!ndpi_struct->direction_detect_disable)
- packet->packet_direction = (tcph->source < tcph->dest) ? 1 : 0;
+ packet->packet_direction = (le16toh(tcph->source) < le16toh(tcph->dest)) ? 1 : 0;
if(tcph->syn != 0 && tcph->ack == 0 && flow->l4.tcp.seen_syn == 0 && flow->l4.tcp.seen_syn_ack == 0
&& flow->l4.tcp.seen_ack == 0) {
@@ -3781,7 +3781,7 @@ void ndpi_connection_tracking(struct ndpi_detection_module_struct *ndpi_struct,
}
} else if(udph != NULL) {
if(!ndpi_struct->direction_detect_disable)
- packet->packet_direction = (udph->source < udph->dest) ? 1 : 0;
+ packet->packet_direction = (le16toh(udph->source) < le16toh(udph->dest)) ? 1 : 0;
}
if(flow->packet_counter < MAX_PACKET_COUNTER && packet->payload_packet_len) {