Chapter 5 - INSTALLATION of GateD
R4_0
The GateD makefile system is set up 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.
5.2.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.4-sun4
sun% mkdir src/obj.`src/util/archtype`
sun% ls -d src/obj.*
src/obj.SunOS-4.1.4-sun4/
On BSD 4.3 Reno and later obj directories are supported in the format which 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.
5.2.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 many a few config files are in src/configs. Pick the one which 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.
5.2.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.
make
in the src directory or the object directory.
5.2.5 Become root and install GateD by:
make install in the src or object directory. Then optionally type
make install-man in the same directory to install the man pages.
Sample config files are in the conf directory and the main page explains all config options.
Install the config file in /etc/gated.conf.
5.2.7 Take cover and .... FIRE IT UP!
- 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 the
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 relevant 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#
5.3.2 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 its
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 lose the ability to pass arbitrary subnet masks via these
interfaces.
- Another bug in IP multicast support causes multicast packets which go to local-wire
groups to fail if there is not a default route for IP, multicast, or the specific group.
To get around this, 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
sending a kernel bug to these groups.
IP Multicast Routing support
- GateD now includes support for multicast routing protocols. It implements the router
portion of the IGMP protocol to determine local group membership information. It
currently supports PIM (Dense Mode) and Distance Vector Multicast Routing Protocol
(DVMRP). It tries to be compatible with the 3.3 and 3.5 releases of the IP Multicast
distribution from Xerox Parc.
- GateD can be configures to use one of three different multicast kernel models. These
are distinguished by how multicast forwarding table entries are placed in the kernel.
- KRT_IPMULTI_NOCACHE This model does not provide a protocol independent
multicast forwarding cache in the kernel. Therefore, it is not possible to use this type of
kernel for IP Multicast Routing with GateD. This includes all releases of the IP
Multicast software from Xerox PARC and Stanford University with versions 1.x and
2.x. If your kernel falls in this category, then unfortunately , you cannot use GateD for
IP Multicast routing.
- KRT_IPMULTI_RTSOCK Because of the DVMRP dependencies in the 1.x and 2.x
releases, a new kernel was designed by some of the GateD developers that would be
completely protocol independent. The design assumed that certain features typical of
BSD 4.3 Reno and later systems (including the routing socket) would be present. When
a multicast datagram arrives for a Group,Source pair and no forwarding cache entry
exists in the kernel, a request is put on the routing socket to resolve the Group, Source.
The routing daemon (who listens on the routing socket) will see the request and
generate a forwarding cache entry to be installed in the kernel.
- Another goal of the new kernel was to eliminate the use of Virtual Interfaces (or Vifs).
Instead, pseudo tunnel interfaces with their own ifnet structures were implemented.
This made the software much simpler since a tunnel interface appeared to be just like
another point to point interface in the router.
- The implementation also takes advantage of the radix tree that exists in BSD 4.3 Reno
systems and later. The Group,Source pairs are installed as a single key in the radix tree
as opposed to the more traditional hashing table found in BSD 4.3 systems. A copy of
the source patches to this kernel that is applicable to most BSD 4.4 Lite systems is
available from ftp://ftp.gated.cornell.edu/pub/multicast.
- Note: Not yet implemented.
- KRT_IPMULTI_TTL0 With this model, the kernel also acts as a protocol
independent multicast forwarding cache. Forwarding cache entries are generate on
demand as data traffic is forwarded. It uses messages on the IGMP socket to
communicate with the routing daemon and request that a forwarding cache entry be
calculated. Examples of the use of this model include the Xerox PARC IP Multicast 3.3
and 3.5 kernel releases.
5.3.3 Interfacing to the ISODE SMUX interface
- This version of GateD can do SNMP via the ISODE 8.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.org as /net-research/gated/isode-snmp-8.0.tar.gz.
- Even though the ISODE source requires much of disk space, it isn't necessary to
build and install all of ISODE, but rather just the core distribution and the snmp code.
A partial install (inst-partial and inst-snmp) is 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.
5.3.4 Running GateD on SunOS 4.0 systems
- If GateD gets send to () 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).
5.3.5 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_43variable
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/Configfile, or define GDC_RESOURCEand use the -c option to gdc at
run time.
5.3.6 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 andspecify
options noresolv ;.
- 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.
5.3.8 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 April 27, 1997
gated@gated.merit.edu