@(#) $Header$ (LBL) Traceroute is known to build and run under SunOS 4.1.4 and Solaris 5.4. If you are running a really old kernel, see the instructions under the title "KERNEL MODIFICATIONS" further down. To build traceroute, first customize any paths in Makefile.in, then run "./configure" (a shell script). The configure script will determine your system attributes and generate an appropriate Makefile from Makefile.in. Next run "make". If everything goes well you can su to root and run "make install" and "make install-man". Note that traceroute must be installed setuid to root or run as root. If configure fails for some reason and decide to submit a bug report to traceroute@ee.lbl.gov, please include a copy of config.log. You will need an ANSI C compiler to build libpcap. The configure script will abort if your compiler is not ANSI compliant. If this happens, use the GNU C compiler, available via anonymous ftp: ftp://prep.ai.mit.edu/pub/gnu/gcc-*.tar.gz If you get the error message: traceroute: unknown protocol icmp it usually means you're missing the icmp line in /etc/protocols. If you are using Solaris 2.5.1 (and possibly higher), traceroute cannot calculate checksums; configure automatically changes the default to reflect this. The kernel updates the ip_id field with some unknown value and the ip_off field with the IP_DF bit. Also, if the the udp uh_sum field is non-zero, it gets updated with the value of the uh_ulen field... This means that the icmp echo option (-I flag) is not as useful. KERNEL MODIFICATIONS -------------------- If yor have a really old system, it may be necessary to modify your kernel before traceroute will work. If you want to hack on your kernel, a modified version of the routine rip_output (normally found in the file /sys/netinet/raw_ip.c) can be found in rip_output.c. This code may or may not resemble the code in your kernel. It may offer you a place to start but we make no promises. If you do hack your kernel, remember to test everything that uses raw ip sockets (e.g., ping and egpup/gated) & make sure they still work. We wish you the best of luck and you're on your own. Some older kernels forward icmp packets that have a ttl of zero. If your system has this bug, you might want to fix it while you're in the kernel. (This bug appears in all releases of BSD up to but not including 4.3tahoe. If your version of netinet/ip_icmp.c is any earlier than 7.3 (April, '87), it has the bug.) The fix is just to add the line: ip->ip_ttl = MAXTTL; after the line: ip->ip_src = t; (or anywhere before the call to icmp_send) in routine icmp_reflect. If you're running this on a pre-4.3bsd system (e.g., SunOS 3) that strips ip headers from icmp messages, add -DARCHAIC to CFLAGS in the Makefile. Also note that rip_output contains a conditional for a 4.2/4.3 change in the location of a raw socket's protocol number. I've checked this under 4.3 & SunOS 3 but you should double-check your system to make sure the appropriate branch of the #if is taken (check the line that assigned to ip->ip_p in your system's original rip_output). FILES ----- CHANGES - description of differences between releases FILES - list of files exported as part of the distribution INSTALL - this file Makefile.in - compilation rules (input to the configure script) README - description of distribution VERSION - version of this release aclocal.m4 - autoconf macros config.guess - autoconf support config.sub - autoconf support configure - configure script (run this first) configure.in - configure script source ifaddrlist.c - inet address routines install-sh - BSD style install script lbl/gnuc.h - gcc macros and defines lbl/os-*.h - os dependent defines and prototypes linux-include/* - network include files missing on Linux mean.awk - awk script to print out the mean time along a route median.awk - awk script to print out the median time along a route mkdep - construct Makefile dependency list rip_output.c - sample rip_output() from /sys/netinet/raw_ip.c strerror.c - emulation routine traceroute.8 - manual entry traceroute.c - main program traceroute.h - global prototypes