aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-08-22 18:24:43 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-08-22 18:24:43 +0000
commit7c58e9be69b2a3f52977879b1a300579c9914b29 (patch)
treea3d67beb9b866735d55918322e6d85dcf9d3245d
parentbaf55a85fc08ddad71b43a2348fd4f58338be83f (diff)
downloadbusybox-w32-7c58e9be69b2a3f52977879b1a300579c9914b29.tar.gz
busybox-w32-7c58e9be69b2a3f52977879b1a300579c9914b29.tar.bz2
busybox-w32-7c58e9be69b2a3f52977879b1a300579c9914b29.zip
Run through indent, fix comment
-rw-r--r--networking/route.c337
1 files changed, 174 insertions, 163 deletions
diff --git a/networking/route.c b/networking/route.c
index 76e76b4b7..5c4ce8ca3 100644
--- a/networking/route.c
+++ b/networking/route.c
@@ -15,7 +15,7 @@
15 * Foundation; either version 2 of the License, or (at 15 * Foundation; either version 2 of the License, or (at
16 * your option) any later version. 16 * your option) any later version.
17 * 17 *
18 * $Id: route.c,v 1.17 2002/07/03 11:46:34 andersen Exp $ 18 * $Id: route.c,v 1.18 2002/08/22 18:24:43 bug1 Exp $
19 * 19 *
20 * displayroute() code added by Vladimir N. Oleynik <dzo@simtreas.ru> 20 * displayroute() code added by Vladimir N. Oleynik <dzo@simtreas.ru>
21 * adjustments by Larry Doolittle <LRDoolittle@lbl.gov> 21 * adjustments by Larry Doolittle <LRDoolittle@lbl.gov>
@@ -28,7 +28,7 @@
28#include "inet_common.h" 28#include "inet_common.h"
29#include <net/route.h> 29#include <net/route.h>
30#include <net/if.h> 30#include <net/if.h>
31#include <linux/param.h> // HZ 31#include <linux/param.h> /* HZ */
32#include <stdio.h> 32#include <stdio.h>
33#include <errno.h> 33#include <errno.h>
34#include <fcntl.h> 34#include <fcntl.h>
@@ -56,13 +56,13 @@
56#define E_INTERN 2 56#define E_INTERN 2
57#define E_NOSUPP 1 57#define E_NOSUPP 1
58 58
59#if defined (SIOCADDRTOLD) || defined (RTF_IRTT) /* route */ 59#if defined (SIOCADDRTOLD) || defined (RTF_IRTT) /* route */
60#define HAVE_NEW_ADDRT 1 60#define HAVE_NEW_ADDRT 1
61#endif 61#endif
62#ifdef RTF_IRTT /* route */ 62#ifdef RTF_IRTT /* route */
63#define HAVE_RTF_IRTT 1 63#define HAVE_RTF_IRTT 1
64#endif 64#endif
65#ifdef RTF_REJECT /* route */ 65#ifdef RTF_REJECT /* route */
66#define HAVE_RTF_REJECT 1 66#define HAVE_RTF_REJECT 1
67#endif 67#endif
68 68
@@ -78,8 +78,7 @@
78 78
79/* add or delete a route depending on action */ 79/* add or delete a route depending on action */
80 80
81static int 81static int INET_setroute(int action, int options, char **args)
82INET_setroute(int action, int options, char **args)
83{ 82{
84 struct rtentry rt; 83 struct rtentry rt;
85 char target[128], gateway[128] = "NONE"; 84 char target[128], gateway[128] = "NONE";
@@ -90,38 +89,40 @@ INET_setroute(int action, int options, char **args)
90 xflag = 0; 89 xflag = 0;
91 90
92 if (*args == NULL) 91 if (*args == NULL)
93 show_usage(); 92 show_usage();
94 if (strcmp(*args, "-net")==0) { 93 if (strcmp(*args, "-net") == 0) {
95 xflag = 1; 94 xflag = 1;
96 args++; 95 args++;
97 } else if (strcmp(*args, "-host")==0) { 96 } else if (strcmp(*args, "-host") == 0) {
98 xflag = 2; 97 xflag = 2;
99 args++; 98 args++;
100 } 99 }
101 if (*args == NULL) 100 if (*args == NULL)
102 show_usage(); 101 show_usage();
103 safe_strncpy(target, *args++, (sizeof target)); 102 safe_strncpy(target, *args++, (sizeof target));
104 103
105 /* Clean out the RTREQ structure. */ 104 /* Clean out the RTREQ structure. */
106 memset((char *) &rt, 0, sizeof(struct rtentry)); 105 memset((char *) &rt, 0, sizeof(struct rtentry));
107 106
108 107
109 if ((isnet = INET_resolve(target, (struct sockaddr_in *)&rt.rt_dst, xflag!=1)) < 0) { 108 if ((isnet =
109 INET_resolve(target, (struct sockaddr_in *) &rt.rt_dst,
110 xflag != 1)) < 0) {
110 error_msg(_("can't resolve %s"), target); 111 error_msg(_("can't resolve %s"), target);
111 return EXIT_FAILURE; /* XXX change to E_something */ 112 return EXIT_FAILURE; /* XXX change to E_something */
112 } 113 }
113 114
114 switch (xflag) { 115 switch (xflag) {
115 case 1: 116 case 1:
116 isnet = 1; 117 isnet = 1;
117 break; 118 break;
118 119
119 case 2: 120 case 2:
120 isnet = 0; 121 isnet = 0;
121 break; 122 break;
122 123
123 default: 124 default:
124 break; 125 break;
125 } 126 }
126 127
127 /* Fill in the other fields. */ 128 /* Fill in the other fields. */
@@ -130,7 +131,7 @@ INET_setroute(int action, int options, char **args)
130 rt.rt_flags &= ~RTF_HOST; 131 rt.rt_flags &= ~RTF_HOST;
131 132
132 while (*args) { 133 while (*args) {
133 if (strcmp(*args, "metric")==0) { 134 if (strcmp(*args, "metric") == 0) {
134 int metric; 135 int metric;
135 136
136 args++; 137 args++;
@@ -140,20 +141,22 @@ INET_setroute(int action, int options, char **args)
140#if HAVE_NEW_ADDRT 141#if HAVE_NEW_ADDRT
141 rt.rt_metric = metric + 1; 142 rt.rt_metric = metric + 1;
142#else 143#else
143 ENOSUPP("inet_setroute", "NEW_ADDRT (metric)"); /* XXX Fixme */ 144 ENOSUPP("inet_setroute", "NEW_ADDRT (metric)"); /* XXX Fixme */
144#endif 145#endif
145 args++; 146 args++;
146 continue; 147 continue;
147 } 148 }
148 149
149 if (strcmp(*args, "netmask")==0) { 150 if (strcmp(*args, "netmask") == 0) {
150 struct sockaddr mask; 151 struct sockaddr mask;
151 152
152 args++; 153 args++;
153 if (!*args || mask_in_addr(rt)) 154 if (!*args || mask_in_addr(rt))
154 show_usage(); 155 show_usage();
155 netmask = *args; 156 netmask = *args;
156 if ((isnet = INET_resolve(netmask, (struct sockaddr_in *)&mask, 0)) < 0) { 157 if ((isnet =
158 INET_resolve(netmask, (struct sockaddr_in *) &mask,
159 0)) < 0) {
157 error_msg(_("can't resolve netmask %s"), netmask); 160 error_msg(_("can't resolve netmask %s"), netmask);
158 return E_LOOKUP; 161 return E_LOOKUP;
159 } 162 }
@@ -162,21 +165,21 @@ INET_setroute(int action, int options, char **args)
162 continue; 165 continue;
163 } 166 }
164 167
165 if (strcmp(*args, "gw")==0 || strcmp(*args, "gateway")==0) { 168 if (strcmp(*args, "gw") == 0 || strcmp(*args, "gateway") == 0) {
166 args++; 169 args++;
167 if (!*args) 170 if (!*args)
168 show_usage(); 171 show_usage();
169 if (rt.rt_flags & RTF_GATEWAY) 172 if (rt.rt_flags & RTF_GATEWAY)
170 show_usage(); 173 show_usage();
171 safe_strncpy(gateway, *args, (sizeof gateway)); 174 safe_strncpy(gateway, *args, (sizeof gateway));
172 if ((isnet = INET_resolve(gateway, (struct sockaddr_in *)&rt.rt_gateway, 1)) < 0) { 175 if ((isnet =
176 INET_resolve(gateway, (struct sockaddr_in *) &rt.rt_gateway,
177 1)) < 0) {
173 error_msg(_("can't resolve gw %s"), gateway); 178 error_msg(_("can't resolve gw %s"), gateway);
174 return E_LOOKUP; 179 return E_LOOKUP;
175 } 180 }
176 if (isnet) { 181 if (isnet) {
177 error_msg( 182 error_msg(_("%s: cannot use a NETWORK as gateway!"), gateway);
178 _("%s: cannot use a NETWORK as gateway!"),
179 gateway);
180 return E_OPTERR; 183 return E_OPTERR;
181 } 184 }
182 rt.rt_flags |= RTF_GATEWAY; 185 rt.rt_flags |= RTF_GATEWAY;
@@ -184,7 +187,7 @@ INET_setroute(int action, int options, char **args)
184 continue; 187 continue;
185 } 188 }
186 189
187 if (strcmp(*args, "mss")==0) { 190 if (strcmp(*args, "mss") == 0) {
188 args++; 191 args++;
189 rt.rt_flags |= RTF_MSS; 192 rt.rt_flags |= RTF_MSS;
190 if (!*args) 193 if (!*args)
@@ -198,7 +201,7 @@ INET_setroute(int action, int options, char **args)
198 continue; 201 continue;
199 } 202 }
200 203
201 if (strcmp(*args, "window")==0) { 204 if (strcmp(*args, "window") == 0) {
202 args++; 205 args++;
203 if (!*args) 206 if (!*args)
204 show_usage(); 207 show_usage();
@@ -212,7 +215,7 @@ INET_setroute(int action, int options, char **args)
212 continue; 215 continue;
213 } 216 }
214 217
215 if (strcmp(*args, "irtt")==0) { 218 if (strcmp(*args, "irtt") == 0) {
216 args++; 219 args++;
217 if (!*args) 220 if (!*args)
218 show_usage(); 221 show_usage();
@@ -220,44 +223,44 @@ INET_setroute(int action, int options, char **args)
220#if HAVE_RTF_IRTT 223#if HAVE_RTF_IRTT
221 rt.rt_flags |= RTF_IRTT; 224 rt.rt_flags |= RTF_IRTT;
222 rt.rt_irtt = atoi(*(args - 1)); 225 rt.rt_irtt = atoi(*(args - 1));
223 rt.rt_irtt *= (HZ / 100); /* FIXME */ 226 rt.rt_irtt *= (HZ / 100); /* FIXME */
224#if 0 /* FIXME: do we need to check anything of this? */ 227#if 0 /* FIXME: do we need to check anything of this? */
225 if (rt.rt_irtt < 1 || rt.rt_irtt > (120 * HZ)) { 228 if (rt.rt_irtt < 1 || rt.rt_irtt > (120 * HZ)) {
226 error_msg(_("Invalid initial rtt.")); 229 error_msg(_("Invalid initial rtt."));
227 return E_OPTERR; 230 return E_OPTERR;
228 } 231 }
229#endif 232#endif
230#else 233#else
231 ENOSUPP("inet_setroute", "RTF_IRTT"); /* XXX Fixme */ 234 ENOSUPP("inet_setroute", "RTF_IRTT"); /* XXX Fixme */
232#endif 235#endif
233 continue; 236 continue;
234 } 237 }
235 238
236 if (strcmp(*args, "reject")==0) { 239 if (strcmp(*args, "reject") == 0) {
237 args++; 240 args++;
238#if HAVE_RTF_REJECT 241#if HAVE_RTF_REJECT
239 rt.rt_flags |= RTF_REJECT; 242 rt.rt_flags |= RTF_REJECT;
240#else 243#else
241 ENOSUPP("inet_setroute", "RTF_REJECT"); /* XXX Fixme */ 244 ENOSUPP("inet_setroute", "RTF_REJECT"); /* XXX Fixme */
242#endif 245#endif
243 continue; 246 continue;
244 } 247 }
245 if (strcmp(*args, "mod")==0) { 248 if (strcmp(*args, "mod") == 0) {
246 args++; 249 args++;
247 rt.rt_flags |= RTF_MODIFIED; 250 rt.rt_flags |= RTF_MODIFIED;
248 continue; 251 continue;
249 } 252 }
250 if (strcmp(*args, "dyn")==0) { 253 if (strcmp(*args, "dyn") == 0) {
251 args++; 254 args++;
252 rt.rt_flags |= RTF_DYNAMIC; 255 rt.rt_flags |= RTF_DYNAMIC;
253 continue; 256 continue;
254 } 257 }
255 if (strcmp(*args, "reinstate")==0) { 258 if (strcmp(*args, "reinstate") == 0) {
256 args++; 259 args++;
257 rt.rt_flags |= RTF_REINSTATE; 260 rt.rt_flags |= RTF_REINSTATE;
258 continue; 261 continue;
259 } 262 }
260 if (strcmp(*args, "device")==0 || strcmp(*args, "dev")==0) { 263 if (strcmp(*args, "device") == 0 || strcmp(*args, "dev") == 0) {
261 args++; 264 args++;
262 if (rt.rt_dev || *args == NULL) 265 if (rt.rt_dev || *args == NULL)
263 show_usage(); 266 show_usage();
@@ -268,7 +271,7 @@ INET_setroute(int action, int options, char **args)
268 if (!rt.rt_dev) { 271 if (!rt.rt_dev) {
269 rt.rt_dev = *args++; 272 rt.rt_dev = *args++;
270 if (*args) 273 if (*args)
271 show_usage(); /* must be last to catch typos */ 274 show_usage(); /* must be last to catch typos */
272 } else { 275 } else {
273 show_usage(); 276 show_usage();
274 } 277 }
@@ -282,11 +285,11 @@ INET_setroute(int action, int options, char **args)
282 /* sanity checks.. */ 285 /* sanity checks.. */
283 if (mask_in_addr(rt)) { 286 if (mask_in_addr(rt)) {
284 unsigned long mask = mask_in_addr(rt); 287 unsigned long mask = mask_in_addr(rt);
288
285 mask = ~ntohl(mask); 289 mask = ~ntohl(mask);
286 if ((rt.rt_flags & RTF_HOST) && mask != 0xffffffff) { 290 if ((rt.rt_flags & RTF_HOST) && mask != 0xffffffff) {
287 error_msg( 291 error_msg(_("netmask %.8x doesn't make sense with host route"),
288 _("netmask %.8x doesn't make sense with host route"), 292 (unsigned int) mask);
289 (unsigned int)mask);
290 return E_OPTERR; 293 return E_OPTERR;
291 } 294 }
292 if (mask & (mask + 1)) { 295 if (mask & (mask + 1)) {
@@ -356,9 +359,9 @@ static int INET6_setroute(int action, int options, char **args)
356 } else { 359 } else {
357 prefix_len = 128; 360 prefix_len = 128;
358 } 361 }
359 if (INET6_resolve(target, (struct sockaddr_in6 *)&sa6) < 0) { 362 if (INET6_resolve(target, (struct sockaddr_in6 *) &sa6) < 0) {
360 error_msg(_("can't resolve %s"), target); 363 error_msg(_("can't resolve %s"), target);
361 return EXIT_FAILURE; /* XXX change to E_something */ 364 return EXIT_FAILURE; /* XXX change to E_something */
362 } 365 }
363 } 366 }
364 367
@@ -392,12 +395,12 @@ static int INET6_setroute(int action, int options, char **args)
392 if (rt.rtmsg_flags & RTF_GATEWAY) 395 if (rt.rtmsg_flags & RTF_GATEWAY)
393 show_usage(); 396 show_usage();
394 strcpy(gateway, *args); 397 strcpy(gateway, *args);
395 if (INET6_resolve(gateway, (struct sockaddr_in6 *)&sa6) < 0) { 398 if (INET6_resolve(gateway, (struct sockaddr_in6 *) &sa6) < 0) {
396 error_msg(_("can't resolve gw %s"), gateway); 399 error_msg(_("can't resolve gw %s"), gateway);
397 return (E_LOOKUP); 400 return (E_LOOKUP);
398 } 401 }
399 memcpy(&rt.rtmsg_gateway, sa6.sin6_addr.s6_addr, 402 memcpy(&rt.rtmsg_gateway, sa6.sin6_addr.s6_addr,
400 sizeof(struct in6_addr)); 403 sizeof(struct in6_addr));
401 rt.rtmsg_flags |= RTF_GATEWAY; 404 rt.rtmsg_flags |= RTF_GATEWAY;
402 args++; 405 args++;
403 continue; 406 continue;
@@ -463,95 +466,98 @@ static int INET6_setroute(int action, int options, char **args)
463 466
464#ifndef RTF_UP 467#ifndef RTF_UP
465/* Keep this in sync with /usr/src/linux/include/linux/route.h */ 468/* Keep this in sync with /usr/src/linux/include/linux/route.h */
466#define RTF_UP 0x0001 /* route usable */ 469#define RTF_UP 0x0001 /* route usable */
467#define RTF_GATEWAY 0x0002 /* destination is a gateway */ 470#define RTF_GATEWAY 0x0002 /* destination is a gateway */
468#define RTF_HOST 0x0004 /* host entry (net otherwise) */ 471#define RTF_HOST 0x0004 /* host entry (net otherwise) */
469#define RTF_REINSTATE 0x0008 /* reinstate route after tmout */ 472#define RTF_REINSTATE 0x0008 /* reinstate route after tmout */
470#define RTF_DYNAMIC 0x0010 /* created dyn. (by redirect) */ 473#define RTF_DYNAMIC 0x0010 /* created dyn. (by redirect) */
471#define RTF_MODIFIED 0x0020 /* modified dyn. (by redirect) */ 474#define RTF_MODIFIED 0x0020 /* modified dyn. (by redirect) */
472#define RTF_MTU 0x0040 /* specific MTU for this route */ 475#define RTF_MTU 0x0040 /* specific MTU for this route */
473#ifndef RTF_MSS 476#ifndef RTF_MSS
474#define RTF_MSS RTF_MTU /* Compatibility :-( */ 477#define RTF_MSS RTF_MTU /* Compatibility :-( */
475#endif 478#endif
476#define RTF_WINDOW 0x0080 /* per route window clamping */ 479#define RTF_WINDOW 0x0080 /* per route window clamping */
477#define RTF_IRTT 0x0100 /* Initial round trip time */ 480#define RTF_IRTT 0x0100 /* Initial round trip time */
478#define RTF_REJECT 0x0200 /* Reject route */ 481#define RTF_REJECT 0x0200 /* Reject route */
479#endif 482#endif
480 483
481void displayroutes(int noresolve, int netstatfmt) 484void displayroutes(int noresolve, int netstatfmt)
482{ 485{
483 char buff[256]; 486 char buff[256];
484 int nl = 0 ; 487 int nl = 0;
485 struct in_addr dest; 488 struct in_addr dest;
486 struct in_addr gw; 489 struct in_addr gw;
487 struct in_addr mask; 490 struct in_addr mask;
488 int flgs, ref, use, metric, mtu, win, ir; 491 int flgs, ref, use, metric, mtu, win, ir;
489 char flags[64]; 492 char flags[64];
490 unsigned long int d,g,m; 493 unsigned long int d, g, m;
491 494
492 char sdest[16], sgw[16]; 495 char sdest[16], sgw[16];
493 496
494 FILE *fp = xfopen("/proc/net/route", "r"); 497 FILE *fp = xfopen("/proc/net/route", "r");
495 498
496 if(noresolve) 499 if (noresolve)
497 noresolve = 0x0fff; 500 noresolve = 0x0fff;
498 501
499 while( fgets(buff, sizeof(buff), fp) != NULL ) { 502 while (fgets(buff, sizeof(buff), fp) != NULL) {
500 if(nl) { 503 if (nl) {
501 int ifl = 0; 504 int ifl = 0;
502 int numeric; 505 int numeric;
503 struct sockaddr_in s_addr; 506 struct sockaddr_in s_addr;
504 507
505 while(buff[ifl]!=' ' && buff[ifl]!='\t' && buff[ifl]!='\0') 508 while (buff[ifl] != ' ' && buff[ifl] != '\t' && buff[ifl] != '\0')
506 ifl++; 509 ifl++;
507 buff[ifl]=0; /* interface */ 510 buff[ifl] = 0; /* interface */
508 if(sscanf(buff+ifl+1, "%lx%lx%X%d%d%d%lx%d%d%d", 511 if (sscanf(buff + ifl + 1, "%lx%lx%X%d%d%d%lx%d%d%d",
509 &d, &g, &flgs, &ref, &use, &metric, &m, &mtu, &win, &ir )!=10) { 512 &d, &g, &flgs, &ref, &use, &metric, &m, &mtu, &win,
510 error_msg_and_die( "Unsuported kernel route format\n"); 513 &ir) != 10) {
514 error_msg_and_die("Unsuported kernel route format\n");
511 } 515 }
512 if(nl==1) { 516 if (nl == 1) {
513 printf("Kernel IP routing table\n"); 517 printf("Kernel IP routing table\n");
514 printf("Destination Gateway Genmask Flags %s Iface\n", 518 printf
515 netstatfmt ? " MSS Window irtt" : "Metric Ref Use"); 519 ("Destination Gateway Genmask Flags %s Iface\n",
520 netstatfmt ? " MSS Window irtt" : "Metric Ref Use");
516 } 521 }
517 ifl = 0; /* parse flags */ 522 ifl = 0; /* parse flags */
518 if(flgs&RTF_UP) { 523 if (flgs & RTF_UP) {
519 if(flgs&RTF_REJECT) 524 if (flgs & RTF_REJECT)
520 flags[ifl++]='!'; 525 flags[ifl++] = '!';
521 else 526 else
522 flags[ifl++]='U'; 527 flags[ifl++] = 'U';
523 if(flgs&RTF_GATEWAY) 528 if (flgs & RTF_GATEWAY)
524 flags[ifl++]='G'; 529 flags[ifl++] = 'G';
525 if(flgs&RTF_HOST) 530 if (flgs & RTF_HOST)
526 flags[ifl++]='H'; 531 flags[ifl++] = 'H';
527 if(flgs&RTF_REINSTATE) 532 if (flgs & RTF_REINSTATE)
528 flags[ifl++]='R'; 533 flags[ifl++] = 'R';
529 if(flgs&RTF_DYNAMIC) 534 if (flgs & RTF_DYNAMIC)
530 flags[ifl++]='D'; 535 flags[ifl++] = 'D';
531 if(flgs&RTF_MODIFIED) 536 if (flgs & RTF_MODIFIED)
532 flags[ifl++]='M'; 537 flags[ifl++] = 'M';
533 flags[ifl]=0; 538 flags[ifl] = 0;
534 dest.s_addr = d; 539 dest.s_addr = d;
535 gw.s_addr = g; 540 gw.s_addr = g;
536 mask.s_addr = m; 541 mask.s_addr = m;
537 memset(&s_addr, 0, sizeof(struct sockaddr_in)); 542 memset(&s_addr, 0, sizeof(struct sockaddr_in));
538 s_addr.sin_family = AF_INET; 543 s_addr.sin_family = AF_INET;
539 s_addr.sin_addr = dest; 544 s_addr.sin_addr = dest;
540 numeric = noresolve | 0x8000; /* default instead of * */ 545 numeric = noresolve | 0x8000; /* default instead of * */
541 INET_rresolve(sdest, sizeof(sdest), &s_addr, numeric, m); 546 INET_rresolve(sdest, sizeof(sdest), &s_addr, numeric, m);
542 numeric = noresolve | 0x4000; /* host instead of net */ 547 numeric = noresolve | 0x4000; /* host instead of net */
543 s_addr.sin_addr = gw; 548 s_addr.sin_addr = gw;
544 INET_rresolve(sgw, sizeof(sgw), &s_addr, numeric, m); 549 INET_rresolve(sgw, sizeof(sgw), &s_addr, numeric, m);
545 550
546 printf("%-16s%-16s%-16s%-6s", sdest, sgw, inet_ntoa(mask), flags); 551 printf("%-16s%-16s%-16s%-6s", sdest, sgw, inet_ntoa(mask),
547 if ( netstatfmt ) 552 flags);
548 printf("%5d %-5d %6d %s\n", mtu, win, ir, buff); 553 if (netstatfmt)
549 else 554 printf("%5d %-5d %6d %s\n", mtu, win, ir, buff);
550 printf("%-6d %-2d %7d %s\n", metric, ref, use, buff); 555 else
556 printf("%-6d %-2d %7d %s\n", metric, ref, use, buff);
551 } 557 }
552 } 558 }
553 nl++; 559 nl++;
554 } 560 }
555} 561}
556 562
557#if CONFIG_FEATURE_IPV6 563#if CONFIG_FEATURE_IPV6
@@ -567,72 +573,75 @@ static void INET6_displayroutes(int noresolve)
567 char addr6p[8][5], saddr6p[8][5], naddr6p[8][5]; 573 char addr6p[8][5], saddr6p[8][5], naddr6p[8][5];
568 574
569 FILE *fp = xfopen("/proc/net/ipv6_route", "r"); 575 FILE *fp = xfopen("/proc/net/ipv6_route", "r");
570 flags[0]='U';
571 576
572 if(noresolve) 577 flags[0] = 'U';
578
579 if (noresolve)
573 noresolve = 0x0fff; 580 noresolve = 0x0fff;
574 numeric = noresolve | 0x8000; /* default instead of * */ 581 numeric = noresolve | 0x8000; /* default instead of * */
575 582
576 printf("Kernel IPv6 routing table\n" 583 printf("Kernel IPv6 routing table\n"
577 "Destination " 584 "Destination "
578 "Next Hop " 585 "Next Hop "
579 "Flags Metric Ref Use Iface\n"); 586 "Flags Metric Ref Use Iface\n");
580 587
581 while( fgets(buff, sizeof(buff), fp) != NULL ) { 588 while (fgets(buff, sizeof(buff), fp) != NULL) {
582 int ifl; 589 int ifl;
583 590
584 if(sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x " 591 if (sscanf(buff, "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
585 "%4s%4s%4s%4s%4s%4s%4s%4s %02x " 592 "%4s%4s%4s%4s%4s%4s%4s%4s %02x "
586 "%4s%4s%4s%4s%4s%4s%4s%4s %08x %08x %08x %08x %s\n", 593 "%4s%4s%4s%4s%4s%4s%4s%4s %08x %08x %08x %08x %s\n",
587 addr6p[0], addr6p[1], addr6p[2], addr6p[3], 594 addr6p[0], addr6p[1], addr6p[2], addr6p[3],
588 addr6p[4], addr6p[5], addr6p[6], addr6p[7], 595 addr6p[4], addr6p[5], addr6p[6], addr6p[7],
589 &prefix_len, 596 &prefix_len,
590 saddr6p[0], saddr6p[1], saddr6p[2], saddr6p[3], 597 saddr6p[0], saddr6p[1], saddr6p[2], saddr6p[3],
591 saddr6p[4], saddr6p[5], saddr6p[6], saddr6p[7], 598 saddr6p[4], saddr6p[5], saddr6p[6], saddr6p[7],
592 &slen, 599 &slen,
593 naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3], 600 naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3],
594 naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7], 601 naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7],
595 &metric, &use, &refcnt, &iflags, iface)!=31) { 602 &metric, &use, &refcnt, &iflags, iface) != 31) {
596 error_msg_and_die( "Unsuported kernel route format\n"); 603 error_msg_and_die("Unsuported kernel route format\n");
597 } 604 }
598 605
599 ifl = 1; /* parse flags */ 606 ifl = 1; /* parse flags */
600 if (!(iflags & RTF_UP)) 607 if (!(iflags & RTF_UP))
601 continue; 608 continue;
602 if (iflags & RTF_GATEWAY) 609 if (iflags & RTF_GATEWAY)
603 flags[ifl++]='G'; 610 flags[ifl++] = 'G';
604 if (iflags & RTF_HOST) 611 if (iflags & RTF_HOST)
605 flags[ifl++]='H'; 612 flags[ifl++] = 'H';
606 if (iflags & RTF_DEFAULT) 613 if (iflags & RTF_DEFAULT)
607 flags[ifl++]='D'; 614 flags[ifl++] = 'D';
608 if (iflags & RTF_ADDRCONF) 615 if (iflags & RTF_ADDRCONF)
609 flags[ifl++]='A'; 616 flags[ifl++] = 'A';
610 if (iflags & RTF_CACHE) 617 if (iflags & RTF_CACHE)
611 flags[ifl++]='C'; 618 flags[ifl++] = 'C';
612 flags[ifl]=0; 619 flags[ifl] = 0;
613 620
614 /* Fetch and resolve the target address. */ 621 /* Fetch and resolve the target address. */
615 snprintf(addr6, sizeof(addr6), "%s:%s:%s:%s:%s:%s:%s:%s", 622 snprintf(addr6, sizeof(addr6), "%s:%s:%s:%s:%s:%s:%s:%s",
616 addr6p[0], addr6p[1], addr6p[2], addr6p[3], 623 addr6p[0], addr6p[1], addr6p[2], addr6p[3],
617 addr6p[4], addr6p[5], addr6p[6], addr6p[7]); 624 addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
618 inet_pton(AF_INET6, addr6, (struct sockaddr *) &saddr6.sin6_addr); 625 inet_pton(AF_INET6, addr6, (struct sockaddr *) &saddr6.sin6_addr);
619 saddr6.sin6_family=AF_INET6; 626 saddr6.sin6_family = AF_INET6;
620 627
621 INET6_rresolve(addr6, sizeof(addr6), (struct sockaddr_in6 *) &saddr6, numeric); 628 INET6_rresolve(addr6, sizeof(addr6), (struct sockaddr_in6 *) &saddr6,
629 numeric);
622 snprintf(addr6, sizeof(addr6), "%s/%d", addr6, prefix_len); 630 snprintf(addr6, sizeof(addr6), "%s/%d", addr6, prefix_len);
623 631
624 /* Fetch and resolve the nexthop address. */ 632 /* Fetch and resolve the nexthop address. */
625 snprintf(naddr6, sizeof(naddr6), "%s:%s:%s:%s:%s:%s:%s:%s", 633 snprintf(naddr6, sizeof(naddr6), "%s:%s:%s:%s:%s:%s:%s:%s",
626 naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3], 634 naddr6p[0], naddr6p[1], naddr6p[2], naddr6p[3],
627 naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7]); 635 naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7]);
628 inet_pton(AF_INET6, naddr6, (struct sockaddr *) &snaddr6.sin6_addr); 636 inet_pton(AF_INET6, naddr6, (struct sockaddr *) &snaddr6.sin6_addr);
629 snaddr6.sin6_family=AF_INET6; 637 snaddr6.sin6_family = AF_INET6;
630 638
631 INET6_rresolve(naddr6, sizeof(naddr6), (struct sockaddr_in6 *) &snaddr6, numeric); 639 INET6_rresolve(naddr6, sizeof(naddr6),
640 (struct sockaddr_in6 *) &snaddr6, numeric);
632 641
633 /* Print the info. */ 642 /* Print the info. */
634 printf("%-43s %-39s %-5s %-6d %-2d %7d %-8s\n", 643 printf("%-43s %-39s %-5s %-6d %-2d %7d %-8s\n",
635 addr6, naddr6, flags, metric, refcnt, use, iface); 644 addr6, naddr6, flags, metric, refcnt, use, iface);
636 } 645 }
637} 646}
638#endif 647#endif
@@ -641,56 +650,58 @@ int route_main(int argc, char **argv)
641{ 650{
642 int opt; 651 int opt;
643 int what = 0; 652 int what = 0;
653
644#if CONFIG_FEATURE_IPV6 654#if CONFIG_FEATURE_IPV6
645 int af=AF_INET; 655 int af = AF_INET;
646#endif 656#endif
647 657
648 if ( !argv [1] || ( argv [1][0] == '-' )) { 658 if (!argv[1] || (argv[1][0] == '-')) {
649 /* check options */ 659 /* check options */
650 int noresolve = 0; 660 int noresolve = 0;
651 int extended = 0; 661 int extended = 0;
652 662
653 while ((opt = getopt(argc, argv, "A:ne")) > 0) { 663 while ((opt = getopt(argc, argv, "A:ne")) > 0) {
654 switch (opt) { 664 switch (opt) {
655 case 'n': 665 case 'n':
656 noresolve = 1; 666 noresolve = 1;
657 break; 667 break;
658 case 'e': 668 case 'e':
659 extended = 1; 669 extended = 1;
660 break; 670 break;
661 case 'A': 671 case 'A':
662#if CONFIG_FEATURE_IPV6 672#if CONFIG_FEATURE_IPV6
663 if (strcmp(optarg, "inet6")==0) 673 if (strcmp(optarg, "inet6") == 0)
664 af=AF_INET6; 674 af = AF_INET6;
665 break; 675 break;
666#endif 676#endif
667 default: 677 default:
668 show_usage ( ); 678 show_usage();
669 } 679 }
670 } 680 }
671 681
672#if CONFIG_FEATURE_IPV6 682#if CONFIG_FEATURE_IPV6
673 if (af==AF_INET6) 683 if (af == AF_INET6)
674 INET6_displayroutes(*argv != NULL); 684 INET6_displayroutes(*argv != NULL);
675 else 685 else
676#endif 686#endif
677 displayroutes ( noresolve, extended ); 687 displayroutes(noresolve, extended);
678 return EXIT_SUCCESS; 688 return EXIT_SUCCESS;
679 } else { 689 } else {
680 /* check verb */ 690 /* check verb */
681 if (strcmp( argv [1], "add")==0) 691 if (strcmp(argv[1], "add") == 0)
682 what = RTACTION_ADD; 692 what = RTACTION_ADD;
683 else if (strcmp( argv [1], "del")==0 || strcmp( argv [1], "delete")==0) 693 else if (strcmp(argv[1], "del") == 0
694 || strcmp(argv[1], "delete") == 0)
684 what = RTACTION_DEL; 695 what = RTACTION_DEL;
685 else if (strcmp( argv [1], "flush")==0) 696 else if (strcmp(argv[1], "flush") == 0)
686 what = RTACTION_FLUSH; 697 what = RTACTION_FLUSH;
687 else 698 else
688 show_usage(); 699 show_usage();
689 } 700 }
690 701
691#if CONFIG_FEATURE_IPV6 702#if CONFIG_FEATURE_IPV6
692 if (af==AF_INET6) 703 if (af == AF_INET6)
693 return INET6_setroute(what, 0, argv+2); 704 return INET6_setroute(what, 0, argv + 2);
694#endif 705#endif
695 return INET_setroute(what, 0, argv+2 ); 706 return INET_setroute(what, 0, argv + 2);
696} 707}