diff options
-rw-r--r-- | networking/ip.c | 2 | ||||
-rw-r--r-- | networking/libiproute/ipaddress.c | 20 |
2 files changed, 13 insertions, 9 deletions
diff --git a/networking/ip.c b/networking/ip.c index 98fe621b1..d35345c36 100644 --- a/networking/ip.c +++ b/networking/ip.c | |||
@@ -33,7 +33,7 @@ | |||
33 | //usage: "{ {add|del} IFADDR dev STRING | {show|flush}\n" | 33 | //usage: "{ {add|del} IFADDR dev STRING | {show|flush}\n" |
34 | //usage: " [dev STRING] [to PREFIX] }" | 34 | //usage: " [dev STRING] [to PREFIX] }" |
35 | //usage:#define ipaddr_full_usage "\n\n" | 35 | //usage:#define ipaddr_full_usage "\n\n" |
36 | //usage: "ipaddr {add|delete} IFADDR dev STRING\n" | 36 | //usage: "ipaddr {add|change|replace|delete} IFADDR dev STRING\n" |
37 | //usage: "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" | 37 | //usage: "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n" |
38 | //usage: " [to PREFIX] [label PATTERN]\n" | 38 | //usage: " [to PREFIX] [label PATTERN]\n" |
39 | //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n" | 39 | //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n" |
diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c index 4072d0626..85f33560f 100644 --- a/networking/libiproute/ipaddress.c +++ b/networking/libiproute/ipaddress.c | |||
@@ -598,7 +598,7 @@ static int default_scope(inet_prefix *lcl) | |||
598 | } | 598 | } |
599 | 599 | ||
600 | /* Return value becomes exitcode. It's okay to not return at all */ | 600 | /* Return value becomes exitcode. It's okay to not return at all */ |
601 | static int ipaddr_modify(int cmd, char **argv) | 601 | static int ipaddr_modify(int cmd, int flags, char **argv) |
602 | { | 602 | { |
603 | static const char option[] ALIGN1 = | 603 | static const char option[] ALIGN1 = |
604 | "peer\0""remote\0""broadcast\0""brd\0" | 604 | "peer\0""remote\0""broadcast\0""brd\0" |
@@ -622,7 +622,7 @@ static int ipaddr_modify(int cmd, char **argv) | |||
622 | memset(&req, 0, sizeof(req)); | 622 | memset(&req, 0, sizeof(req)); |
623 | 623 | ||
624 | req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); | 624 | req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg)); |
625 | req.n.nlmsg_flags = NLM_F_REQUEST; | 625 | req.n.nlmsg_flags = NLM_F_REQUEST | flags; |
626 | req.n.nlmsg_type = cmd; | 626 | req.n.nlmsg_type = cmd; |
627 | req.ifa.ifa_family = preferred_family; | 627 | req.ifa.ifa_family = preferred_family; |
628 | 628 | ||
@@ -749,16 +749,20 @@ static int ipaddr_modify(int cmd, char **argv) | |||
749 | int FAST_FUNC do_ipaddr(char **argv) | 749 | int FAST_FUNC do_ipaddr(char **argv) |
750 | { | 750 | { |
751 | static const char commands[] ALIGN1 = | 751 | static const char commands[] ALIGN1 = |
752 | "add\0""delete\0""list\0""show\0""lst\0""flush\0"; | 752 | /* 0 1 2 3 4 5 6 7 8 */ |
753 | "add\0""change\0""chg\0""replace\0""delete\0""list\0""show\0""lst\0""flush\0"; | ||
753 | int cmd = 2; | 754 | int cmd = 2; |
754 | if (*argv) { | 755 | if (*argv) { |
755 | cmd = index_in_substrings(commands, *argv); | 756 | cmd = index_in_substrings(commands, *argv); |
756 | if (cmd < 0) | 757 | if (cmd < 0) |
757 | invarg(*argv, applet_name); | 758 | invarg(*argv, applet_name); |
758 | argv++; | 759 | argv++; |
759 | if (cmd <= 1) | 760 | if (cmd <= 4) |
760 | return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv); | 761 | return ipaddr_modify(cmd == 4 ? RTM_DELADDR : RTM_NEWADDR, |
761 | } | 762 | cmd == 0 ? NLM_F_CREATE|NLM_F_EXCL : |
762 | /* 2 == list, 3 == show, 4 == lst */ | 763 | cmd == 1 || cmd == 2 ? NLM_F_REPLACE : |
763 | return ipaddr_list_or_flush(argv, cmd == 5); | 764 | cmd == 3 ? NLM_F_CREATE|NLM_F_REPLACE : |
765 | 0, argv); | ||
766 | } | ||
767 | return ipaddr_list_or_flush(argv, cmd == 8); | ||
764 | } | 768 | } |