X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=networking%2Froute.c;h=d571fc5a3a770065792777d3662c9b547dd535a1;hb=e0c0757d0925d7f83e2e107861c4e3ec8f525108;hp=3fad81a01c3120fc8439db3d2a96ba409e9d20df;hpb=67991cf824f8df27e74c92d754fb507681c69ce6;p=oweals%2Fbusybox.git diff --git a/networking/route.c b/networking/route.c index 3fad81a01..d571fc5a3 100644 --- a/networking/route.c +++ b/networking/route.c @@ -15,12 +15,12 @@ * Foundation; either version 2 of the License, or (at * your option) any later version. * - * $Id: route.c,v 1.3 2001/02/14 21:23:06 andersen Exp $ + * $Id: route.c,v 1.10 2001/03/21 07:34:26 andersen Exp $ * * displayroute() code added by Vladimir N. Oleynik + * adjustments by Larry Doolittle */ -#include "busybox.h" #include #include #include @@ -36,6 +36,7 @@ #include #include #include +#include "busybox.h" #define _(x) x @@ -59,18 +60,18 @@ static int INET_resolve(char *name, struct sockaddr *sa) { - struct sockaddr_in *sin = (struct sockaddr_in *)sa; + struct sockaddr_in *s_in = (struct sockaddr_in *)sa; - sin->sin_family = AF_INET; - sin->sin_port = 0; + s_in->sin_family = AF_INET; + s_in->sin_port = 0; /* Default is special, meaning 0.0.0.0. */ - if (!strcmp(name, "default")) { - sin->sin_addr.s_addr = INADDR_ANY; - return (1); + if (strcmp(name, "default")==0) { + s_in->sin_addr.s_addr = INADDR_ANY; + return 1; } /* Look to see if it's a dotted quad. */ - if (inet_aton(name, &sin->sin_addr)) { + if (inet_aton(name, &s_in->sin_addr)) { return 0; } /* guess not.. */ @@ -107,10 +108,10 @@ INET_setroute(int action, int options, char **args) xflag = 0; - if (!strcmp(*args, "-net")) { + if (strcmp(*args, "-net")==0) { xflag = 1; args++; - } else if (!strcmp(*args, "-host")) { + } else if (strcmp(*args, "-host")==0) { xflag = 2; args++; } @@ -124,8 +125,8 @@ INET_setroute(int action, int options, char **args) if ((isnet = INET_resolve(target, &rt.rt_dst)) < 0) { - fprintf(stderr, "cant resolve %s\n", target); - return (1); + error_msg(_("can't resolve %s"), target); + return EXIT_FAILURE; /* XXX change to E_something */ } switch (xflag) { @@ -147,7 +148,7 @@ INET_setroute(int action, int options, char **args) rt.rt_flags &= ~RTF_HOST; while (*args) { - if (!strcmp(*args, "metric")) { + if (strcmp(*args, "metric")==0) { int metric; args++; @@ -157,13 +158,13 @@ INET_setroute(int action, int options, char **args) #if HAVE_NEW_ADDRT rt.rt_metric = metric + 1; #else - ENOSUPP("inet_setroute", "NEW_ADDRT (metric)"); + ENOSUPP("inet_setroute", "NEW_ADDRT (metric)"); /* XXX Fixme */ #endif args++; continue; } - if (!strcmp(*args, "netmask")) { + if (strcmp(*args, "netmask")==0) { struct sockaddr mask; args++; @@ -171,15 +172,15 @@ INET_setroute(int action, int options, char **args) show_usage(); safe_strncpy(netmask, *args, (sizeof netmask)); if ((isnet = INET_resolve(netmask, &mask)) < 0) { - fprintf(stderr, "cant resolve netmask %s\n", netmask); - return (E_LOOKUP); + error_msg(_("can't resolve netmask %s"), netmask); + return E_LOOKUP; } rt.rt_genmask = full_mask(mask); args++; continue; } - if (!strcmp(*args, "gw") || !strcmp(*args, "gateway")) { + if (strcmp(*args, "gw")==0 || strcmp(*args, "gateway")==0) { args++; if (!*args) show_usage(); @@ -187,21 +188,21 @@ INET_setroute(int action, int options, char **args) show_usage(); safe_strncpy(gateway, *args, (sizeof gateway)); if ((isnet = INET_resolve(gateway, &rt.rt_gateway)) < 0) { - fprintf(stderr, "cant resolve gw %s\n", gateway); - return (E_LOOKUP); + error_msg(_("can't resolve gw %s"), gateway); + return E_LOOKUP; } if (isnet) { - fprintf(stderr, - _("route: %s: cannot use a NETWORK as gateway!\n"), + error_msg( + _("%s: cannot use a NETWORK as gateway!"), gateway); - return (E_OPTERR); + return E_OPTERR; } rt.rt_flags |= RTF_GATEWAY; args++; continue; } - if (!strcmp(*args, "mss")) { + if (strcmp(*args, "mss")==0) { args++; rt.rt_flags |= RTF_MSS; if (!*args) @@ -209,13 +210,13 @@ INET_setroute(int action, int options, char **args) rt.rt_mss = atoi(*args); args++; if (rt.rt_mss < 64 || rt.rt_mss > 32768) { - fprintf(stderr, _("route: Invalid MSS.\n")); - return (E_OPTERR); + error_msg(_("Invalid MSS.")); + return E_OPTERR; } continue; } - if (!strcmp(*args, "window")) { + if (strcmp(*args, "window")==0) { args++; if (!*args) show_usage(); @@ -223,13 +224,13 @@ INET_setroute(int action, int options, char **args) rt.rt_window = atoi(*args); args++; if (rt.rt_window < 128) { - fprintf(stderr, _("route: Invalid window.\n")); - return (E_OPTERR); + error_msg(_("Invalid window.")); + return E_OPTERR; } continue; } - if (!strcmp(*args, "irtt")) { + if (strcmp(*args, "irtt")==0) { args++; if (!*args) show_usage(); @@ -240,41 +241,41 @@ INET_setroute(int action, int options, char **args) rt.rt_irtt *= (HZ / 100); /* FIXME */ #if 0 /* FIXME: do we need to check anything of this? */ if (rt.rt_irtt < 1 || rt.rt_irtt > (120 * HZ)) { - fprintf(stderr, _("route: Invalid initial rtt.\n")); - return (E_OPTERR); + error_msg(_("Invalid initial rtt.")); + return E_OPTERR; } #endif #else - ENOSUPP("inet_setroute", "RTF_IRTT"); + ENOSUPP("inet_setroute", "RTF_IRTT"); /* XXX Fixme */ #endif continue; } - if (!strcmp(*args, "reject")) { + if (strcmp(*args, "reject")==0) { args++; #if HAVE_RTF_REJECT rt.rt_flags |= RTF_REJECT; #else - ENOSUPP("inet_setroute", "RTF_REJECT"); + ENOSUPP("inet_setroute", "RTF_REJECT"); /* XXX Fixme */ #endif continue; } - if (!strcmp(*args, "mod")) { + if (strcmp(*args, "mod")==0) { args++; rt.rt_flags |= RTF_MODIFIED; continue; } - if (!strcmp(*args, "dyn")) { + if (strcmp(*args, "dyn")==0) { args++; rt.rt_flags |= RTF_DYNAMIC; continue; } - if (!strcmp(*args, "reinstate")) { + if (strcmp(*args, "reinstate")==0) { args++; rt.rt_flags |= RTF_REINSTATE; continue; } - if (!strcmp(*args, "device") || !strcmp(*args, "dev")) { + if (strcmp(*args, "device")==0 || strcmp(*args, "dev")==0) { args++; if (rt.rt_dev || *args == NULL) show_usage(); @@ -286,8 +287,9 @@ INET_setroute(int action, int options, char **args) rt.rt_dev = *args++; if (*args) show_usage(); /* must be last to catch typos */ - } else + } else { show_usage(); + } } #if HAVE_RTF_REJECT @@ -300,19 +302,19 @@ INET_setroute(int action, int options, char **args) unsigned long mask = mask_in_addr(rt); mask = ~ntohl(mask); if ((rt.rt_flags & RTF_HOST) && mask != 0xffffffff) { - fprintf(stderr, - _("route: netmask %.8x doesn't make sense with host route\n"), + error_msg( + _("netmask %.8x doesn't make sense with host route"), (unsigned int)mask); - return (E_OPTERR); + return E_OPTERR; } if (mask & (mask + 1)) { - fprintf(stderr, _("route: bogus netmask %s\n"), netmask); - return (E_OPTERR); + error_msg(_("bogus netmask %s"), netmask); + return E_OPTERR; } mask = ((struct sockaddr_in *) &rt.rt_dst)->sin_addr.s_addr; if (mask & ~mask_in_addr(rt)) { - fprintf(stderr, _("route: netmask doesn't match route address\n")); - return (E_OPTERR); + error_msg(_("netmask doesn't match route address")); + return E_OPTERR; } } /* Fill out netmask if still unset */ @@ -322,29 +324,29 @@ INET_setroute(int action, int options, char **args) /* Create a socket to the INET kernel. */ if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket"); - return (E_SOCK); + return E_SOCK; } /* Tell the kernel to accept this route. */ if (action == RTACTION_DEL) { if (ioctl(skfd, SIOCDELRT, &rt) < 0) { perror("SIOCDELRT"); close(skfd); - return (E_SOCK); + return E_SOCK; } } else { if (ioctl(skfd, SIOCADDRT, &rt) < 0) { perror("SIOCADDRT"); close(skfd); - return (E_SOCK); + return E_SOCK; } } /* Close the socket. */ (void) close(skfd); - return (0); + return EXIT_SUCCESS; } -void displayroutes(void) +static void displayroutes(void) { char buff[256]; int nl = 0 ; @@ -358,11 +360,8 @@ void displayroutes(void) char sdest[16], sgw[16]; - FILE *fp = fopen("/proc/net/route", "r"); + FILE *fp = xfopen("/proc/net/route", "r"); - if(fp==0) { - perror_msg_and_die("/proc/net/route"); - } while( fgets(buff, sizeof(buff), fp) != NULL ) { if(nl) { int ifl = 0; @@ -373,12 +372,11 @@ void displayroutes(void) &d, &g, &flgs, &ref, &use, &metric, &m)!=7) { error_msg_and_die( "Unsuported kernel route format\n"); } - dest.s_addr = d; - gw.s_addr = g; - mask.s_addr = m; - if(nl==1) - printf("Kernel IP routing table\n\ -Destination\tGateway\t\tGenmask\t\tFlags Metric Ref Use Iface\n"); + if(nl==1) { + printf("Kernel IP routing table\n" +"Destination Gateway Genmask Flags Metric Ref Use Iface\n"); + } + ifl = 0; /* parse flags */ if(flgs&1) @@ -388,11 +386,14 @@ Destination\tGateway\t\tGenmask\t\tFlags Metric Ref Use Iface\n"); if(flgs&4) flags[ifl++]='H'; flags[ifl]=0; + dest.s_addr = d; + gw.s_addr = g; + mask.s_addr = m; strcpy(sdest, (dest.s_addr==0 ? "default" : inet_ntoa(dest))); strcpy(sgw, (gw.s_addr==0 ? "*" : inet_ntoa(gw))); - printf("%-16s%-16s%-16s%-6s%-7d%-9d%-2d%s\n", + printf("%-16s%-16s%-16s%-6s%-6d %-2d %7d %s\n", sdest, sgw, inet_ntoa(mask), flags, metric, ref, use, buff); @@ -410,20 +411,18 @@ int route_main(int argc, char **argv) if (*argv == NULL) { displayroutes(); - exit(EXIT_SUCCESS); + return EXIT_SUCCESS; } else { /* check verb */ - if (!strcmp(*argv, "add")) + if (strcmp(*argv, "add")==0) what = RTACTION_ADD; - else if (!strcmp(*argv, "del") || !strcmp(*argv, "delete")) + else if (strcmp(*argv, "del")==0 || strcmp(*argv, "delete")==0) what = RTACTION_DEL; - else if (!strcmp(*argv, "flush")) + else if (strcmp(*argv, "flush")==0) what = RTACTION_FLUSH; else show_usage(); } - INET_setroute(what, 0, ++argv); - - exit(EXIT_SUCCESS); + return INET_setroute(what, 0, ++argv); }