aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/ip.c2
-rw-r--r--networking/libiproute/ipaddress.c20
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 */
601static int ipaddr_modify(int cmd, char **argv) 601static 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)
749int FAST_FUNC do_ipaddr(char **argv) 749int 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}