aboutsummaryrefslogtreecommitdiff
path: root/networking/libiproute/ipaddress.c
diff options
context:
space:
mode:
Diffstat (limited to 'networking/libiproute/ipaddress.c')
-rw-r--r--networking/libiproute/ipaddress.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
index 3fd3f4478..aa4779ad1 100644
--- a/networking/libiproute/ipaddress.c
+++ b/networking/libiproute/ipaddress.c
@@ -627,10 +627,12 @@ static int ipaddr_modify(int cmd, char **argv)
627 req.ifa.ifa_family = preferred_family; 627 req.ifa.ifa_family = preferred_family;
628 628
629 while (*argv) { 629 while (*argv) {
630 const smalluint arg = index_in_strings(option, *argv); 630 unsigned arg = index_in_strings(option, *argv);
631 if (arg <= 1) { /* peer, remote */ 631 /* if search fails, "local" is assumed */
632 if ((int)arg >= 0)
632 NEXT_ARG(); 633 NEXT_ARG();
633 634
635 if (arg <= 1) { /* peer, remote */
634 if (peer_len) { 636 if (peer_len) {
635 duparg("peer", *argv); 637 duparg("peer", *argv);
636 } 638 }
@@ -643,7 +645,6 @@ static int ipaddr_modify(int cmd, char **argv)
643 req.ifa.ifa_prefixlen = peer.bitlen; 645 req.ifa.ifa_prefixlen = peer.bitlen;
644 } else if (arg <= 3) { /* broadcast, brd */ 646 } else if (arg <= 3) { /* broadcast, brd */
645 inet_prefix addr; 647 inet_prefix addr;
646 NEXT_ARG();
647 if (brd_len) { 648 if (brd_len) {
648 duparg("broadcast", *argv); 649 duparg("broadcast", *argv);
649 } 650 }
@@ -660,7 +661,6 @@ static int ipaddr_modify(int cmd, char **argv)
660 } 661 }
661 } else if (arg == 4) { /* anycast */ 662 } else if (arg == 4) { /* anycast */
662 inet_prefix addr; 663 inet_prefix addr;
663 NEXT_ARG();
664 if (any_len) { 664 if (any_len) {
665 duparg("anycast", *argv); 665 duparg("anycast", *argv);
666 } 666 }
@@ -672,22 +672,18 @@ static int ipaddr_modify(int cmd, char **argv)
672 any_len = addr.bytelen; 672 any_len = addr.bytelen;
673 } else if (arg == 5) { /* scope */ 673 } else if (arg == 5) { /* scope */
674 uint32_t scope = 0; 674 uint32_t scope = 0;
675 NEXT_ARG();
676 if (rtnl_rtscope_a2n(&scope, *argv)) { 675 if (rtnl_rtscope_a2n(&scope, *argv)) {
677 invarg(*argv, "scope"); 676 invarg(*argv, "scope");
678 } 677 }
679 req.ifa.ifa_scope = scope; 678 req.ifa.ifa_scope = scope;
680 scoped = 1; 679 scoped = 1;
681 } else if (arg == 6) { /* dev */ 680 } else if (arg == 6) { /* dev */
682 NEXT_ARG();
683 d = *argv; 681 d = *argv;
684 } else if (arg == 7) { /* label */ 682 } else if (arg == 7) { /* label */
685 NEXT_ARG();
686 l = *argv; 683 l = *argv;
687 addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l) + 1); 684 addattr_l(&req.n, sizeof(req), IFA_LABEL, l, strlen(l) + 1);
688 } else { 685 } else {
689 if (arg == 8) /* local */ 686 /* local (specified or assumed) */
690 NEXT_ARG();
691 if (local_len) { 687 if (local_len) {
692 duparg2("local", *argv); 688 duparg2("local", *argv);
693 } 689 }
@@ -724,7 +720,7 @@ static int ipaddr_modify(int cmd, char **argv)
724 } 720 }
725 brd = peer; 721 brd = peer;
726 if (brd.bitlen <= 30) { 722 if (brd.bitlen <= 30) {
727 for (i=31; i>=brd.bitlen; i--) { 723 for (i = 31; i >= brd.bitlen; i--) {
728 if (brd_len == -1) 724 if (brd_len == -1)
729 brd.data[0] |= htonl(1<<(31-i)); 725 brd.data[0] |= htonl(1<<(31-i));
730 else 726 else
@@ -754,11 +750,11 @@ int FAST_FUNC do_ipaddr(char **argv)
754{ 750{
755 static const char commands[] ALIGN1 = 751 static const char commands[] ALIGN1 =
756 "add\0""delete\0""list\0""show\0""lst\0""flush\0"; 752 "add\0""delete\0""list\0""show\0""lst\0""flush\0";
757 smalluint cmd = 2; 753 int cmd = 2;
758 if (*argv) { 754 if (*argv) {
759 cmd = index_in_substrings(commands, *argv); 755 cmd = index_in_substrings(commands, *argv);
760 if (cmd > 5) 756 if (cmd < 0)
761 bb_error_msg_and_die(bb_msg_invalid_arg, *argv, applet_name); 757 invarg(*argv, applet_name);
762 argv++; 758 argv++;
763 if (cmd <= 1) 759 if (cmd <= 1)
764 return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv); 760 return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv);