SCCS-vsn: sbin/route/route.c 5.40
#endif /* not lint */
#ifndef lint
#endif /* not lint */
#ifndef lint
-static char sccsid[] = "@(#)route.c 5.39 (Berkeley) %G%";
+static char sccsid[] = "@(#)route.c 5.40 (Berkeley) %G%";
#endif /* not lint */
#include <sys/param.h>
#endif /* not lint */
#include <sys/param.h>
- switch (sa->sa_family) {
+
+ if (sa->sa_len == 0)
+ strcpy(line, "default");
+ else switch (sa->sa_family) {
case AF_INET:
{ struct in_addr in;
in = ((struct sockaddr_in *)sa)->sin_addr;
cp = 0;
case AF_INET:
{ struct in_addr in;
in = ((struct sockaddr_in *)sa)->sin_addr;
cp = 0;
- if (in.s_addr == INADDR_ANY)
+ if (in.s_addr == INADDR_ANY || sa->sa_len < 4)
cp = "default";
if (cp == 0 && !nflag) {
hp = gethostbyaddr((char *)&in, sizeof (struct in_addr),
cp = "default";
if (cp == 0 && !nflag) {
hp = gethostbyaddr((char *)&in, sizeof (struct in_addr),
register char **argv;
{
char *cmd, *dest = "", *gateway = "", *err;
register char **argv;
{
char *cmd, *dest = "", *gateway = "", *err;
- int ishost = 0, ret, attempts, oerrno, flags = 0;
+ int ishost = 0, ret, attempts, oerrno, flags = RTF_STATIC;
int key;
struct hostent *hp = 0;
int key;
struct hostent *hp = 0;
case K_IFACE:
case K_INTERFACE:
iflag++;
case K_IFACE:
case K_INTERFACE:
iflag++;
+ case K_NOSTATIC:
+ flags &= ~RTF_STATIC;
break;
case K_LOCK:
locking = 1;
break;
case K_LOCK:
locking = 1;
case K_XRESOLVE:
flags |= RTF_XRESOLVE;
break;
case K_XRESOLVE:
flags |= RTF_XRESOLVE;
break;
+ case K_STATIC:
+ flags |= RTF_STATIC;
+ break;
case K_IFA:
argc--;
(void) getaddr(RTA_IFA, *++argv, 0);
case K_IFA:
argc--;
(void) getaddr(RTA_IFA, *++argv, 0);
- register char *cp1, *cp2;
- int olen;
+ int olen = so_mask.sa.sa_len;
+ register char *cp1 = olen + (char *)&so_mask, *cp2;
+ for (so_mask.sa.sa_len = 0; cp1 > (char *)&so_mask; )
+ if (*--cp1 != 0) {
+ so_mask.sa.sa_len = 1 + cp1 - (char *)&so_mask;
+ break;
+ }
if ((rtm_addrs & RTA_DST) == 0)
return;
switch (so_dst.sa.sa_family) {
case AF_NS:
case AF_INET:
if ((rtm_addrs & RTA_DST) == 0)
return;
switch (so_dst.sa.sa_family) {
case AF_NS:
case AF_INET:
case 0:
return;
case AF_ISO:
case 0:
return;
case AF_ISO:
char metricnames[] =
"\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount\1mtu";
char routeflags[] =
char metricnames[] =
"\010rttvar\7rtt\6ssthresh\5sendpipe\4recvpipe\3expire\2hopcount\1mtu";
char routeflags[] =
-"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT\011CLONING\012XRESOLVE\013LLINFO\017PROTO2\020PROTO1";
+"\1UP\2GATEWAY\3HOST\4REJECT\5DYNAMIC\6MODIFIED\7DONE\010MASK_PRESENT\011CLONING\012XRESOLVE\013LLINFO\014STATIC\017PROTO2\020PROTO1";