static char sccsid
[] = "@(#)route.c 4.6 83/01/06";
struct sockaddr_in sin
= { AF_INET
};
struct in_addr
inet_makeaddr();
printf("usage: route [ cmd ] [ args ]\n"), exit(1);
s
= socket(AF_INET
, SOCK_RAW
, 0, 0);
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
);
if (argc
< 3 || argc
> 4) {
printf("usage: %s destination gateway [ metric ]\n", argv
[0]);
getaddr(argv
[1], &route
.rt_dst
);
getaddr(argv
[2], &route
.rt_gateway
);
sin
= (struct sockaddr_in
*)&route
.rt_dst
;
if (inet_lnaof(sin
->sin_addr
) != 0)
route
.rt_flags
|= RTF_HOST
;
if (argc
> 3 && atoi(argv
[3]) > 0)
route
.rt_flags
|= RTF_GATEWAY
;
printf("%s %x: gateway %x, flags %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
= hp
->h_addrtype
;
bcopy(hp
->h_addr
, &sin
->sin_addr
, hp
->h_length
);
sin
->sin_family
= np
->n_addrtype
;
sin
->sin_addr
= inet_makeaddr(np
->n_net
, INADDR_ANY
);
sin
->sin_family
= AF_INET
;
sin
->sin_addr
.s_addr
= val
;
sin
->sin_addr
= inet_makeaddr(val
, INADDR_ANY
);
fprintf(stderr
, "%s: bad value\n", s
);