1100784Sfenner@(#) $Id: INSTALL,v 1.13 2000/11/23 20:07:29 leres Exp $ (LBL)
218579Sfenner
318579SfennerTraceroute is known to build and run under SunOS 4.1.4 and Solaris 5.4.
418579SfennerIf you are running a really old kernel, see the instructions under the
518579Sfennertitle "KERNEL MODIFICATIONS" further down.
618579Sfenner
718579SfennerTo build traceroute, first customize any paths in Makefile.in, then run
818579Sfenner"./configure" (a shell script). The configure script will determine
918579Sfenneryour system attributes and generate an appropriate Makefile from
1018579SfennerMakefile.in. Next run "make". If everything goes well you can su to
1118579Sfennerroot and run "make install" and "make install-man". Note that traceroute
1218579Sfennermust be installed setuid to root or run as root.
1318579Sfenner
1418579SfennerIf configure fails for some reason and decide to submit a bug report to
1518579Sfennertraceroute@ee.lbl.gov, please include a copy of config.log.
1618579Sfenner
1718579SfennerYou will need an ANSI C compiler to build libpcap. The configure script
1818579Sfennerwill abort if your compiler is not ANSI compliant. If this happens, use
1918579Sfennerthe GNU C compiler, available via anonymous ftp:
2018579Sfenner
2118579Sfenner        ftp://prep.ai.mit.edu/pub/gnu/gcc-*.tar.gz
2218579Sfenner
23100784SfennerIf you get the error message:
24100784Sfenner
25100784Sfenner	traceroute: unknown protocol icmp
26100784Sfenner
27100784Sfennerit usually means you're missing the icmp line in /etc/protocols.
28100784Sfenner
29100784SfennerIf you are using Solaris 2.5.1 (and possibly higher), traceroute cannot
30100784Sfennercalculate checksums; configure automatically changes the default to
31100784Sfennerreflect this. The kernel updates the ip_id field with some unknown
32100784Sfennervalue and the ip_off field with the IP_DF bit. Also, if the the udp
33100784Sfenneruh_sum field is non-zero, it gets updated with the value of the uh_ulen
34100784Sfennerfield... This means that the icmp echo option (-I flag) is not as
35100784Sfenneruseful.
36100784Sfenner
3718579SfennerKERNEL MODIFICATIONS
3818579Sfenner--------------------
3918579SfennerIf yor have a really old system, it may be necessary to modify your
4018579Sfennerkernel before traceroute will work. If you want to hack on your kernel,
4118579Sfennera modified version of the routine rip_output (normally found in the
4218579Sfennerfile /sys/netinet/raw_ip.c) can be found in rip_output.c. This code may
4318579Sfenneror may not resemble the code in your kernel. It may offer you a place
4418579Sfennerto start but we make no promises. If you do hack your kernel, remember
4518579Sfennerto test everything that uses raw ip sockets (e.g., ping and
4618579Sfenneregpup/gated) & make sure they still work. We wish you the best of luck
4718579Sfennerand you're on your own.
4818579Sfenner
4918579SfennerSome older kernels forward icmp packets that have a ttl of zero. If
5018579Sfenneryour system has this bug, you might want to fix it while you're in the
5118579Sfennerkernel.  (This bug appears in all releases of BSD up to but not
5218579Sfennerincluding 4.3tahoe. If your version of netinet/ip_icmp.c is any earlier
5318579Sfennerthan 7.3 (April, '87), it has the bug.)  The fix is just to add the
5418579Sfennerline:
5518579Sfenner
5618579Sfenner	ip->ip_ttl = MAXTTL;
5718579Sfenner
5818579Sfennerafter the line:
5918579Sfenner
6018579Sfenner	ip->ip_src = t;
6118579Sfenner
6218579Sfenner(or anywhere before the call to icmp_send) in routine icmp_reflect.
6318579Sfenner
6418579SfennerIf you're running this on a pre-4.3bsd system (e.g., SunOS 3) that
6518579Sfennerstrips ip headers from icmp messages, add -DARCHAIC to CFLAGS in the
6618579SfennerMakefile.  Also note that rip_output contains a conditional for a
6718579Sfenner4.2/4.3 change in the location of a raw socket's protocol number.  I've
6818579Sfennerchecked this under 4.3 & SunOS 3 but you should double-check your
6918579Sfennersystem to make sure the appropriate branch of the #if is taken (check
7018579Sfennerthe line that assigned to ip->ip_p in your system's original
7118579Sfennerrip_output).
7218579Sfenner
7318579Sfenner
7418579SfennerFILES
7518579Sfenner-----
7618579SfennerCHANGES         - description of differences between releases
7718579SfennerFILES		- list of files exported as part of the distribution
7818579SfennerINSTALL         - this file
7918579SfennerMakefile.in	- compilation rules (input to the configure script)
8018579SfennerREADME		- description of distribution
8118579SfennerVERSION		- version of this release
82100784Sfenneraclocal.m4	- autoconf macros
8318579Sfennerconfig.guess	- autoconf support
8418579Sfennerconfig.sub	- autoconf support
8518579Sfennerconfigure	- configure script (run this first)
8618579Sfennerconfigure.in	- configure script source
87100784Sfennerfindsaddr-generic.c - generic source address code
88100784Sfennerfindsaddr-linux.c - linux source address code
89100784Sfennerfindsaddr-socket.c - socket based soruce address code
90100784Sfennerfindsaddr.h	- source address prototypes
91100784Sfennerifaddrlist.c	- inet address routines
92100784Sfennerifaddrlist.h	- inet address prototypes
9318579Sfennerinstall-sh	- BSD style install script
9418579Sfennerlbl/gnuc.h	- gcc macros and defines
9518579Sfennerlbl/os-*.h	- os dependent defines and prototypes
96100784Sfennerlinux-include/*	- network include files missing on Linux
9718579Sfennermean.awk	- awk script to print out the mean time along a route
9818579Sfennermedian.awk	- awk script to print out the median time along a route
9918579Sfennermkdep		- construct Makefile dependency list
10018579Sfennerrip_output.c	- sample rip_output() from  /sys/netinet/raw_ip.c
101100784Sfennerstrerror.c	- emulation routine
10218579Sfennertraceroute.8	- manual entry
10318579Sfennertraceroute.c	- main program
104100784Sfennertraceroute.h	- global prototypes
105100784Sfennerusleep.c	- missing system call emulation
106