# INSTALLATION of GateD R3_5

The GateD makefile system is setup to allow object directories for multiple architectures to use one source tree. The object directories consist of a few configured files and symlinks for the majority of the GateD files. They are named obj.<arch> where arch is the architecture of your system as reported by the arch or machine program. If one of these programs can not be found, the first part of your hostname is used, see src/util/archtype for more information.

1. Create an object directory, `src/obj.`src/util/archtype``. Run `src/util/archtype` directly to display the architecture. If you will never compile GateD on a second architecture you can use `obj`. For example, on a Sun SPARCstation running SunOS 4.1.1:

       sun% src/util/archtype
       SunOS-4.1.1-sun4
       sun% mkdir src/obj.`src/util/archtype`
       sun% ls -d src/obj.*
       src/obj.SunOS-4.1.1-sun4/

   On BSD 4.3 Reno and later obj directories are supported in the format the system sources use. This support is not direct, but a hack. On these systems you will need to specify the full path to some directories, for an example see `src/configs/vangogh`.

2. Build a config file. This file is used as input to a configuration script which builds a Makefile and system specific header files.

   A description of config file options is available in `src/configs/README`.

   Examples of quite a few config files are in `src/configs`, pick the one that is closest to what you want and tailor it to your specific configuration. Install this config file in the previously created object directory with the name `Config`.

3. Configure GateD for this architecture by typing `make config`. This will run an awk script on your `obj.`src/util/archtype`/Config` file which builds a sed script. This sed script is used to edit a Makefile template. The Makefile is then run to configure architecture specific files, create symbolic links, and dependencies.

4. Build GateD by typing `make` in the src directory or the object directory.

5. Become root and install GateD `make install` in the src or object directory. Then optionally type `make install-man` in the same directory to install the man pages.

6. Make up a configuration file. Sample config files are in the conf directory and the man page explains all config options. Install the config file in `/etc/gated.conf`.

7. Take cover and .... FIRE IT UP!

## Notes

UDP Checksums
  RIP will refuse to run if it determines that UDP checksums are disabled in the kernel. Running without UDP checksums can lead to incorrect routing information being propagated, especially on serial links. This check does not help you determine if RIP packets you receive are missing a checksum, but at least it prevents you from generating these packets and calls attention to the problem.

  There are two ways to enable UDP checksums. Your operating system may provide enough source to enable checksums by default. SunOS provides this in `/sys/netinet/in_proto.c`. Update the source and recompile the kernel.

  If your operating system does not provide the relevent source, you can patch the running kernel and disk image with a sequence similar to this (as root):

      sun# adb -k -w /vmunix /dev/mem
      _udp_cksum/W 1
      _udp_cksum:     0x0             =       0x1
      _udp_cksum?W 1
      _udp_cksum:     0x0             =       0x1
      ^D
      sun#

  You can probably find the proper name for the UDP checksum value with:

      sun# nm -o /vmunix | grep udp_c
      /vmunix:f80fa35c D _udp_cksum
      /vmunix:f801bd10 T _udp_ctlinput
      sun#

IP Multicast support
  The OSPF and RIP implementations (and in the future hopefully Router Discovery) make use of IP multicasting facilities. If these facilities are not present, functionality is reduced.

  Some systems ship with IP multicasting support, namely BSDI's BSD/386 1.0, Sun's Solaris 2.0 and Silicon Graphics' IRIX. For other systems, IP multicasting support may be available (for example SunOS 4.1.* and some versions of Ultrix), check the FTP directories on gregorio.stanford.edu, parcftp.xerox.com and ftp.isi.edu.

  RIP-II and OSPF specify the use of IP multicast on P2P interfaces. Due to bugs in most implementations of the IP multicast code GateD will not be able to specify it's use on these interfaces. GateD will automatically fall back to using the destination address of the P2P link. In the OSPF case, no functionality will be lost, but in the RIP-II case you will loose the ability to pass arbitrary subnet masks via these interfaces.

  Another bug in IP multicast support causes multicast packets to local-wire groups to fail if there is not a default route for IP, multicast, or the specific group. As a workaround, GateD installs a default route for any local-wire multicast group it uses via the loopback interface. This default is not actually used, but it avoids a kernel bug sending to these groups.

