aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-11-28 11:17:19 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-11-28 11:17:19 +0000
commit1652855fbc830f41c7ee56ece1a30b328c4fb395 (patch)
treef07b98042dd8602c7f3ee119fc5ebecbc1052dcb
parenteaed78a91f20cddf2efa480ba71b2389b8ce6aab (diff)
downloadbusybox-w32-1652855fbc830f41c7ee56ece1a30b328c4fb395.tar.gz
busybox-w32-1652855fbc830f41c7ee56ece1a30b328c4fb395.tar.bz2
busybox-w32-1652855fbc830f41c7ee56ece1a30b328c4fb395.zip
Style, error_msg
-rw-r--r--networking/libiproute/iproute.c163
1 files changed, 103 insertions, 60 deletions
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
index fcfb409f2..e251b941e 100644
--- a/networking/libiproute/iproute.c
+++ b/networking/libiproute/iproute.c
@@ -90,48 +90,59 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
90 if (r->rtm_family == AF_INET6) { 90 if (r->rtm_family == AF_INET6) {
91 if (filter.tb) { 91 if (filter.tb) {
92 if (filter.tb < 0) { 92 if (filter.tb < 0) {
93 if (!(r->rtm_flags&RTM_F_CLONED)) 93 if (!(r->rtm_flags&RTM_F_CLONED)) {
94 return 0; 94 return 0;
95 }
95 } else { 96 } else {
96 if (r->rtm_flags&RTM_F_CLONED) 97 if (r->rtm_flags&RTM_F_CLONED) {
97 return 0; 98 return 0;
99 }
98 if (filter.tb == RT_TABLE_LOCAL) { 100 if (filter.tb == RT_TABLE_LOCAL) {
99 if (r->rtm_type != RTN_LOCAL) 101 if (r->rtm_type != RTN_LOCAL) {
100 return 0; 102 return 0;
103 }
101 } else if (filter.tb == RT_TABLE_MAIN) { 104 } else if (filter.tb == RT_TABLE_MAIN) {
102 if (r->rtm_type == RTN_LOCAL) 105 if (r->rtm_type == RTN_LOCAL) {
103 return 0; 106 return 0;
107 }
104 } else { 108 } else {
105 return 0; 109 return 0;
106 } 110 }
107 } 111 }
108 } 112 }
109 } else { 113 } else {
110 if (filter.tb > 0 && filter.tb != r->rtm_table) 114 if (filter.tb > 0 && filter.tb != r->rtm_table) {
111 return 0; 115 return 0;
116 }
112 } 117 }
113 if (filter.rdst.family && 118 if (filter.rdst.family &&
114 (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) 119 (r->rtm_family != filter.rdst.family || filter.rdst.bitlen > r->rtm_dst_len)) {
115 return 0; 120 return 0;
121 }
116 if (filter.mdst.family && 122 if (filter.mdst.family &&
117 (r->rtm_family != filter.mdst.family || 123 (r->rtm_family != filter.mdst.family ||
118 (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) 124 (filter.mdst.bitlen >= 0 && filter.mdst.bitlen < r->rtm_dst_len))) {
119 return 0; 125 return 0;
126 }
120 if (filter.rsrc.family && 127 if (filter.rsrc.family &&
121 (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) 128 (r->rtm_family != filter.rsrc.family || filter.rsrc.bitlen > r->rtm_src_len)) {
122 return 0; 129 return 0;
130 }
123 if (filter.msrc.family && 131 if (filter.msrc.family &&
124 (r->rtm_family != filter.msrc.family || 132 (r->rtm_family != filter.msrc.family ||
125 (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) 133 (filter.msrc.bitlen >= 0 && filter.msrc.bitlen < r->rtm_src_len))) {
126 return 0; 134 return 0;
135 }
127 136
128 memset(tb, 0, sizeof(tb)); 137 memset(tb, 0, sizeof(tb));
129 parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len); 138 parse_rtattr(tb, RTA_MAX, RTM_RTA(r), len);
130 139
131 if (n->nlmsg_type == RTM_DELROUTE) 140 if (n->nlmsg_type == RTM_DELROUTE) {
132 fprintf(fp, "Deleted "); 141 fprintf(fp, "Deleted ");
133 if (r->rtm_type != RTN_UNICAST && !filter.type) 142 }
143 if (r->rtm_type != RTN_UNICAST && !filter.type) {
134 fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1))); 144 fprintf(fp, "%s ", rtnl_rtntype_n2a(r->rtm_type, b1, sizeof(b1)));
145 }
135 146
136 if (tb[RTA_DST]) { 147 if (tb[RTA_DST]) {
137 if (r->rtm_dst_len != host_len) { 148 if (r->rtm_dst_len != host_len) {
@@ -178,8 +189,9 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
178 RTA_DATA(tb[RTA_GATEWAY]), 189 RTA_DATA(tb[RTA_GATEWAY]),
179 abuf, sizeof(abuf))); 190 abuf, sizeof(abuf)));
180 } 191 }
181 if (tb[RTA_OIF] && filter.oifmask != -1) 192 if (tb[RTA_OIF] && filter.oifmask != -1) {
182 fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF]))); 193 fprintf(fp, "dev %s ", ll_index_to_name(*(int*)RTA_DATA(tb[RTA_OIF])));
194 }
183 195
184 if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) { 196 if (tb[RTA_PREFSRC] && filter.rprefsrc.bitlen != host_len) {
185 /* Do not use format_host(). It is our local addr 197 /* Do not use format_host(). It is our local addr
@@ -191,22 +203,28 @@ int print_route(struct sockaddr_nl *who, struct nlmsghdr *n, void *arg)
191 RTA_DATA(tb[RTA_PREFSRC]), 203 RTA_DATA(tb[RTA_PREFSRC]),
192 abuf, sizeof(abuf))); 204 abuf, sizeof(abuf)));
193 } 205 }
194 if (tb[RTA_PRIORITY]) 206 if (tb[RTA_PRIORITY]) {
195 fprintf(fp, " metric %d ", *(__u32*)RTA_DATA(tb[RTA_PRIORITY])); 207 fprintf(fp, " metric %d ", *(__u32*)RTA_DATA(tb[RTA_PRIORITY]));
208 }
196 if (r->rtm_family == AF_INET6) { 209 if (r->rtm_family == AF_INET6) {
197 struct rta_cacheinfo *ci = NULL; 210 struct rta_cacheinfo *ci = NULL;
198 if (tb[RTA_CACHEINFO]) 211 if (tb[RTA_CACHEINFO]) {
199 ci = RTA_DATA(tb[RTA_CACHEINFO]); 212 ci = RTA_DATA(tb[RTA_CACHEINFO]);
213 }
200 if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) { 214 if ((r->rtm_flags & RTM_F_CLONED) || (ci && ci->rta_expires)) {
201 static int hz; 215 static int hz;
202 if (!hz) 216 if (!hz) {
203 hz = get_hz(); 217 hz = get_hz();
204 if (r->rtm_flags & RTM_F_CLONED) 218 }
219 if (r->rtm_flags & RTM_F_CLONED) {
205 fprintf(fp, "%s cache ", _SL_); 220 fprintf(fp, "%s cache ", _SL_);
206 if (ci->rta_expires) 221 }
222 if (ci->rta_expires) {
207 fprintf(fp, " expires %dsec", ci->rta_expires/hz); 223 fprintf(fp, " expires %dsec", ci->rta_expires/hz);
208 if (ci->rta_error != 0) 224 }
225 if (ci->rta_error != 0) {
209 fprintf(fp, " error %d", ci->rta_error); 226 fprintf(fp, " error %d", ci->rta_error);
227 }
210 } else if (ci) { 228 } else if (ci) {
211 if (ci->rta_error != 0) 229 if (ci->rta_error != 0)
212 fprintf(fp, " error %d", ci->rta_error); 230 fprintf(fp, " error %d", ci->rta_error);
@@ -260,16 +278,18 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
260 inet_prefix addr; 278 inet_prefix addr;
261 NEXT_ARG(); 279 NEXT_ARG();
262 get_addr(&addr, *argv, req.r.rtm_family); 280 get_addr(&addr, *argv, req.r.rtm_family);
263 if (req.r.rtm_family == AF_UNSPEC) 281 if (req.r.rtm_family == AF_UNSPEC) {
264 req.r.rtm_family = addr.family; 282 req.r.rtm_family = addr.family;
283 }
265 addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &addr.data, addr.bytelen); 284 addattr_l(&req.n, sizeof(req), RTA_PREFSRC, &addr.data, addr.bytelen);
266 } else if (strcmp(*argv, "via") == 0) { 285 } else if (strcmp(*argv, "via") == 0) {
267 inet_prefix addr; 286 inet_prefix addr;
268 gw_ok = 1; 287 gw_ok = 1;
269 NEXT_ARG(); 288 NEXT_ARG();
270 get_addr(&addr, *argv, req.r.rtm_family); 289 get_addr(&addr, *argv, req.r.rtm_family);
271 if (req.r.rtm_family == AF_UNSPEC) 290 if (req.r.rtm_family == AF_UNSPEC) {
272 req.r.rtm_family = addr.family; 291 req.r.rtm_family = addr.family;
292 }
273 addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen); 293 addattr_l(&req.n, sizeof(req), RTA_GATEWAY, &addr.data, addr.bytelen);
274 } else if (strcmp(*argv, "mtu") == 0) { 294 } else if (strcmp(*argv, "mtu") == 0) {
275 unsigned mtu; 295 unsigned mtu;
@@ -278,8 +298,9 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
278 mxlock |= (1<<RTAX_MTU); 298 mxlock |= (1<<RTAX_MTU);
279 NEXT_ARG(); 299 NEXT_ARG();
280 } 300 }
281 if (get_unsigned(&mtu, *argv, 0)) 301 if (get_unsigned(&mtu, *argv, 0)) {
282 invarg("\"mtu\" value is invalid\n", *argv); 302 invarg("\"mtu\" value is invalid\n", *argv);
303 }
283 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu); 304 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu);
284 } else if (matches(*argv, "protocol") == 0) { 305 } else if (matches(*argv, "protocol") == 0) {
285 int prot; 306 int prot;
@@ -306,21 +327,25 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
306 type_ok = 1; 327 type_ok = 1;
307 } 328 }
308 329
309 if (dst_ok) 330 if (dst_ok) {
310 duparg2("to", *argv); 331 duparg2("to", *argv);
332 }
311 get_prefix(&dst, *argv, req.r.rtm_family); 333 get_prefix(&dst, *argv, req.r.rtm_family);
312 if (req.r.rtm_family == AF_UNSPEC) 334 if (req.r.rtm_family == AF_UNSPEC) {
313 req.r.rtm_family = dst.family; 335 req.r.rtm_family = dst.family;
336 }
314 req.r.rtm_dst_len = dst.bitlen; 337 req.r.rtm_dst_len = dst.bitlen;
315 dst_ok = 1; 338 dst_ok = 1;
316 if (dst.bytelen) 339 if (dst.bytelen) {
317 addattr_l(&req.n, sizeof(req), RTA_DST, &dst.data, dst.bytelen); 340 addattr_l(&req.n, sizeof(req), RTA_DST, &dst.data, dst.bytelen);
341 }
318 } 342 }
319 argc--; argv++; 343 argc--; argv++;
320 } 344 }
321 345
322 if (rtnl_open(&rth, 0) < 0) 346 if (rtnl_open(&rth, 0) < 0) {
323 exit(1); 347 exit(1);
348 }
324 349
325 if (d) { 350 if (d) {
326 int idx; 351 int idx;
@@ -337,16 +362,19 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
337 } 362 }
338 363
339 if (mxrta->rta_len > RTA_LENGTH(0)) { 364 if (mxrta->rta_len > RTA_LENGTH(0)) {
340 if (mxlock) 365 if (mxlock) {
341 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_LOCK, mxlock); 366 rta_addattr32(mxrta, sizeof(mxbuf), RTAX_LOCK, mxlock);
367 }
342 addattr_l(&req.n, sizeof(req), RTA_METRICS, RTA_DATA(mxrta), RTA_PAYLOAD(mxrta)); 368 addattr_l(&req.n, sizeof(req), RTA_METRICS, RTA_DATA(mxrta), RTA_PAYLOAD(mxrta));
343 } 369 }
344 370
345 if (req.r.rtm_family == AF_UNSPEC) 371 if (req.r.rtm_family == AF_UNSPEC) {
346 req.r.rtm_family = AF_INET; 372 req.r.rtm_family = AF_INET;
373 }
347 374
348 if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0) 375 if (rtnl_talk(&rth, &req.n, 0, 0, NULL, NULL, NULL) < 0) {
349 exit(2); 376 exit(2);
377 }
350 378
351 return 0; 379 return 0;
352} 380}
@@ -390,8 +418,9 @@ static int iproute_list(int argc, char **argv)
390 NEXT_ARG(); 418 NEXT_ARG();
391 filter.protocolmask = -1; 419 filter.protocolmask = -1;
392 if (rtnl_rtprot_a2n(&prot, *argv)) { 420 if (rtnl_rtprot_a2n(&prot, *argv)) {
393 if (strcmp(*argv, "all") != 0) 421 if (strcmp(*argv, "all") != 0) {
394 invarg("invalid \"protocol\"\n", *argv); 422 invarg("invalid \"protocol\"\n", *argv);
423 }
395 prot = 0; 424 prot = 0;
396 filter.protocolmask = 0; 425 filter.protocolmask = 0;
397 } 426 }
@@ -439,11 +468,13 @@ static int iproute_list(int argc, char **argv)
439 argc--; argv++; 468 argc--; argv++;
440 } 469 }
441 470
442 if (do_ipv6 == AF_UNSPEC && filter.tb) 471 if (do_ipv6 == AF_UNSPEC && filter.tb) {
443 do_ipv6 = AF_INET; 472 do_ipv6 = AF_INET;
473 }
444 474
445 if (rtnl_open(&rth, 0) < 0) 475 if (rtnl_open(&rth, 0) < 0) {
446 exit(1); 476 exit(1);
477 }
447 478
448 ll_init_map(&rth); 479 ll_init_map(&rth);
449 480
@@ -552,8 +583,7 @@ int iproute_get(int argc, char **argv)
552 } 583 }
553 584
554 if (req.r.rtm_dst_len == 0) { 585 if (req.r.rtm_dst_len == 0) {
555 fprintf(stderr, "need at least destination address\n"); 586 error_msg_and_die("need at least destination address");
556 exit(1);
557 } 587 }
558 588
559 if (rtnl_open(&rth, 0) < 0) 589 if (rtnl_open(&rth, 0) < 0)
@@ -566,25 +596,27 @@ int iproute_get(int argc, char **argv)
566 596
567 if (idev) { 597 if (idev) {
568 if ((idx = ll_name_to_index(idev)) == 0) { 598 if ((idx = ll_name_to_index(idev)) == 0) {
569 fprintf(stderr, "Cannot find device \"%s\"\n", idev); 599 error_msg("Cannot find device \"%s\"", idev);
570 return -1; 600 return -1;
571 } 601 }
572 addattr32(&req.n, sizeof(req), RTA_IIF, idx); 602 addattr32(&req.n, sizeof(req), RTA_IIF, idx);
573 } 603 }
574 if (odev) { 604 if (odev) {
575 if ((idx = ll_name_to_index(odev)) == 0) { 605 if ((idx = ll_name_to_index(odev)) == 0) {
576 fprintf(stderr, "Cannot find device \"%s\"\n", odev); 606 error_msg("Cannot find device \"%s\"", odev);
577 return -1; 607 return -1;
578 } 608 }
579 addattr32(&req.n, sizeof(req), RTA_OIF, idx); 609 addattr32(&req.n, sizeof(req), RTA_OIF, idx);
580 } 610 }
581 } 611 }
582 612
583 if (req.r.rtm_family == AF_UNSPEC) 613 if (req.r.rtm_family == AF_UNSPEC) {
584 req.r.rtm_family = AF_INET; 614 req.r.rtm_family = AF_INET;
615 }
585 616
586 if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) 617 if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) {
587 exit(2); 618 exit(2);
619 }
588 620
589 if (connected && !from_ok) { 621 if (connected && !from_ok) {
590 struct rtmsg *r = NLMSG_DATA(&req.n); 622 struct rtmsg *r = NLMSG_DATA(&req.n);
@@ -592,17 +624,16 @@ int iproute_get(int argc, char **argv)
592 struct rtattr * tb[RTA_MAX+1]; 624 struct rtattr * tb[RTA_MAX+1];
593 625
594 if (print_route(NULL, &req.n, (void*)stdout) < 0) { 626 if (print_route(NULL, &req.n, (void*)stdout) < 0) {
595 fprintf(stderr, "An error :-)\n"); 627 error_msg_and_die("An error :-)");
596 exit(1);
597 } 628 }
598 629
599 if (req.n.nlmsg_type != RTM_NEWROUTE) { 630 if (req.n.nlmsg_type != RTM_NEWROUTE) {
600 fprintf(stderr, "Not a route?\n"); 631 error_msg("Not a route?");
601 return -1; 632 return -1;
602 } 633 }
603 len -= NLMSG_LENGTH(sizeof(*r)); 634 len -= NLMSG_LENGTH(sizeof(*r));
604 if (len < 0) { 635 if (len < 0) {
605 fprintf(stderr, "Wrong len %d\n", len); 636 error_msg("Wrong len %d", len);
606 return -1; 637 return -1;
607 } 638 }
608 639
@@ -613,25 +644,28 @@ int iproute_get(int argc, char **argv)
613 tb[RTA_PREFSRC]->rta_type = RTA_SRC; 644 tb[RTA_PREFSRC]->rta_type = RTA_SRC;
614 r->rtm_src_len = 8*RTA_PAYLOAD(tb[RTA_PREFSRC]); 645 r->rtm_src_len = 8*RTA_PAYLOAD(tb[RTA_PREFSRC]);
615 } else if (!tb[RTA_SRC]) { 646 } else if (!tb[RTA_SRC]) {
616 fprintf(stderr, "Failed to connect the route\n"); 647 error_msg("Failed to connect the route");
617 return -1; 648 return -1;
618 } 649 }
619 if (!odev && tb[RTA_OIF]) 650 if (!odev && tb[RTA_OIF]) {
620 tb[RTA_OIF]->rta_type = 0; 651 tb[RTA_OIF]->rta_type = 0;
621 if (tb[RTA_GATEWAY]) 652 }
653 if (tb[RTA_GATEWAY]) {
622 tb[RTA_GATEWAY]->rta_type = 0; 654 tb[RTA_GATEWAY]->rta_type = 0;
623 if (!idev && tb[RTA_IIF]) 655 }
656 if (!idev && tb[RTA_IIF]) {
624 tb[RTA_IIF]->rta_type = 0; 657 tb[RTA_IIF]->rta_type = 0;
658 }
625 req.n.nlmsg_flags = NLM_F_REQUEST; 659 req.n.nlmsg_flags = NLM_F_REQUEST;
626 req.n.nlmsg_type = RTM_GETROUTE; 660 req.n.nlmsg_type = RTM_GETROUTE;
627 661
628 if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) 662 if (rtnl_talk(&rth, &req.n, 0, 0, &req.n, NULL, NULL) < 0) {
629 exit(2); 663 exit(2);
664 }
630 } 665 }
631 666
632 if (print_route(NULL, &req.n, (void*)stdout) < 0) { 667 if (print_route(NULL, &req.n, (void*)stdout) < 0) {
633 fprintf(stderr, "An error :-)\n"); 668 error_msg_and_die("An error :-)");
634 exit(1);
635 } 669 }
636 670
637 exit(0); 671 exit(0);
@@ -646,36 +680,45 @@ void iproute_reset_filter()
646 680
647int do_iproute(int argc, char **argv) 681int do_iproute(int argc, char **argv)
648{ 682{
649 if (argc < 1) 683 if (argc < 1) {
650 return iproute_list(0, NULL); 684 return iproute_list(0, NULL);
685 }
651 686
652 if (matches(*argv, "add") == 0) 687 if (matches(*argv, "add") == 0) {
653 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL, 688 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_EXCL,
654 argc-1, argv+1); 689 argc-1, argv+1);
655 if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) 690 }
691 if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) {
656 return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE, 692 return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE,
657 argc-1, argv+1); 693 argc-1, argv+1);
658 if (matches(*argv, "replace") == 0) 694 }
695 if (matches(*argv, "replace") == 0) {
659 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE, 696 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE,
660 argc-1, argv+1); 697 argc-1, argv+1);
661 if (matches(*argv, "prepend") == 0) 698 }
699 if (matches(*argv, "prepend") == 0) {
662 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE, 700 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE,
663 argc-1, argv+1); 701 argc-1, argv+1);
664 if (matches(*argv, "append") == 0) 702 }
703 if (matches(*argv, "append") == 0) {
665 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND, 704 return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_APPEND,
666 argc-1, argv+1); 705 argc-1, argv+1);
667 if (matches(*argv, "test") == 0) 706 }
707 if (matches(*argv, "test") == 0) {
668 return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL, 708 return iproute_modify(RTM_NEWROUTE, NLM_F_EXCL,
669 argc-1, argv+1); 709 argc-1, argv+1);
670 if (matches(*argv, "delete") == 0) 710 }
711 if (matches(*argv, "delete") == 0) {
671 return iproute_modify(RTM_DELROUTE, 0, 712 return iproute_modify(RTM_DELROUTE, 0,
672 argc-1, argv+1); 713 argc-1, argv+1);
714 }
673 if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0 715 if (matches(*argv, "list") == 0 || matches(*argv, "show") == 0
674 || matches(*argv, "lst") == 0) 716 || matches(*argv, "lst") == 0) {
675 return iproute_list(argc-1, argv+1); 717 return iproute_list(argc-1, argv+1);
676 if (matches(*argv, "get") == 0) 718 }
719 if (matches(*argv, "get") == 0) {
677 return iproute_get(argc-1, argv+1); 720 return iproute_get(argc-1, argv+1);
678 fprintf(stderr, "Command \"%s\" is unknown, try \"ip route help\".\n", *argv); 721 }
679 exit(-1); 722 error_msg_and_die("Command \"%s\" is unknown, try \"ip route help\".", *argv);
680} 723}
681 724