[PATCH] ip addr: support change and replace commands
Michael Tokarev
mjt at tls.msk.ru
Tue Jun 23 13:27:54 UTC 2015
Ping?
20.05.2015 16:27, Michael Tokarev wrote:
> Signed-off-by: Michael Tokarev <mjt at tls.msk.ru>
> ---
> networking/ip.c | 2 +-
> networking/libiproute/ipaddress.c | 20 ++++++++++++--------
> 2 files changed, 13 insertions(+), 9 deletions(-)
>
> diff --git a/networking/ip.c b/networking/ip.c
> index 98fe621..d35345c 100644
> --- a/networking/ip.c
> +++ b/networking/ip.c
> @@ -33,7 +33,7 @@
> //usage: "{ {add|del} IFADDR dev STRING | {show|flush}\n"
> //usage: " [dev STRING] [to PREFIX] }"
> //usage:#define ipaddr_full_usage "\n\n"
> -//usage: "ipaddr {add|delete} IFADDR dev STRING\n"
> +//usage: "ipaddr {add|change|replace|delete} IFADDR dev STRING\n"
> //usage: "ipaddr {show|flush} [dev STRING] [scope SCOPE-ID]\n"
> //usage: " [to PREFIX] [label PATTERN]\n"
> //usage: " IFADDR := PREFIX | ADDR peer PREFIX\n"
> diff --git a/networking/libiproute/ipaddress.c b/networking/libiproute/ipaddress.c
> index 4072d06..85f3356 100644
> --- a/networking/libiproute/ipaddress.c
> +++ b/networking/libiproute/ipaddress.c
> @@ -598,7 +598,7 @@ static int default_scope(inet_prefix *lcl)
> }
>
> /* Return value becomes exitcode. It's okay to not return at all */
> -static int ipaddr_modify(int cmd, char **argv)
> +static int ipaddr_modify(int cmd, int flags, char **argv)
> {
> static const char option[] ALIGN1 =
> "peer\0""remote\0""broadcast\0""brd\0"
> @@ -622,7 +622,7 @@ static int ipaddr_modify(int cmd, char **argv)
> memset(&req, 0, sizeof(req));
>
> req.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifaddrmsg));
> - req.n.nlmsg_flags = NLM_F_REQUEST;
> + req.n.nlmsg_flags = NLM_F_REQUEST | flags;
> req.n.nlmsg_type = cmd;
> req.ifa.ifa_family = preferred_family;
>
> @@ -749,16 +749,20 @@ static int ipaddr_modify(int cmd, char **argv)
> int FAST_FUNC do_ipaddr(char **argv)
> {
> static const char commands[] ALIGN1 =
> - "add\0""delete\0""list\0""show\0""lst\0""flush\0";
> + /* 0 1 2 3 4 5 6 7 8 */
> + "add\0""change\0""chg\0""replace\0""delete\0""list\0""show\0""lst\0""flush\0";
> int cmd = 2;
> if (*argv) {
> cmd = index_in_substrings(commands, *argv);
> if (cmd < 0)
> invarg(*argv, applet_name);
> argv++;
> - if (cmd <= 1)
> - return ipaddr_modify((cmd == 0) ? RTM_NEWADDR : RTM_DELADDR, argv);
> - }
> - /* 2 == list, 3 == show, 4 == lst */
> - return ipaddr_list_or_flush(argv, cmd == 5);
> + if (cmd <= 4)
> + return ipaddr_modify(cmd == 4 ? RTM_DELADDR : RTM_NEWADDR,
> + cmd == 0 ? NLM_F_CREATE|NLM_F_EXCL :
> + cmd == 1 || cmd == 2 ? NLM_F_REPLACE :
> + cmd == 3 ? NLM_F_CREATE|NLM_F_REPLACE :
> + 0, argv);
> + }
> + return ipaddr_list_or_flush(argv, cmd == 8);
> }
>
More information about the busybox
mailing list