[net.unix-wizards] route.c

stanonik@nprdc (02/20/85)

At one time we were getting some route entries which
we could not remove because the distributed route.c,
using only the address and metric, could not specify
all combinations of rt_flags.  Also I could never
remember what the metric meant.  So, I've changed route.c
to also accept the rt_flags explicitly.

Ron Stanonik
stanonik@nprdc

RCS file: RCS/route.c,v
retrieving revision 1.1
diff -c -r1.1 route.c
*** /tmp/,RCSt1001882	Wed Feb 20 09:07:31 1985
--- route.c	Wed Sep 26 10:32:28 1984
***************
*** 168,174
  	char *cmd;
  
  	if (argc < 3 || argc > 4) {
! 		printf("usage: %s destination gateway [ metric ]\n", argv[0]);
  		return;
  	}
  	cmd = argv[0];

--- 168,174 -----
  	char *cmd;
  
  	if (argc < 3 || argc > 4) {
! 		printf("usage: %s destination gateway [ metric | HG ]\n", argv[0]);
  		return;
  	}
  	cmd = argv[0];
***************
*** 180,185
  		route.rt_flags |= RTF_HOST;
  	if (argc > 3 && atoi(argv[3]) > 0)
  		route.rt_flags |= RTF_GATEWAY;
  	printf("%s %s: gateway ", cmd, routename(sin->sin_addr));
  	sin = (struct sockaddr_in *)&route.rt_gateway;
  	printf("%s, flags %x\n", routename(sin->sin_addr), route.rt_flags);

--- 180,192 -----
  		route.rt_flags |= RTF_HOST;
  	if (argc > 3 && atoi(argv[3]) > 0)
  		route.rt_flags |= RTF_GATEWAY;
+ 	if (argc > 3 && !isdigit(argv[3][0])) {
+ 		route.rt_flags &= ~(RTF_HOST|RTF_GATEWAY); /* undo flags */
+ 		if (index(argv[3], 'H'))
+ 			route.rt_flags |= RTF_HOST;
+ 		if (index(argv[3], 'G'))
+ 			route.rt_flags |= RTF_GATEWAY;
+ 	}
  	printf("%s %s: gateway ", cmd, routename(sin->sin_addr));
  	sin = (struct sockaddr_in *)&route.rt_gateway;
  	printf("%s, flags %x\n", routename(sin->sin_addr), route.rt_flags);