Re: [PATCH] ip addr: support change and replace commands
On June 23, 2015 3:27:54 PM GMT+02:00, Michael Tokarev m...@tls.msk.ru wrote: Ping? 20.05.2015 16:27, Michael Tokarev wrote: Signed-off-by: Michael Tokarev m...@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\0remote\0broadcast\0brd\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\0delete\0list\0show\0lst\0flush\0; +/* 01 2 3 4 5 6 7 8 */ + add\0change\0chg\0replace\0delete\0list\0show\0lst\0flush\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, wrong comma? +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); bloat-o-meter output, please. Thanks, ___ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox
Re: [PATCH] ip addr: support change and replace commands
Ping? 20.05.2015 16:27, Michael Tokarev wrote: Signed-off-by: Michael Tokarev m...@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\0remote\0broadcast\0brd\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\0delete\0list\0show\0lst\0flush\0; + /* 01 2 3 4 5 6 7 8 */ + add\0change\0chg\0replace\0delete\0list\0show\0lst\0flush\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); } ___ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox
Re: [PATCH] ip addr: support change and replace commands
23.06.2015 18:44, Bernhard Reutner-Fischer wrote: On June 23, 2015 3:27:54 PM GMT+02:00, Michael Tokarev m...@tls.msk.ru wrote: Ping? 20.05.2015 16:27, Michael Tokarev wrote: Signed-off-by: Michael Tokarev m...@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\0remote\0broadcast\0brd\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\0delete\0list\0show\0lst\0flush\0; + /* 01 2 3 4 5 6 7 8 */ + add\0change\0chg\0replace\0delete\0list\0show\0lst\0flush\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, wrong comma? Nope, not wrong comma. The first argument is the command, and the second: + 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); is the flags for the command. + } + return ipaddr_list_or_flush(argv, cmd == 8); bloat-o-meter output, please. $ make bloatcheck function old new delta .rodata 67076771 +64 do_ipaddr 90 139 +49 static.commands 32 51 +19 ipaddr_modify 10841085 +1 -- (add/remove: 0/0 grow/shrink: 4/0 up/down: 133/0) Total: 133 bytes textdata bss dec hex filename 4714313058360 56808dde8 busybox_old 4725513058360 56920de58 busybox_unstripped Thanks, /mjt ___ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox