root%bostonu.csnet@csnet-relay.ARPA (BostonU SysMgr) (07/22/85)
Subject: routed sometimes fails to send gateway info Index: /usr/src/etc/routed/startup.c 4.2BSD Description: A machine with multiple interfaces will not report that it can act as a gateway on all interfaces capable of receiving broadcast messages. This results in some systems not knowing about gateways. Perhaps this has been reported before, or maybe people have just patched their /etc/gateways files and stopped relying on routed (or used route explicitly etc.) This is caused by a simple collision of the meaning of a bit in the interface flags field (between how it appears in the kernel and how routed uses it.) I suspect my trouble was with the IFF_TRAILERS bit. This bug may not appear unless you have certain bits set via ifconfig. Repeat-By: 1. Delete any entries from the gateways files on a machine that shouldn't need them (ie. a 4.2 system running routed with another 4.2 system running routed that should be reporting its gateway services.) Delete gateway info (route delete...), see if the gateway info re-appears. If not, you have the bug. 2. Go on the gateway machine and kill routed, re-run it by hand with the trace flag set, note if it fails to send info on all its broadcast interfaces. Fix: Relatively trivial, in ifinit() (startup.c) mask off all bits other than 0x1f in ifs.if_flags, context diff follows: *** startup.c.orig Sun Jul 21 15:41:03 1985 --- startup.c Fri Jul 19 18:38:35 1985 *************** *** 102,107 } strcpy(ifp->int_name, name); ifp->int_addr = ifs.if_addr; ifp->int_flags = ifs.if_flags | IFF_INTERFACE; /* this works because broadaddr overlaps dstaddr */ ifp->int_broadaddr = ifs.if_broadaddr; --- 102,113 ----- } strcpy(ifp->int_name, name); ifp->int_addr = ifs.if_addr; + /* + * BZS - bad botch, clear hi bits + * (7/19/85) + */ + ifs.if_flags &= 0x1f ; /* foo! */ + /**/ ifp->int_flags = ifs.if_flags | IFF_INTERFACE; /* this works because broadaddr overlaps dstaddr */ ifp->int_broadaddr = ifs.if_broadaddr; -Barry Shein, Boston University