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);