diff options
author | Bjørn Mork <bjorn@mork.no> | 2015-06-23 14:17:10 +0200 |
---|---|---|
committer | Bjørn Mork <bjorn@mork.no> | 2015-06-23 14:17:10 +0200 |
commit | 8c746b3a2bfb67addbfa4d3d4b7c0dbc2e8ba985 (patch) | |
tree | a75585d0e66fc2b54d2fb2e38241eee7d248885b /eperd/traceroute.c | |
parent | 13762fce1926efb6b553bf20df256ccf6586f518 (diff) |
ripe-atlas-fw: imported version 46804680
Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'eperd/traceroute.c')
-rw-r--r-- | eperd/traceroute.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/eperd/traceroute.c b/eperd/traceroute.c index 06f6ac1..fbeb025 100644 --- a/eperd/traceroute.c +++ b/eperd/traceroute.c @@ -1021,7 +1021,8 @@ static void send_pkt(struct trtstate *state) icmp_hdr->icmp_type= ICMP_ECHO; icmp_hdr->icmp_code= 0; icmp_hdr->icmp_cksum= 0; - icmp_hdr->icmp_id= htons(state->index); + icmp_hdr->icmp_id= htons(state->index | + (instance_id << TRT_ICMP4_INSTANCE_ID_SHIFT)); icmp_hdr->icmp_seq= htons(state->seq); icmp_hdr->icmp_data[0]= '\0'; icmp_hdr->icmp_data[1]= '\0'; @@ -1857,6 +1858,12 @@ printf("curpacksize: %d\n", state->curpacksize); } ind= ntohs(eicmp->icmp_id); + if ((ind >> TRT_ICMP4_INSTANCE_ID_SHIFT) != instance_id) + { + printf("wrong instance id\n"); + return; + } + ind &= ~TRT_ICMP4_INSTANCE_ID_MASK; if (ind >= base->tabsiz) { @@ -2134,6 +2141,12 @@ printf("%s, %d: sin6_family = %d\n", __FILE__, __LINE__, state->sin6.sin6_family } ind= ntohs(icmp->icmp_id); + if ((ind >> TRT_ICMP4_INSTANCE_ID_SHIFT) != instance_id) + { + printf("wrong instance id\n"); + return; + } + ind &= ~TRT_ICMP4_INSTANCE_ID_MASK; if (ind >= base->tabsiz) { |