[PATCH] ip addr: support change and replace commands

Bernhard Reutner-Fischer rep.dot.nop at gmail.com
Tue Jun 23 15:44:17 UTC 2015


On June 23, 2015 3:27:54 PM GMT+02:00, Michael Tokarev <mjt at tls.msk.ru> wrote:
>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,

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,



More information about the busybox mailing list