/* ucb/pr_routes.c */ #include <sys/types.h> #include <sys/ioctl.h> #include <errno.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <net/netlib.h> #include <net/gen/in.h> #include <net/gen/route.h> #include <net/gen/netdb.h> #include <net/gen/inet.h> char *prog_name; int main _ARGS(( int argc, char *argv[] )); void print_route _ARGS(( nwio_route_t *route )); void usage _ARGS(( void )); int main (argc, argv) int argc; char *argv[]; { int nr_routes, i; nwio_route_t route; int argind; char *ip_dev; int ip_fd; int result; prog_name= argv[0]; ip_dev= NULL; for (argind= 1; argind < argc; argind++) { if (!strcmp(argv[argind], "-?")) usage(); if (!strcmp(argv[argind], "-i")) { if (ip_dev) usage(); argind++; if (argind >= argc) usage(); ip_dev= argv[argind]; continue; } usage(); } if (!ip_dev) { ip_dev= getenv("IP_DEVICE"); } if (!ip_dev) ip_dev= IP_DEVICE; ip_fd= open(ip_dev, O_RDWR); if (ip_fd == -1) { fprintf(stderr, "%s: unable to open %s: %s\n", prog_name, ip_dev, strerror(errno)); exit(1); } route.nwr_ent_no= 0; result= ioctl(ip_fd, NWIOIPGROUTE, &route); if (result == -1) { fprintf(stderr, "%s: unable to NWIOIPGROUTE: %s\n", argv[0], strerror(errno)); exit(1); } nr_routes= route.nwr_ent_count; print_route(&route); for (i= 1; i<nr_routes; i++) { route.nwr_ent_no= i; result= ioctl(ip_fd, NWIOIPGROUTE, &route); if (result == -1) { fprintf(stderr, "%s: unable to NWIOIPGROUTE: %s\n", argv[0], strerror(errno)); exit(1); } print_route(&route); } exit(0); } void print_route(route) nwio_route_t *route; { if (!(route->nwr_flags & NWRF_INUSE)) return; printf("%d ", route->nwr_ent_no); printf("DEST= %s, ", inet_ntoa(route->nwr_dest)); printf("NETMASK= %s, ", inet_ntoa(route->nwr_netmask)); printf("GATEWAY= %s, ", inet_ntoa(route->nwr_gateway)); printf("dist= %d ", route->nwr_dist); printf("pref= %d", route->nwr_pref); if (route->nwr_flags & NWRF_FIXED) printf(" fixed"); printf("\n"); } void usage() { fprintf(stderr, "USAGE: %s [ -i <ip-device> ]\n", prog_name); exit(1); }