Interfacing to the ISODE SMUX interface
  This version of GateD can do SNMP via the ISODE 7.0 SMUX interface. If you don't already have ISODE 7.0 you may obtain a version with many SMUX/SNMP patches applied via FTP from gated.cornell.edu as pub/gated/isode-snmp-7.0.tar.Z.

  Even though the ISODE source requires alot of disk space, it isn't necessary to build and install all of ISODE, just the core distribution and the snmp code. A partial install (`inst-partial` and `inst-snmp`) are the minimum required.

  GateD also supports the ISODE 6.8 based SMUX interface on AIX 3 systems. If you experience errors of the form:

      Building:       gated-mib.c
      mosy -s -c gated-mib.c ../mib/smi.my ../mib/mib.my ../mib/rt.my ../mib/bgp.my ../mib/ospf.my ../mib/rip.my
      mosy 6.8 of Sat Nov 23 12:30:27 CST 1991
      line 56: Warning: EXPORTS but no ModuleIdentifier
      last token read was ";"
      object enterprises: Warning: IMPORTS but no ModuleIdentifier
      object snmpEnableAuthenTraps: Warning: IMPORTS but no ModuleIdentifier
      object snmpEnableAuthenTraps: syntax error
      make: *** [gated-mib.c] Error 1

  change the default for ipForwardInfo to remove the second zero so it becomes:

          DEFVAL  { { 0 } } -- 0.0

  The mosy supplied with ISODE 6.8 could not parse this syntax, even though it is correct.

Running GateD on SunOS 4.0 systems
  If GateD gets sendto() network unreachable problems when running on SunOS 4.0 systems, add ``hostname`` to the `ifconfig` commands for `ie0/le0/ec0` in `/etc/rc.local`. Otherwise SunOS has a misconception of the route to the attached network.

  In an attempt to make binaries that read kernel memory compatible between different kernel architectures, Sun has created libkvm.a. Unfortunately, the dynamically loaded versions of these libraries are broken on SunOS 4.* systems, so GateD must be statically linked. This prevents the use of a GateD binary compiled on one kernel architecuture (say sun4m) from working on another (sun4c).

Running GateD on AIX 3.2 systems
  AIX 3.2 has networking code based on BSD 4.3 Reno, including variable length subnet masks and the routing socket. Some of the extensions are available when the system is not running in BSD 4.3 compatibility mode (see the `compat_43` variable and `no`). Amoung these are the ability to determine the destination address of a RIP packet (used when GateD is responding to the ripquery program). GateD can run in either mode with a slight loss of functionality in BSD 4.3 compatability mode. Make sure you compile with `-D_BSD=44`!

  In order to generate a core dump useful for debugging on AIX 3, the default limit on the core size must be increased. This can be accomplished via the shell, or automatically when GateD is started via gdc. Some compilation-time configuring is necessary for this to work. Either define `GDC_CORESIZE=RLIM_INFINITY` in the `obj/Config` file, or define `GDC_RESOURCE` and use the `-c` option to `gdc` at run time.

Compiling GateD on systems with shared libraries
  If an assertion failure occurs in `task_stdio_read()`, it is because a file descriptor was improperly closed. This can occur when the named resolver libraries are improperly installed in the system shared libraries. If the socket used by the shared libraries is not statically initialized to -1, file descriptor zero will be closed when GateD calls `endhostent()`. The solution is to fix the shared libraries. A workaround would be to not use any symbolic names in the config file and specify `options noresolv ;`.

Using GateD on AIX 3.1 and 3.2
  Problems have been reported with `yacc` on at least some versions of AIX 3.1 and 3.2. On of the problems is that `yacc` does not report parse errors to the caller, resulting in GateD trying to run with an incorrect configuration. It is strongly recommended that you obtain GNU `bison` instead. It is available for anonymous FTP from prep.ai.mit.edu in the pub/gnu directory.

Running HELLO and/or EGP on 4.2 based systems
  If you would like to run HELLO or EGP on a 4.2 based system such as Ultrix 1.2, 2.0, 2.1 and SunOS 3.x you will need to add the following code to the following modules and rebuild your kernel.

      /sys/netinet/in.h:

      #define IPPROTO_EGP		8		/* exterior gateway protocol */

      #define IPPROTO_HELLO		63		/* Fuzzball HELLO protocol */

      /sys/netinet/in_proto.c for SunOS 3.x:

      { SOCK_RAW,	PF_INET,	IPPROTO_HELLO,	PR_ATOMIC|PR_ADDR,
        rip_input,	rip_output,	0,	0,
        raw_usrreq,
        0,		0,		0,		0,
      },
      { SOCK_RAW,	PF_INET,	IPPROTO_EGP,	PR_ATOMIC|PR_ADDR,
        rip_input,	rip_output,	0,	0,
        raw_usrreq,
        0,		0,		0,		0,
      },

      /sys/netinet/in_proto.c for Ultrix 1.2, 2.0 and 2.2:

      { SOCK_RAW,     &inetdomain,    IPPROTO_HELLO,    PR_ATOMIC|PR_ADDR,
        rip_input,    rip_output,     0,              0,
        raw_usrreq,
        0,            0,              0,              0,
        0,            0,              0,
      },
      { SOCK_RAW,     &inetdomain,    IPPROTO_EGP,    PR_ATOMIC|PR_ADDR,
        rip_input,    rip_output,     0,              0,
        raw_usrreq,
        0,            0,              0,              0,
        0,            0,              0,
      },

Last Updated 1994/09/07 00:50:41.