Gated 3.5 Alpha 1 is available for anonymous FTP from gated.cornell.edu as pub/gated/gated-R3_5Alpha_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_5Alpha_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 is being called 3.5 because of the many internal changes since 3.0. Much has been rewritten internally to improve gated's performance, especially when dealing with tens of thousands of routes. But little has changed externally, so I did not feel it was necessary to call it 4.0. Note that this code is still under development, but it is stable enough to include other testers and people have an urgent need for the new features. All discussion of this release should be done on the gated-alpha@gated.cornell.edu list, to subscribe, send a request to me at gated-alpha-request@gated.cornell.edu. General: The size of the TSI allocation array was being incorrectly calculated, this could result in core dumps if all the available TSI fields were used. When formatting ASPATH NFAs, print a '*' to indicate accept state to compress output. Display NFAs as they are being created. Allow `LOCAL_VERSION' option in build environment configuration to add local information to the version string. Document fixes required to compile mib/rt.my with ISODE 6.8 mosy on AIX 3.2. Routine to free gateway lists did not insure that a gateway existed before freeing it. Allow routes with off-net gateways if RTS_NOTINSTALL is set. Certain trace options (nostamp, mark, parse, adv) would not be accepted as the first argument to the `traceoptions' statement. Support MARK in the tracelog via `options mark <interval> ;' instead of `traceoptions mark ;'. Also allows the interval to be configured. AIX 3 by default makes little useless core dumps. Add code so gated will request full dumps for signals which cause abnormal termination. Improper check in gd_{upper,lower}() against the length of the buffer could result in writing the terminating null past the end of the allocated memory. On HP-UX systems, including -lBSD in the load path picked up the wrong version of setpgrp(). The solution was to remove -lBSD and use the getcwd() emulation of getwd(). Also use our private copy of install on these systems. If the preference specified on the gendefault option was changed it would not be updated by a reconfiguration. Add `gateway' parameter on gendefault option. For portability, use sendto() instead of sendmsg(). Use recvfrom() on systems that do not have the advanced features that require recvmsg(). Remove recvmsg emulation from compatibility library. Only compile compatiblity routines required for the target system. This eliminates the need to include libc twice (which does not work on systems with shared libraries). Interface names that were keywords were supposed to be quoteable (""), but it did not work. Routes that were pending in the routing socket queue were not being displayed properly in a status dump. RouterID and OSPF virtuallink neighbor may now be specified symbolically. In general, everything but netmasks may be specified symbolically. Added high priority timers which are checked very often and used for critical function, like OSPF adjacencies. Added foreground and background jobs which are used for deferred processing, such as SPF calculations, propagation of route changes, and updating the kernel. These changes allow gated to better handle periods of high load without losing peer relationships. Re-wrote the kernel interface(s) to queue requests for changes to the kernel routing table and process them a few at a time in the background. The kernel-independent interface has multi-path support. Routing socket interface will now accept route add and route change requests that fail as requests to add `kernel static' routes. Deletes will only be honored when an attempt is made to delete `kernel static' or `redirect' routes. Maintain a queue of routes added by each gw_entry. This removes most need to scan the complete routing table. Include <stddef.h> on systems where __STDC__ is defined and NO_STDDEF_H is not defined. This gets the system version of the offsetof() macro if available. Remove rtlist_all() and rtlist_active() since they scan the whole routing table. Maintain seperately linked queus of tasks with active recv, write, except and flash methods to avoid scanning long lists of tasks. Especially with alot of BGP internal peers. Add low priority reads for egps and optimize select calls. Dennis rewrote the radix tree routing table and optimized it for the routing function (vs the forwarding function). Curtis, Dennis and Jeff rewrote the destination/mask list processing to use a radix tree for much faster inserts and lookups. Rewrite of aggregation for speed and efficiency. Added route `generation' support. Allow for loopback interfaces with non-loopback addresses shared with P2P interfaces. Give GDC the ability to set limits (coresize, filesize, stacksize, datasize). On Certain systems the default size of a core dump is very limited, this will allow a useful core dump to be obtained from gated when started via gdc. EGP: During policy evaluation the search for a previously announced route was not extensive, which caused routes to be missed. Gateways were not being added to the list at the end, resulting in potential duplicates of my own addresss. If the polled address changed, the old one would be orphaned. EGP would not sort neighbors properly, and might core dump on little endian machines. EGP would get out of sync on an update containing network 127. The update parsing code does not need to ignore this network as the martian code will catch it when it is added to the routing table. OSPF: The check for a forwarding address being one of my interface addresses was broken. During reconfiguration/termination, OSPF did not reset the pointer to the area list before starting to delete areas, possibly causing a core dump. OSPF did not free gateway pointers during termination. The ADV_ALLOC() macro had an if with two identical cases. There was an typo in the NBRS_LIST() macro that caused it to reference an incorrect variable name. Luckily, it's usage was such that this never caused a problem. Insure that the only interfaces active when ospf_area_terminate() is called are disabled, i.e. they don't have tasks. Same for ospf_terminate() and virtual interfaces. On Ultrix systems P2P interfaces are listed before non-P2P interfaces. This uncovered a bug where OSPF was comparing to the network of an interface without making sure it was not a P2P interface. OSPF now only joins the multicast group for designated routers when operatating as DR or Backup DR on that interface. Display cumulative error logs in gated_dump file. Display ASEs last as they tend to create the most output. Code to disable reception of our own multicast packets was not being called after OSPF reinitialization. Do not set the forwarding address for ASEs to be a gateway on the end of a P2P link. Routes to attached interfaces were mishandled, resulting in the possibility that the OSPF route would be used instead of the interface route. This would result in improper flag settings (G flag missing) and improper routing. During OSPF termination structures were deleted that were still in use by OSPF routes in the process of being deleted. This would result in incorrect logging on some systems and core dumps on others. If the interface that the router-id was derived from went down, OSPF would not be completely shut down and a core dump could result. Stub hosts other than on the end of P2P interfaces were not being propagated. OSPF would set the wrong age in the LS headers in LS ack packets. This would occasionally cause the LS advertisements to be retransmitted until they were updated. Improve OSPF error statistics and logging. Log critical messages to the syslog. Add `first' and `every' parameters to limit the quantity of information generated. Virtual links were not being brought down when there was no route to the specified neighbor, instead they were timing out. Also, their cost was not being updated when the cost to the specified neighbor changed. RIP & HELLO: Ignore the subnetmask on a P2P interface unless both addresses are on the same natural network. RIP was not carefully checking the router sent and received in RIP-2 updates. Added support for RIP-2 authentication on a per-interface basis. Specific targets share the authentication with broadcast clients on the interface. Maintain lists of routes being announced to each target. This prevents scanning the entire routing table every time an update is generated. Recongnize `rip no ;' even when RIP is not compiled in. SNMP: Spurious trace lines were generated by a misplaced trace statement. Reject routes report an ifIndex of 0, a next hop of 0.0.0.0 and a protocol of other. If the SMUX connection failed while registering portions of the MIB a core dump would result. Document problem with rt.my and mosy 6.8 (AIX 3.2). Recongnize `snmp no ;' even when SNMP is not compiled in.