[net.bugs.4bsd] 4.2bsd route daemon error -- flags botched

matt@oddjob.UChicago.UUCP (Matt Crawford) (01/23/85)

Index:	etc/routed/startup.c 4.2BSD

Description:
	The high 3 bits of the interface flags should be masked off
	before being used in routed's tables.  Otherwise the bits for
	IFF_NOTRAILERS, IFF_RUNNING, and IFF_NOARP will be mistaken
	for RTS_PASSIVE, RTS_INTERFACE, and RTS_REMOTE respectively.
Repeat-By:
	Turn off trailers on an ethernet which out to receive routing
	broadcasts, then start routed.
Fix:
*** /tmp/,RCSt1003118	Tue Jan 22 16:30:15 1985
--- startup.c	Sat Jan 19 16:04:56 1985
***************
*** 1,6
  #ifndef lint
  static char sccsid[] = "@(#)startup.c	4.4 (Berkeley) 5/25/83";
  #endif
  
  /*
   * Routing Table Management Daemon

--- 1,15 -----
  #ifndef lint
  static char sccsid[] = "@(#)startup.c	4.4 (Berkeley) 5/25/83";
  #endif
+ /* $Header: startup.c,v 1.2 85/01/19 16:02:49 bin Exp $
+  * $Log:	startup.c,v $
+  * Revision 1.2  85/01/19  16:02:49  bin
+  * Mask out the high 3 bits of the interface flags from the kernel.
+  * The bits for IFF_NOTRAILERS, IFF_RUNNING, and IFF_NOARP were being
+  * mistaken for RTS_PASSIVE, RTS_INTERFACE, and RTS_REMOTE respectively.
+  * 
+  * 1.1 == 4.2 distribution
+  */
  
  /*
   * Routing Table Management Daemon
***************
*** 102,108
  		}
  		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;
  		ifp->int_net = ifs.if_net;

--- 111,117 -----
  		}
  		strcpy(ifp->int_name, name);
  		ifp->int_addr = ifs.if_addr;
! 		ifp->int_flags = (ifs.if_flags & 0x1f) | IFF_INTERFACE;
  		/* this works because broadaddr overlaps dstaddr */
  		ifp->int_broadaddr = ifs.if_broadaddr;
  		ifp->int_net = ifs.if_net;
_____________________________________________________
Matt		University	crawford@anl-mcs.arpa
Crawford	of Chicago	ihnp4!oddjob!matt