summaryrefslogtreecommitdiff
path: root/networking/libiproute
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2002-12-02 00:54:10 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2002-12-02 00:54:10 +0000
commit18eae0031adc86edc81cf398437f2716ef393bd3 (patch)
tree08e4a55e6f746fa0afb8a4649eb452d1d20ec6b3 /networking/libiproute
parentc82f2324bd28fe065bbde8a981caad6aebf289ae (diff)
downloadbusybox-w32-18eae0031adc86edc81cf398437f2716ef393bd3.tar.gz
busybox-w32-18eae0031adc86edc81cf398437f2716ef393bd3.tar.bz2
busybox-w32-18eae0031adc86edc81cf398437f2716ef393bd3.zip
Save a few more bytes
Diffstat (limited to 'networking/libiproute')
-rw-r--r--networking/libiproute/iproute.c76
1 files changed, 45 insertions, 31 deletions
diff --git a/networking/libiproute/iproute.c b/networking/libiproute/iproute.c
index cef67c34f..f29a5158a 100644
--- a/networking/libiproute/iproute.c
+++ b/networking/libiproute/iproute.c
@@ -534,6 +534,7 @@ static int iproute_get(int argc, char **argv)
534 char *odev = NULL; 534 char *odev = NULL;
535 int connected = 0; 535 int connected = 0;
536 int from_ok = 0; 536 int from_ok = 0;
537 const char *options[] = { "from", "iif", "oif", "dev", "notify", "connected", "to", 0 };
537 538
538 memset(&req, 0, sizeof(req)); 539 memset(&req, 0, sizeof(req));
539 540
@@ -552,40 +553,53 @@ static int iproute_get(int argc, char **argv)
552 req.r.rtm_tos = 0; 553 req.r.rtm_tos = 0;
553 554
554 while (argc > 0) { 555 while (argc > 0) {
555 if (matches(*argv, "from") == 0) { 556 switch (compare_string_array(options, *argv)) {
556 inet_prefix addr; 557 case 0: /* from */
557 NEXT_ARG(); 558 {
558 from_ok = 1; 559 inet_prefix addr;
559 get_prefix(&addr, *argv, req.r.rtm_family); 560 NEXT_ARG();
560 if (req.r.rtm_family == AF_UNSPEC) 561 from_ok = 1;
561 req.r.rtm_family = addr.family; 562 get_prefix(&addr, *argv, req.r.rtm_family);
562 if (addr.bytelen) 563 if (req.r.rtm_family == AF_UNSPEC) {
563 addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen); 564 req.r.rtm_family = addr.family;
564 req.r.rtm_src_len = addr.bitlen; 565 }
565 } else if (matches(*argv, "iif") == 0) { 566 if (addr.bytelen) {
566 NEXT_ARG(); 567 addattr_l(&req.n, sizeof(req), RTA_SRC, &addr.data, addr.bytelen);
567 idev = *argv; 568 }
568 } else if (matches(*argv, "oif") == 0 || 569 req.r.rtm_src_len = addr.bitlen;
569 strcmp(*argv, "dev") == 0) { 570 break;
570 NEXT_ARG(); 571 }
571 odev = *argv; 572 case 1: /* iif */
572 } else if (matches(*argv, "notify") == 0) { 573 NEXT_ARG();
573 req.r.rtm_flags |= RTM_F_NOTIFY; 574 idev = *argv;
574 } else if (matches(*argv, "connected") == 0) { 575 break;
575 connected = 1; 576 case 2: /* oif */
576 } else { 577 case 3: /* dev */
577 inet_prefix addr; 578 NEXT_ARG();
578 if (strcmp(*argv, "to") == 0) { 579 odev = *argv;
580 break;
581 case 4: /* notify */
582 req.r.rtm_flags |= RTM_F_NOTIFY;
583 break;
584 case 5: /* connected */
585 connected = 1;
586 break;
587 case 6: /* to */
579 NEXT_ARG(); 588 NEXT_ARG();
589 default:
590 {
591 inet_prefix addr;
592 get_prefix(&addr, *argv, req.r.rtm_family);
593 if (req.r.rtm_family == AF_UNSPEC) {
594 req.r.rtm_family = addr.family;
595 }
596 if (addr.bytelen) {
597 addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen);
598 }
599 req.r.rtm_dst_len = addr.bitlen;
580 } 600 }
581 get_prefix(&addr, *argv, req.r.rtm_family); 601 argc--; argv++;
582 if (req.r.rtm_family == AF_UNSPEC)
583 req.r.rtm_family = addr.family;
584 if (addr.bytelen)
585 addattr_l(&req.n, sizeof(req), RTA_DST, &addr.data, addr.bytelen);
586 req.r.rtm_dst_len = addr.bitlen;
587 } 602 }
588 argc--; argv++;
589 } 603 }
590 604
591 if (req.r.rtm_dst_len == 0) { 605 if (req.r.rtm_dst_len == 0) {