From: Florian Westphal Date: Fri, 7 May 2010 11:31:02 +0000 (+0000) Subject: iproute2: fix addrlabel interface names handling X-Git-Tag: v2.6.34~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24abb62ee737f98b4b5a7afc8b817cdb6eb53a46;p=thirdparty%2Fiproute2.git iproute2: fix addrlabel interface names handling ip addrlabel outputs if%d names due to missing init call: $ ip addrlabel s prefix a::42/128 dev if4 label 1000 Also, ip did not accept "if%d" interfaces on input. Signed-off-by: Florian Westphal --- diff --git a/ip/ipaddrlabel.c b/ip/ipaddrlabel.c index cf438d639..95e813df7 100644 --- a/ip/ipaddrlabel.c +++ b/ip/ipaddrlabel.c @@ -252,6 +252,8 @@ static int ipaddrlabel_flush(int argc, char **argv) int do_ipaddrlabel(int argc, char **argv) { + ll_init_map(&rth); + if (argc < 1) { return ipaddrlabel_list(0, NULL); } else if (matches(argv[0], "list") == 0 || diff --git a/lib/ll_map.c b/lib/ll_map.c index 5addf4a4c..b8b49aa14 100644 --- a/lib/ll_map.c +++ b/lib/ll_map.c @@ -161,6 +161,7 @@ unsigned ll_name_to_index(const char *name) static int icache; struct idxmap *im; int i; + unsigned idx; if (name == NULL) return 0; @@ -176,7 +177,10 @@ unsigned ll_name_to_index(const char *name) } } - return if_nametoindex(name); + idx = if_nametoindex(name); + if (idx == 0) + sscanf(name, "if%u", &idx); + return idx; } int ll_init_map(struct rtnl_handle *rth)