-
Notifications
You must be signed in to change notification settings - Fork 4
/
ChangeLog
684 lines (444 loc) · 26.1 KB
/
ChangeLog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
2024-09-05 Luca Sani <[email protected]> - 0.1.17
* Fix IPv6
Fix IPv6 not working for all modes. This was caused by changes done to support MacOS.
2024-07-01 Luca Sani <[email protected]> - 0.1.16
* Icmp Bugfixes
Minor fixes mostly related to ICMP, filtered inbound ICMP packets
(e.g. do not accept echo requests), do not proceed in case of expired probes,
speedup of QUIC mtudisc (do not honor RETRY packets) and allow DSCP to be specified
without ECN
2024-03-22 Alessandro Improta <[email protected]> - 0.1.14
Luca Sani <[email protected]> - 0.1.14
* MacOS support (partial)
Introduced the possibility to run on MacOS platform, for the moment with
the limitation that TCP and TCP InSession modes are not yet supported, and
Path MTU discovery is not available for any mode.
2024-03-19 Luca Sani <[email protected]> - 0.1.13
* Minor fixes
Fixed issue while running path MTU on TCP InSession, introduced check on boundaries
for the integer options of the tool and added missing info on TCP InSession output in the manual.
2024-03-15 Luca Sani <[email protected]> - 0.1.12
* Fix Simultaneous probe reset after MTU discovery
After MTU discovery found the bottleneck hop, the number of simultaneous
probes is reset to the value given input. In addition to that, we fixed
also a condition for which the Max Hops given in input were not respected
when doing MTU discovery.
2024-03-15 Alessandro Improta <[email protected]> - 0.1.11
* Show MSS sent by destination
Traceroute TCP and TCP InSession now show the content of MSS shared by the
destination when then option mss is set.
We added to the TCP InSession output an additional header showing the RTT,
the flags (lower letters, only if option info has been set), the MSS value
(only if option mss has been set) and the SACK capability (only if option
sack has been set).
We also added the same support to TCP.
2024-03-11 Luca Sani <[email protected]> - 0.1.10
* Fix LooseMatch mode on IPv6
Fix segfault always happening in LooseMatch mode on IPv6.
2024-02-26 Luca Sani <[email protected]> - 0.1.9
* Fix "Classic ECN" check over IPv6
Classic ECN check over IPv6 failed because IP_TOS was used to reset the
ToS of extra pings to zero, while IPV6_TCLASS is needed.
2024-02-23 Alessandro Improta Alessandro Improta <[email protected]> - 0.1.8
* TCP InSession bug fix
Fixed a bug happening whenever the destination did not reply to TCP
InSession with TIMESTAMP option set.
2023-12-13 Luca Sani <[email protected]> - 0.1.7
* Fix/corroborate help and manpage
2023-11-24 Luca Sani <[email protected]> - 0.1.6
* Bugfix on PMTU with QUIC and TcpInSession with PMTU not reaching destination
2023-11-16 Luca Sani <[email protected]> - 0.1.5
* Introduce ECN and AccECN check at TCP level
Added the possibility to check ECN and AccECN support of a target host
when running in TCP mode.
2023-11-06 Luca Sani <[email protected]> - 0.1.4
* Introduce "loose match" mode
Added the capability to run in "Loose Match" mode, whereby traceroute
receives on an ICMP raw socket all ICMP packets and filters the ones
needed. The "loose match" applies in the sense that the source IP
address of the encapsulated probe (i.e. the offending probe)
is not checked, thus allowing traceroute to run in environments like
Azure. Please see the manual for considerations about this behavior.
2023-11-02 Luca Sani <[email protected]> - 0.1.3
* Introduce QUIC module
We introduced the QUIC module to perform QUIC traceroute via the --quic
option. This requires openssl3 library to be present on the system.
If the destination replies with a QUIC packet, its type will be included
into the output in order to distinguish an ICMP error returned by the
destination (typically port unreachable).
2023-10-26 Luca Sani <[email protected]> - 0.1.2
* Introduce Overall Timeout
We introduced a global starting timeout for the tool to have an hard limit
about the duration of the traceroute. The overall timeout is by default 0
(unlimited) and can be changed via the -Q (or --timeout) option.
To recognize whether a traceroute was terminated due to the reach of the
overall timeout, an additional trailing output in the form
`Timedout: true/false` has been introduced.
* Alpine support
Alpine 3.15 binary available.
* Max Consecutive Hop Failures
Introduced the possibility to stop traceroute after a maximum number of
hop failures is reached. By default this value is set to max_hops (30)
but it can be changed via the -h (--failures) option.
* Reuse UDP ports
When running in UDP mode the destination port is incremented for each probe
sent starting by default from port 33434. Several firewalls have been found
to filter packets having an UDP destination port greater than 33534,
so they assume a maximum of 90 probes can be received for the same
destination IP. With this version of traceroute, if the user does not provide
any destination UDP port, the port used will wrap-up and restart from 33434
after reaching port 33534. UDP source ports will still be decided by the OS
via the bind syscall.
2023-09-18 Alessandro Improta Alessandro Improta <[email protected]> - 0.1.1
* Introduced multithreading in printing traceroute results
Classic traceroute prints results in a single thread fashion. The very same
thread has to mark the timing of arrival of probes and reverse resolve the
IP address to a name, if the feature is not disabled by the dedicated option.
The DNS resolution can take a while in some cases, thus affecting the goodness
of the results of probes in traceroute.
To avoid this issue we introduced a second thread in the tool totally
dedicated to printing probes and DNS reverse resolving the IP addresses, while
the probe arrival times are taken on the main thread
2023-08-21 Luca Sani <[email protected]> - 0.0.5
* Fixed privilege requirements and closing sockets once used
The introduction of ToS packet analysis requires the usage of raw socket
and - consequently - requires superuser privileges. The last change on
ToS was however requiring superuser privileges even if ToS was not
required. This has now been fixed.
It was also fixed a problem with regular code that was not closing the
sockets once used
2023-08-01 Luca Sani <[email protected]> - 0.0.4
* Added dockerfiles to build binaries
Added simple dockerfiles to compile binaries for centos7, debian11 and
ubuntu22. To run the build use the "build.sh" script into the
dockerfiles folder. Binaries will be put into the binaries/ folder.
2023-07-26 Luca Sani <[email protected]> - 0.0.3
* Enhanced Path MTU discovery
Traceroute can be launched with --mtu to perform the traceroute
measurement with a large packet (initially set to 65000) which is
firstly narrowed down by the network interface of the local machine,
then by the network itself.
Whenever a bottleneck is found, traceroute will cut the size of the
packet sent to the MTU value indicated by the network, and the
measurement will continue to run regularly.
There are a couple of problems with this approach:
- It does not work in TCP mode. Whenever traceroute is launched with -T
and --mtu, traceroute will ignore --mtu and sends SYN packets without
any TCP payload, thus not allowing the tool to discover any bottleneck
in the path.
- Even if we made that work, the destination is likely to drop packets
because TCP SYN probes with a size larger than the TCP header are seen
as malicious. That would cause the whole traceroute to not reach
destination.
- It is slow and expensive. The regular way to proceed with that is to
limit the number of simultaneous probes to 1, and send large packets
that will be narrowed along the path.
To solve that, we changed the way --mtu works inside of traceroute.
We introduced an initial step performed only when option --mtu is set
which consist in inferring the path MTU between source and destination.
As in regular traceroute, we start with packet size 65000, which will
be narrowed down by the interface and, eventually, by any bottleneck in
the path by ICMP/ICMPv6 returning messages.
If our probe times out, we assume that no further bottleneck are present
in the network, but the final path MTU discovered is potentially
overestimated.
With this initial phase, we are going to be able to infer the path MTU.
We only need to understand which hop is introducing the bottleneck.
To achieve that, we perform traceroute with 1 single large probe to
destination as in regular traceroute. Every time we notice that a
bottleneck is found (using the same logic in original traceroute), we
check if we found the bottleneck that caused the path MTU to be narrowed
down. If that's the case, we know there won't be any further bottleneck
in the path, and we can proceed sending small simultaneous packets to
destination, as in regular traceroute mode (without --mtu).
2023-06-28 Alessandro Improta <[email protected]> - 0.0.2
* Introduced enhanced TOS field report
Original traceroute allows to set ToS field in outgoing packets, but
currently does not allow to read the ToS field of the expiring probe
which is contained in the IP header inside the ICMP payload.
This can be done by reading returning ICMP packets via a dedicated
raw socket, and then extract the relevant info from the ICMP payload,
which contains the IP header of the expired probe.
We also added two more options: --dscp and --ecn. These options are
mutually exclusive with option -t (or --tos), but not with each other.
When options -t/--tos or --dscp or --ecn are set, each hop will show
the content of the ToS field of the expired probe in the following
format: <TOS: X, DSCP: Y, ECN: Z>.
2023-05-25 Alessandro Improta <[email protected]> - 0.0.1
* Introduced InSession tracerouting
More details here: https://www.catchpoint.com/blog/traceroute-insession-catchpoints-effort-towards-a-more-reliable-network-diagnostic-tool
* Discontinued versioning with original traceroute
2023-02-13 Dmitry Butskoy <[email protected]> - 2.1.2
* Fix unprivileged ICMP tracerouting with Linux kernel >= 6.1
(Eric Dumazet, SF bug #14)
2022-12-27 Dmitry Butskoy <[email protected]> - 2.1.1
* Interpret ipv4-mapped ipv6 addresses (::ffff:A.B.C.D) as true ipv4.
There are no ipv4-mapped addresses in the real network which we
operate on, so use just ipv4 in such cases, but allow users
to specify it this way for convenience.
* Return back more robast poll(2) loop handling.
2016-03-08 Dmitry Butskoy <[email protected]> - 2.1.0
* Improve the main loop for better interactivity.
Instead of waiting silently for maximum expiration time of probes
in progress, use timeout of the first probe (which will be printed
first from now) only.
* Speedup wait mechanism.
Traditional traceroute implementation always waited the whole timeout
for any probe. But if we already have some replies from the same hop,
or even from some next hop, we can use the round trip time
of such a reply as a hint to determine the actual reasonable
amount of time to wait.
Now the `-w' option has a form of three (in general) float values
separated by a comma (or a slash): `-w MAX_SECS,HERE,NEAR' .
(last two are optional). MAX_SECS specifies the maximum time
(in seconds) to wait, in any case.
The optional HERE specifies a factor to multiply the round trip time
of an already received response from the same hop.
The resulting value is used as a timeout for the probe, instead of
(but no more than) MAX_SECS. The optional NEAR specifies a similar
factor for a response from some next hop.
The time of the first found result is used in both cases.
First, we look for the same hop (of the probe which will be printed
first from now). If nothing found, then look for some next hop.
If nothing found, use MAX_SECS. If HERE and/or NEAR have zero values,
the corresponding computation is skipped.
HERE and NEAR are always set to zero if only MAX_SECS is specified
(which provides compatibility with previous versions). Thus, if your
scripts use `-w SECS', then nothing changed for you, since
the lonely SECS implies `-w SECS,0,0' .
Defaults are 5.0 seconds for MAX_SECS, 3.0 times for HERE and
10.0 times for NEAR.
Certainly, the new algorithm can lead to premature expiry
(especially when response times differ at times) and printing "*"
instead of a time. Anyway, you can always switch this algorithm off,
just by specifying `-w' with the desired timeout only (fe. `-w 5').
We continue to wait whole MAX_SECS when one probe per time
must be sent (`--sport', `-P proto'), because it seems more harmful
rather than helpful to try to wait less in such cases.
To provide compatibility with 2.0.x versions, use:
traceroute -w 5
(or any other desired `-w' value).
* Hint people to use the system traceroute(8) instead of
tcptraceroute wrapper (by providing a stderr header).
The using of this wrapper is a little bit harmful, since it has
less possibilities and a little different set of options.
For those who are used to use tcptraceroute in cmdline,
just create a link with that name to the system traceroute.
When invoked as "tcp*", it then behaves as `traceroute -T'.
(The simple manual page added for this case in the wrapper subdir).
The original tcptraceroute had some options differ ("lpNSAE"),
but they was rare used. Most common "dnFifmqwst" was just the same.
Therefore it should be painless to use the system binary directly,
instead of the limited wrapper (which is still provided indeed).
2016-02-15 Dmitry Butskoy <[email protected]> - 2.0.22
* Some portability fixing and improvements (Felix Janda)
* Require clear numbers for options and arguments (Sergey Salnikov)
* Drop compilation date from the version string (Debian #774365)
* New tcp module option `reuse', which utilize SO_REUSEADDR
to reuse local port numbers for the huge workloads (Richard Sheehan)
* Avoid poll(2) call with spurious zero timeout in some rare cases
by rounding the value properly using ceil(3)
2014-11-12 Dmitry Butskoy <[email protected]> - 2.0.21
* Fix `--mtu' and `-F' working on kernels >= 3.13
* Some manual page improving (Christopher Mann)
2014-06-14 Dmitry Butskoy <[email protected]> - 2.0.20
* Describe all complementary long options in the man page (Jan Synacek)
* Use correct service name for AS lookups (Frederic Mangano)
* Avoid some rare case null dereference ([email protected])
* Improve expiration check for simultaneous probes
2012-11-19 Dmitry Butskoy <[email protected]> - 2.0.19
* DCCP protocol support (rfc4340), by Samuel Jero
Use "-D" option for it (the protocol-specific options
are available too).
* Update COPYING and COPYING.LIB license files to the latest
published ones (due to FSF address changes etc.) (Jan Synacek)
* Add mention of "-l" option to manual (Filip Holec)
2011-08-16 Dmitry Butskoy <[email protected]> - 2.0.18
* Handle new dgram icmp sockets ("echo ping sockets"),
appeared in kernel 3.0 .
Now unprivileged users may perform ICMP tracerouting
without any special rights of the executable
(neither setuid bits nor cap_net_raw settings).
It is allowed if any group of a user matches sysctl range
of "net/ipv4/ping_group_range".
The support for dgram icmp way (and whether it is allowed)
is auto-detected at runtime. First, the traditional raw socket
is tried (for full compatibility reasons), then new dgram
socket as a fallback.
The icmp module now has two additional options "raw" and "dgram",
which cause to try one particular way only.
Note, that there is no IPv6 implementation for dgram icmp sockets
in kernels 3.0 yet, but new traceroute is ready for it anyway.
* New tcp module option `info' ("-T -O info"),
which prints all tcp flags of tcp reply from the reached
target host.
The flags are shown comma-separated in the same place
where icmp extensions is printed (ie. in `<>' brackets)
This feature is utilized by tcptraceroute wrapper now,
and allow it to be completely functional replacement
of the original tcptraceroute.
* Fix determination of system-wide ECN setings for tcp module.
Since the kernel 2.6.31 the default sysctl net/ipv4/tcp_ecn
was changed from zero to '2', whereas the actual value
for ecn to be set is still '1'
* Allow different packet sizes for `--mtu'.
Suport `-l' option for tracepath wrapper.
* Some code and manual cleanups
2010-12-14 Dmitry Butskoy <[email protected]> - 2.0.17
* Adapt code to make possible the use of Linux capabilities
(for raw sockets etc.) instead of superuser privileges only.
On modern systems the capabilities can be stored as
file attributes, ie.:
"setcap cap_net_raw=pe /usr/bin/traceroute"
2010-09-13 Dmitry Butskoy <[email protected]> - 2.0.16
* A little work-around in the build system
for the new (buggy?) make 3.82
* Add `--fwmark=num' option for firewall mark (for kernel >= 2.6.25).
Idea comes from an anonymous SF patch #3042539
2010-07-14 Dmitry Butskoy <[email protected]> - 2.0.15
* Use string routines more safely (fix SF bug #3029216)
* Provide help for lft wrapper
2010-04-21 Dmitry Butskoy <[email protected]> - 2.0.14
* Fix support for IPv6's flow_labels and tclass.
Thanks to Peter Bieringer for testing
* Use route header "type 2" instead of deprecated "type 0"
for `-g' option for IPv6. The default value can be changed
by specifying a number in the place of the first `-g' address.
2009-11-02 Dmitry Butskoy <[email protected]> - 2.0.13
* Check for first_hop is not zero value ([email protected])
* Always fill unresolved IP address by its numeric interpretation,
even if getnameinfo(3) leaves it untouched (as it does for ipv6
in some glibc versions, whereas always fills for ipv4)
* Cosmetic changes for man page (Andreas Mohr)
2008-09-15 Dmitry Butskoy <[email protected]> - 2.0.12
* Use common recv_reply() routine for all modules which
do recvmsg(2) call. Method-specific things go to callbacks.
Pass to init methods pointer to datalen instead of the value.
* Implement ICMP Extension support (rfc4884), `-e' option.
Parse MPLS info (rfc4950) to be more readable (Kaj Niemi)
* Implement Path MTU Discovery (similar to tracepath(1)),
with `--mtu' option. Changed mtu is printed once in a form
of `F=NUM' at the first probe of a hop which requires
such mtu to be reached. (Actually, the correspond "frag needed"
icmp message is normally sent by the previous hop).
* Print the number of backward hops when it differs with forward,
by `--back' option. The backward hops is guessed by a technique
similar to tracepath(1), there is no reliable way to obtain
such info though.
* The optional second argument (packet_len) now is the full length
of the packet, including IP headers. (It is obvious enough due to
the nature of this feature, and this is the behaviour of the
original traceroute). Particular trace methods can ignore this
(fe. tcp), or increase it up to the minimal value (udp, icmp).
The actual packet's size is alvays reported in the output header.
* Add tracepath(1)/tracepath6(1) shell wrapper.
* Allow DEF_AF to be redefined at cmdline (Teran McKinney)
* Do not check the correctness of `sim_probes' value -- it is
unneeded at all. This also fixes a bug when a value of sim_probes
appears to be more than the total number of probes.
Reported by Milos Malik.
* Allow default UDP method to cross zero port boundary (Milos Malik).
It is a strange corner case, but traditional traceroute
behaves exactly so.
2008-04-25 Dmitry Butskoy <[email protected]> - 2.0.11
* Use new pmtudisc value "probe" instead of "do" for `-F' option
(available since the kernel 2.6.22).
For kernels before 2.6.22, the `-F' (dontfragment) option
seems completely useless for IPv6 and partially useful
for IPv4 (when a user can flush routing caches some way).
* Fix installation in build system (Mike Frysinger)
* Don't compute checksum for ipv6 icmp packets ourselves,
the kernel overwrites it anyway by the proper values.
* Don't use explicit path to traceroute in wrapper scripts
2008-04-17 Dmitry Butskoy <[email protected]> - 2.0.10
* raw_can_connect(): ipv6 connected raw sockets
receive MSG_ERRQUEUE properly only for kernels >= 2.6.25
* remove useless "host" parameter for init methods
* add probe_by_seq() and probe_by_sk() routines,
don't pass whole probes' pointer to recv_probe method
* collect all sends in do_send() routine
* Interpret ENOBUFS errors for send(2) as "can retry later".
Slow devices (like ppp) with small tx_queue_len can reject
the sending of too many packets simultaneously. To handle this,
do_send() now returns a negate value in a case of ENOBUFS
and similar (instead of program exit). The send_probe method
clears the probe and returns immediately in such cases.
Then, if there is an amount of time to wait for something,
the failed probe will be attempted again after that time expired.
If nothing to wait more, the program is exited.
2007-09-26 Dmitry Butskoy <[email protected]> - 2.0.9
* Complete manual page.
* Edit manual page to sound more English, thanks to Chris Ward
2007-09-04 Dmitry Butskoy <[email protected]> - 2.0.8
* Move all wrappers to special "wrappers/" dir.
Add lft(8) shell wrapper.
Add traceproto(8) shell wrapper.
Add traceroute-nanog(8) shell wrapper.
* Interpret first_hop as number, not index
* Build system is re-worked to match more the modern requirements
(Thanks to Mike Frysinger for testing).
* Check for kernel version >= 2.6.22.2 in raw_can_connect()
* Add generic "raw" method, "-P protonum" option.
New "one_per_time" flag for tr_module.
2007-07-31 Dmitry Butskoy <[email protected]> - 2.0.7
* Fix revents checking typo
* Expect normal data reply from udp too.
* Implement udp to port (-U) and udplite (-UL) methods.
Both available for unprivileged users.
Add "coverage" option for udplite.
* Allow non-digit service names for `-p' and `--sport'
* Drop period at the end of "SEE ALSO" section, and
avoid specific distro names in the manual (Mike Frysinger)
* Explicitly mention that this program is licensed
as "GPL version 2 or any later version".
(Similar for libsupp subdir: LGPL version 2.1 or any later).
* Always check whether the dest and source port match in
received packets. Can decrease an amount of (hypothetical)
garbage received just after the bind() but before connect()
2007-07-19 Dmitry Butskoy <[email protected]> - 2.0.6
* Rename tr_ops to tr_module
* Implement module-specific options (-O opt,...)
* Add TCP specific options (all the tcp header flags,
ecn, sack, timestamps, window_scaling, mss, sysctl)
Build tcp probe packet depending on them.
* Add "--sport" option for explicit source port selection.
Always cause "-N 1" when it is set.
* Add new routine bind_socket().
Always (auto)bind sockets in tune_socket().
* Add tcptraceroute(8) shell wrapper
2007-07-16 Dmitry Butskoy <[email protected]> - 2.0.5
* Use MSG_ERRQUEUE for raw sockets too.
* raw_can_connect () work-around for kernel bug #8747
* random.c, csum.c: new separate files
* New implementation of tcp method ("-T"), using
half-open technique. The old implementation module
renamed to "tcpconn" ("-M tcpconn").
* Common parse_cmsg() routine
* put ee_info for parse_icmp_res() too,
handle ICMP6_PACKET_TOO_BIG for IPv6,
report "!F-num" when "frag needed" (legacy compatibility)
2007-07-11 Dmitry Butskoy <[email protected]> - 2.0.4
* clear includes of unneeded headers
* move poll stuff to separate poll.c
* add module stuff (module.c), options etc.
Adapt udp/icmp/tcp for this.
* Add common routines use_recverr() and set_ttl()
2007-02-28 Dmitry Butskoy <[email protected]>
* fix variable type for getsockname (Mike Frysinger)
2007-01-09 Dmitry Butskoy <[email protected]> - 2.0.3
* version 2.0.3
* allow option args without separator (add CLIF_MAY_JOIN_ARG flag),
for compatibility (Benjamin LaHaise)
* no more "tcptraceroute" symlink for rpm packages, because
it conflicts with the same-name old package anyway (James Ralston)
* fix compilation on glibc < 2.4 (Andy Shevchenko)
2006-10-30 Dmitry Butskoy <[email protected]> - 2.0.2
* version 2.0.2
* More accurate check_expired() routine.
* Some minor fixes.
* Add NOTES section to manual
2006-10-20 Dmitry Butskoy <[email protected]> - 2.0.1
* version 2.0.1
* Now ops methods write send_time (as well as recv_time)
* Use SO_TIMESTAMP to obtain msecs precisely
* Complete manual