diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-02 00:54:10 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2002-12-02 00:54:10 +0000 |
commit | 18eae0031adc86edc81cf398437f2716ef393bd3 (patch) | |
tree | 08e4a55e6f746fa0afb8a4649eb452d1d20ec6b3 /networking/libiproute | |
parent | c82f2324bd28fe065bbde8a981caad6aebf289ae (diff) | |
download | busybox-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.c | 76 |
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) { |