static char sccsid
[] = "@(#)route.c 4.1 82/04/02";
struct sockaddr_in sin
= { AF_INET
};
printf("usage: route [ cmd ] [ args ]\n"), exit(1);
s
= socket(SOCK_RAW
, 0, 0, options
);
if (strcmp(*argv
, "add") == 0)
else if (strcmp(*argv
, "delete") == 0)
else if (strcmp(*argv
, "change") == 0)
changeroute(argc
-1, argv
+1);
printf("%s: huh?\n", *argv
);
printf("usage: %s destination gateway\n", argv
[0]);
getaddr(*argv
++, &route
.rt_dst
);
getaddr(*argv
, &route
.rt_gateway
);
sin
= (struct sockaddr_in
*)&route
.rt_dst
;
if (sin
->sin_addr
.s_host
|| sin
->sin_addr
.s_imp
)
route
.rt_flags
|= RTF_HOST
;
printf("%s %x: gateway %x\n", cmd
, sin
->sin_addr
,
((struct sockaddr_in
*)&route
.rt_gateway
)->sin_addr
);
if (ioctl(s
, *cmd
== 'a' ? SIOCADDRT
: SIOCDELRT
, (caddr_t
)&route
))
printf("not supported\n");
fprintf(stderr
, "not in table\n");
fprintf(stderr
, "entry in use\n");
else if (errno
== ENOBUFS
)
fprintf(stderr
, "routing table overflow\n");
sin
->sin_family
= AF_INET
;
if ((sin
->sin_addr
.s_addr
= rhost(&s
)) != -1)
fprintf(stderr
, "%s: unknown host\n", s
);
sin
->sin_addr
.s_addr
= atoi(s
);
if (sin
->sin_addr
.s_addr
== -1) {
fprintf(stderr
, "%s: bad value\n", s
);