Gated 3.1 Alpha 1 is available for anonymous FTP from gated.cornell.edu as pub/gated/gated-R3_1Alpha_1.tar.Z. It is also available via e-mail; Send a mail message to gated-alpha-archive@gated.cornell.edu with a subject line of "send gated/gated-R3_1Alpha_1.tar.Zus*" or a subject line of "help" for more information. And finally Gated is available via Gopher from gated.cornell.edu. If you are reading this message with a MIME-compliant mail reader it should ask you if you would like to automatically obtain the release via FTP or e-mail. This release has support for route aggregation, but does not yet have BGP 4. It is coming soon. General: The ipForwardInfo and ipRouteInfo variables were not being reported correctly. With the MIBs currently implemented they should report OID NULL. A typo prevented some of the compatiblity routines from being compiled in. Some of the configurations needed updating since old routines had not been deleted from the compatibility library. An improperly initialized head pointer would result in a core dump if ISO was used. When reading a route from the kernel at startup and deciding to reject it, make sure an old route actually existed before trying to restore it. A reject route to net 127 was causing a core dump at startup. Protocols with multiple targets per task lead to confusion about which target actually set a routing table entry lock bit. Print the bit number to make this information available. SunOS 5.* needs to use our version of the install script (or /usr/bsd/install if present). Added code to use sysctl() instead of nlist() to get values from the kernel where possible (BSD 4.4 and BSDI?). It was assumed that the interface name was always available when updating link level info. On systems that support the interface index in the kernel, using the index is more efficient, especially when the interface name is not provided. Gated's own random number generator (grand.c) contributed by Dennis Ferguson <dennis@ans.net>. The code to defer send and receive buffer allocation until after protocol initialization was not working properly. Since the problem to be fixed by this defering is no longer a factor, send and receive buffers will be allocated immediately. Task_get_socket() was reporting the socket type incorrectly. Restriction on martian networks relaxed a bit, networks with RTS_NOADVISE set may be installed in the routing table. This will allow the 127.0.0.1 interface route and 127/255 reject route. Create a static route for 127/255 instead of an aggregate. Allow for -cc option to mkdep for systems where it is necessary to use a different compiler to generate dependencies. Martian list was mondo broken. Reduce the default list to the set of reserved networks listed in RFC 990. Allow ranges to be excluded by used of the `allow' option. Allow configured entries to override default entries. Isntall Martian networks in the routing table, just prevent from being installed into the kernel or propagated. Put signal names into compatibility library in BSD 4.4 sys_signames[] format. The routing socket interface assumed that an RTM_CHANGE message can change a route's flags, it can not. Best match lookups in the routing table were not working. This primarily affected OSPF ASE forwarding address lookups. Move zero subnet detection from routing table into protocols that need this support (RIP v0,1 and HELLO). This will allow gated to function on a system configured with a zero subnet. The interface code (if.c) was allocating a socket that was never used. This code was never cleaned up when dynamic interface support was added. Rt_change() was not reseting the delete indication. When flock() is emulated via lockf(), GDC has to open the file read-write, or the lock will fail. On systems based on BSD 4.3 Reno (and later) supporting MSG_TRUNC, protocols (in particular EGP) would ignore packets that had been truncated. Modified core code to explicitly report this. Reference to a non-existing interface by name could cause a core dump after reconfiguration. Define INSQUE/REMQUE macros to replace insque/remque routines. It is faster to do it inline, except on a VAX with post-processing of the assembler source, there we can define an in-line assembler function if need be. Avoid calling sethostent() and endhostent() if `noresolv' option is specified. This avoids tickling a bug when the shared libraries have been updates with resolver routines supporting the nameserver. A core dump could occur when an interface is deleted. A bug caused all inserts into dest/mask lists to be appends, making performance miserable for a large number of networks. A route could be lost when adding a duplicate key due to errors in the code that sorts them by most specific netmask. Allow static routes with subnet masks that might not be accepted by the kernel. They may be useful even though they won't be installed on kernels not supporting variable subnets. Attempt to function on AIX 3.2 systems when compiled with _BSD=44 but running with compat_43=1. Basically, make some assumptions about socket lengths. The ability for RIP to determine which address a packet was destined for will be lost. And ISO stuff may not work at all, but that is not standard AIX. Enhanced a cleanup routine for EGP-IGP interaction. The man pages now indicate a revision date of the last time they were checked in. BGP A core dump could result when a BGP local address is specified and a status dump is requested. BGP Because some BGP implementations occasionally send bogus next hops we will simply ignore the next hop instead of the route. EGP If EGP was configured off and then back on, it could core dump because it incorrectly zeroed the pointer to the data area it uses to sort EGP peers for MIB queries. Add more checks that actual count of bytes received matches that specified in the header. Add an awk script and Makefile gunk to build RCS version ids into verion.c in such a manner that they can be interpreted by RCS' `ident' program and SCCS` `what' program. SunOS 5 enforces the requirement to call bind() before connect(), even on raw sockets. The AS Path code did not allow for an EGP session with the same local and remote AS. In essence, EGP is being used as an igp, but that's how BGP was born.... RIP & HELLO: In some cases a core dump would result from duplicate attempts to release a routing table bit. With nobroadcast, and a source gateway on the end of a point-to-point interface, no updates would be sent to that interface. Add RTS_IFSUBNETMASK bit to make it easy to determine which routes derrived their subnet mask from the interface when the interface netmask changes. Other fixes for dealing with netmask change. When an interface goes down, delete any routes learned from that interface. HELLO did this, RIP did not. RIP will announce *allow* networks, subnets and hosts to full version 2 peers. Aggregate routes default to a single hop. RIP & HELLO could sometimes lose track of routes they had in holddown. A list of routes obtained by RIP & HELLO could be stale before it was used causing a reference to a route that has been deleted. Defer obtaining this list until it is needed. RIP and HELLO will not automatically aggregate hosts routes, that needs to be done with policy. In HELLO and in RIP when masks are not specified, the zero subnet is treated as such, not as the network. If this is not wanted, it will have to be rejected via policy. Set RTS_IFSUBNETMASK on hostroutes of a subnetted network in case the mask changes. OSPF If there were multiple links to another router, the lowest IP address was used instead of the best metric. OSPF was not cleaning up after reconfiguration if it was disabled. ASE LSDB entries were not being freed before reconfiguration. Only list P2P OSPF neighbors in a Router Links LSA when the neighbor is full. This allows the use of alternate connectivity. After reconfiguration the router links LSA was not always being rebuilt, causing problems when an old one was received from a neighbor. More reconfiguration fixes. The forwarding address for ASEs was not being displayed in the status dump. The forwarding cache was not properly allocating next hop blocks resulting in an occasional core dump. On an interface with a large MTU (4352), OSPF would dump core when tracing was enabled. When the metric changed on a non-ASE route, the route entry was not updated. Responses to OSPF monitor request create task (at most one per address/port) with a non-blocking socket for each request. This will prevent monitor requests from hanging gated. When OSPF terminated, it didn't release any routes it had been announcing, nor did it clean up any entries in the export queue. When running in multiple areas, OSPF improperly assigned indexes to the lock timers for each area. The only notable symptom is a core dump at shutdown.