All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch iproute2-next v5 0/3] ip: add support for alternative names
@ 2019-10-24 10:20 Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 1/3] lib/ll_map: cache " Jiri Pirko
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Jiri Pirko @ 2019-10-24 10:20 UTC (permalink / raw)
  To: netdev
  Cc: davem, jakub.kicinski, dsahern, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

From: Jiri Pirko <jiri@mellanox.com>

This patchset adds support for alternative names caching,
manipulation and usage.

Jiri Pirko (3):
  lib/ll_map: cache alternative names
  ip: add support for alternative name addition/deletion/list
  ip: allow to use alternative names as handle

 include/utils.h       |   1 +
 ip/ipaddress.c        |  20 ++++-
 ip/iplink.c           |  86 +++++++++++++++++-
 lib/ll_map.c          | 197 +++++++++++++++++++++++++++++++++---------
 lib/utils.c           |  19 ++--
 man/man8/ip-link.8.in |  11 +++
 6 files changed, 283 insertions(+), 51 deletions(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [patch iproute2-next v5 1/3] lib/ll_map: cache alternative names
  2019-10-24 10:20 [patch iproute2-next v5 0/3] ip: add support for alternative names Jiri Pirko
@ 2019-10-24 10:20 ` Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 2/3] ip: add support for alternative name addition/deletion/list Jiri Pirko
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 8+ messages in thread
From: Jiri Pirko @ 2019-10-24 10:20 UTC (permalink / raw)
  To: netdev
  Cc: davem, jakub.kicinski, dsahern, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

From: Jiri Pirko <jiri@mellanox.com>

Alternative names are related to the "parent name". That means,
whenever ll_remember_index() is called to add/delete/update and it founds
the "parent name" im object by ifindex, processes related
alternative name im objects too. Put them in a list which holds the
relationship with the parent.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v4->v5:
- use safe variant of list traversal in ll_altname_entries_destroy()
v3->v4:
- new patch
---
 lib/ll_map.c | 190 ++++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 152 insertions(+), 38 deletions(-)

diff --git a/lib/ll_map.c b/lib/ll_map.c
index e0ed54bf77c9..9ec73d166790 100644
--- a/lib/ll_map.c
+++ b/lib/ll_map.c
@@ -22,6 +22,7 @@
 #include "libnetlink.h"
 #include "ll_map.h"
 #include "list.h"
+#include "utils.h"
 
 struct ll_cache {
 	struct hlist_node idx_hash;
@@ -29,6 +30,7 @@ struct ll_cache {
 	unsigned	flags;
 	unsigned 	index;
 	unsigned short	type;
+	struct list_head altnames_list;
 	char		name[];
 };
 
@@ -77,10 +79,150 @@ static struct ll_cache *ll_get_by_name(const char *name)
 	return NULL;
 }
 
-int ll_remember_index(struct nlmsghdr *n, void *arg)
+static struct ll_cache *ll_entry_create(struct ifinfomsg *ifi,
+					const char *ifname,
+					struct ll_cache *parent_im)
+{
+	struct ll_cache *im;
+	unsigned int h;
+
+	im = malloc(sizeof(*im) + strlen(ifname) + 1);
+	if (!im)
+		return NULL;
+	im->index = ifi->ifi_index;
+	strcpy(im->name, ifname);
+	im->type = ifi->ifi_type;
+	im->flags = ifi->ifi_flags;
+
+	if (parent_im) {
+		list_add_tail(&im->altnames_list, &parent_im->altnames_list);
+	} else {
+		/* This is parent, insert to index hash. */
+		h = ifi->ifi_index & (IDXMAP_SIZE - 1);
+		hlist_add_head(&im->idx_hash, &idx_head[h]);
+		INIT_LIST_HEAD(&im->altnames_list);
+	}
+
+	h = namehash(ifname) & (IDXMAP_SIZE - 1);
+	hlist_add_head(&im->name_hash, &name_head[h]);
+	return im;
+}
+
+static void ll_entry_destroy(struct ll_cache *im, bool im_is_parent)
+{
+	hlist_del(&im->name_hash);
+	if (im_is_parent)
+		hlist_del(&im->idx_hash);
+	else
+		list_del(&im->altnames_list);
+	free(im);
+}
+
+static void ll_entry_update(struct ll_cache *im, struct ifinfomsg *ifi,
+			    const char *ifname)
 {
 	unsigned int h;
-	const char *ifname;
+
+	im->flags = ifi->ifi_flags;
+	if (!strcmp(im->name, ifname))
+		return;
+	hlist_del(&im->name_hash);
+	h = namehash(ifname) & (IDXMAP_SIZE - 1);
+	hlist_add_head(&im->name_hash, &name_head[h]);
+}
+
+static void ll_altname_entries_create(struct ll_cache *parent_im,
+				      struct ifinfomsg *ifi, struct rtattr **tb)
+{
+	struct rtattr *i, *proplist = tb[IFLA_PROP_LIST];
+	int rem;
+
+	if (!proplist)
+		return;
+	rem = RTA_PAYLOAD(proplist);
+	for (i = RTA_DATA(proplist); RTA_OK(i, rem);
+	     i = RTA_NEXT(i, rem)) {
+		if (i->rta_type != IFLA_ALT_IFNAME)
+			continue;
+		ll_entry_create(ifi, rta_getattr_str(i), parent_im);
+	}
+}
+
+static void ll_altname_entries_destroy(struct ll_cache *parent_im)
+{
+	struct ll_cache *im, *tmp;
+
+	list_for_each_entry_safe(im, tmp, &parent_im->altnames_list,
+				 altnames_list)
+		ll_entry_destroy(im, false);
+}
+
+static void ll_altname_entries_update(struct ll_cache *parent_im,
+				      struct ifinfomsg *ifi, struct rtattr **tb)
+{
+	struct rtattr *i, *proplist = tb[IFLA_PROP_LIST];
+	struct ll_cache *im;
+	int rem;
+
+	if (!proplist) {
+		ll_altname_entries_destroy(parent_im);
+		return;
+	}
+
+	/* Simply compare the altname list with the cached one
+	 * and if it does not fit 1:1, recreate the cached list
+	 * from scratch.
+	 */
+	im = list_first_entry(&parent_im->altnames_list, typeof(*im),
+			      altnames_list);
+	rem = RTA_PAYLOAD(proplist);
+	for (i = RTA_DATA(proplist); RTA_OK(i, rem);
+	     i = RTA_NEXT(i, rem)) {
+		if (i->rta_type != IFLA_ALT_IFNAME)
+			continue;
+		if (!im || strcmp(rta_getattr_str(i), im->name))
+			goto recreate_altname_entries;
+		im = list_next_entry(im, altnames_list);
+	}
+	if (list_next_entry(im, altnames_list))
+		goto recreate_altname_entries;
+	return;
+
+recreate_altname_entries:
+	ll_altname_entries_destroy(parent_im);
+	ll_altname_entries_create(parent_im, ifi, tb);
+}
+
+static void ll_entries_create(struct ifinfomsg *ifi, struct rtattr **tb)
+{
+	struct ll_cache *parent_im;
+
+	if (!tb[IFLA_IFNAME])
+		return;
+	parent_im = ll_entry_create(ifi, rta_getattr_str(tb[IFLA_IFNAME]),
+				    NULL);
+	if (!parent_im)
+		return;
+	ll_altname_entries_create(parent_im, ifi, tb);
+}
+
+static void ll_entries_destroy(struct ll_cache *parent_im)
+{
+	ll_altname_entries_destroy(parent_im);
+	ll_entry_destroy(parent_im, true);
+}
+
+static void ll_entries_update(struct ll_cache *parent_im,
+			      struct ifinfomsg *ifi, struct rtattr **tb)
+{
+	if (tb[IFLA_IFNAME])
+		ll_entry_update(parent_im, ifi,
+				rta_getattr_str(tb[IFLA_IFNAME]));
+	ll_altname_entries_update(parent_im, ifi, tb);
+}
+
+int ll_remember_index(struct nlmsghdr *n, void *arg)
+{
 	struct ifinfomsg *ifi = NLMSG_DATA(n);
 	struct ll_cache *im;
 	struct rtattr *tb[IFLA_MAX+1];
@@ -93,45 +235,17 @@ int ll_remember_index(struct nlmsghdr *n, void *arg)
 
 	im = ll_get_by_index(ifi->ifi_index);
 	if (n->nlmsg_type == RTM_DELLINK) {
-		if (im) {
-			hlist_del(&im->name_hash);
-			hlist_del(&im->idx_hash);
-			free(im);
-		}
-		return 0;
-	}
-
-	parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), IFLA_PAYLOAD(n));
-	ifname = rta_getattr_str(tb[IFLA_IFNAME]);
-	if (ifname == NULL)
-		return 0;
-
-	if (im) {
-		/* change to existing entry */
-		if (strcmp(im->name, ifname) != 0) {
-			hlist_del(&im->name_hash);
-			h = namehash(ifname) & (IDXMAP_SIZE - 1);
-			hlist_add_head(&im->name_hash, &name_head[h]);
-		}
-
-		im->flags = ifi->ifi_flags;
+		if (im)
+			ll_entries_destroy(im);
 		return 0;
 	}
 
-	im = malloc(sizeof(*im) + strlen(ifname) + 1);
-	if (im == NULL)
-		return 0;
-	im->index = ifi->ifi_index;
-	strcpy(im->name, ifname);
-	im->type = ifi->ifi_type;
-	im->flags = ifi->ifi_flags;
-
-	h = ifi->ifi_index & (IDXMAP_SIZE - 1);
-	hlist_add_head(&im->idx_hash, &idx_head[h]);
-
-	h = namehash(ifname) & (IDXMAP_SIZE - 1);
-	hlist_add_head(&im->name_hash, &name_head[h]);
-
+	parse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(ifi),
+			   IFLA_PAYLOAD(n), NLA_F_NESTED);
+	if (im)
+		ll_entries_update(im, ifi, tb);
+	else
+		ll_entries_create(ifi, tb);
 	return 0;
 }
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [patch iproute2-next v5 2/3] ip: add support for alternative name addition/deletion/list
  2019-10-24 10:20 [patch iproute2-next v5 0/3] ip: add support for alternative names Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 1/3] lib/ll_map: cache " Jiri Pirko
@ 2019-10-24 10:20 ` Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 3/3] ip: allow to use alternative names as handle Jiri Pirko
  2019-10-27 17:16 ` [patch iproute2-next v5 0/3] ip: add support for alternative names David Ahern
  3 siblings, 0 replies; 8+ messages in thread
From: Jiri Pirko @ 2019-10-24 10:20 UTC (permalink / raw)
  To: netdev
  Cc: davem, jakub.kicinski, dsahern, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

From: Jiri Pirko <jiri@mellanox.com>

Implement addition/deletion of lists of properties, currently
alternative ifnames. Also extent the ip link show command to list them.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v2->v3:
- s/prop/property/ on cmdline
- removed RTM_DELLINK flag set
v1->v2:
- s/\"NULL\"/NULL/ in print_string arg
rfc->v1:
- convert to generic property lists
- added patch description
- use ll_name_to_index() and ifindex as handle
- fixed parsing with nested flag on
- adjusted output
- added arg name to check_altifname header prototype
- added help and man parts
---
 include/utils.h       |  1 +
 ip/ipaddress.c        | 20 +++++++++--
 ip/iplink.c           | 81 ++++++++++++++++++++++++++++++++++++++++++-
 lib/utils.c           | 19 +++++++---
 man/man8/ip-link.8.in | 11 ++++++
 5 files changed, 124 insertions(+), 8 deletions(-)

diff --git a/include/utils.h b/include/utils.h
index 794d36053634..001491a1eb40 100644
--- a/include/utils.h
+++ b/include/utils.h
@@ -196,6 +196,7 @@ void duparg(const char *, const char *) __attribute__((noreturn));
 void duparg2(const char *, const char *) __attribute__((noreturn));
 int nodev(const char *dev);
 int check_ifname(const char *);
+int check_altifname(const char *name);
 int get_ifname(char *, const char *);
 const char *get_ifname_rta(int ifindex, const struct rtattr *rta);
 bool matches(const char *prefix, const char *string);
diff --git a/ip/ipaddress.c b/ip/ipaddress.c
index bc8f5ba13c33..b72eb7a1f808 100644
--- a/ip/ipaddress.c
+++ b/ip/ipaddress.c
@@ -879,7 +879,7 @@ int print_linkinfo(struct nlmsghdr *n, void *arg)
 	if (filter.up && !(ifi->ifi_flags&IFF_UP))
 		return -1;
 
-	parse_rtattr(tb, IFLA_MAX, IFLA_RTA(ifi), len);
+	parse_rtattr_flags(tb, IFLA_MAX, IFLA_RTA(ifi), len, NLA_F_NESTED);
 
 	name = get_ifname_rta(ifi->ifi_index, tb[IFLA_IFNAME]);
 	if (!name)
@@ -1139,7 +1139,23 @@ int print_linkinfo(struct nlmsghdr *n, void *arg)
 		close_json_array(PRINT_JSON, NULL);
 	}
 
-	print_string(PRINT_FP, NULL, "%s", "\n");
+	if (tb[IFLA_PROP_LIST]) {
+		struct rtattr *i, *proplist = tb[IFLA_PROP_LIST];
+		int rem = RTA_PAYLOAD(proplist);
+
+		open_json_array(PRINT_JSON, "altnames");
+		for (i = RTA_DATA(proplist); RTA_OK(i, rem);
+		     i = RTA_NEXT(i, rem)) {
+			if (i->rta_type != IFLA_ALT_IFNAME)
+				continue;
+			print_string(PRINT_FP, NULL, "%s    altname ", _SL_);
+			print_string(PRINT_ANY, NULL,
+				     "%s", rta_getattr_str(i));
+		}
+		close_json_array(PRINT_JSON, NULL);
+	}
+
+	print_string(PRINT_FP, NULL, "%s", _SL_);
 	fflush(fp);
 	return 1;
 }
diff --git a/ip/iplink.c b/ip/iplink.c
index 212a088535da..bf90fad1b3ea 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -111,7 +111,9 @@ void iplink_usage(void)
 		"\n"
 		"	ip link xstats type TYPE [ ARGS ]\n"
 		"\n"
-		"	ip link afstats [ dev DEVICE ]\n");
+		"	ip link afstats [ dev DEVICE ]\n"
+		"	ip link property add dev DEVICE [ altname NAME .. ]\n"
+		"	ip link property del dev DEVICE [ altname NAME .. ]\n");
 
 	if (iplink_have_newlink()) {
 		fprintf(stderr,
@@ -1617,6 +1619,80 @@ static int iplink_afstats(int argc, char **argv)
 	return 0;
 }
 
+static int iplink_prop_mod(int argc, char **argv, struct iplink_req *req)
+{
+	struct rtattr *proplist;
+	char *dev = NULL;
+	char *name;
+
+	proplist = addattr_nest(&req->n, sizeof(*req),
+				IFLA_PROP_LIST | NLA_F_NESTED);
+
+	while (argc > 0) {
+		if (matches(*argv, "altname") == 0) {
+			NEXT_ARG();
+			if (check_altifname(*argv))
+				invarg("not a valid altname", *argv);
+			name = *argv;
+			addattr_l(&req->n, sizeof(*req), IFLA_ALT_IFNAME,
+				  name, strlen(name) + 1);
+		} else if (matches(*argv, "help") == 0) {
+			usage();
+		} else {
+			if (strcmp(*argv, "dev") == 0)
+				NEXT_ARG();
+			if (dev)
+				duparg2("dev", *argv);
+			if (check_altifname(*argv))
+				invarg("\"dev\" not a valid ifname", *argv);
+			dev = *argv;
+		}
+		argv++; argc--;
+	}
+	addattr_nest_end(&req->n, proplist);
+
+	if (!dev) {
+		fprintf(stderr, "Not enough of information: \"dev\" argument is required.\n");
+		exit(-1);
+	}
+
+	req->i.ifi_index = ll_name_to_index(dev);
+	if (!req->i.ifi_index)
+		return nodev(dev);
+
+	if (rtnl_talk(&rth, &req->n, NULL) < 0)
+		return -2;
+
+	return 0;
+}
+
+static int iplink_prop(int argc, char **argv)
+{
+	struct iplink_req req = {
+		.n.nlmsg_len = NLMSG_LENGTH(sizeof(struct ifinfomsg)),
+		.n.nlmsg_flags = NLM_F_REQUEST,
+		.i.ifi_family = preferred_family,
+	};
+
+	if (argc <= 0) {
+		usage();
+		exit(-1);
+	}
+
+	if (matches(*argv, "add") == 0) {
+		req.n.nlmsg_flags |= NLM_F_EXCL | NLM_F_CREATE | NLM_F_APPEND;
+		req.n.nlmsg_type = RTM_NEWLINKPROP;
+	} else if (matches(*argv, "del") == 0) {
+		req.n.nlmsg_type = RTM_DELLINKPROP;
+	} else if (matches(*argv, "help") == 0) {
+		usage();
+	} else {
+		fprintf(stderr, "Operator required\n");
+		exit(-1);
+	}
+	return iplink_prop_mod(argc - 1, argv + 1, &req);
+}
+
 static void do_help(int argc, char **argv)
 {
 	struct link_util *lu = NULL;
@@ -1674,6 +1750,9 @@ int do_iplink(int argc, char **argv)
 		return 0;
 	}
 
+	if (matches(*argv, "property") == 0)
+		return iplink_prop(argc-1, argv+1);
+
 	if (matches(*argv, "help") == 0) {
 		do_help(argc-1, argv+1);
 		return 0;
diff --git a/lib/utils.c b/lib/utils.c
index 95d46ff210aa..bbb3bdcfa80b 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -824,14 +824,10 @@ int nodev(const char *dev)
 	return -1;
 }
 
-int check_ifname(const char *name)
+static int __check_ifname(const char *name)
 {
-	/* These checks mimic kernel checks in dev_valid_name */
 	if (*name == '\0')
 		return -1;
-	if (strlen(name) >= IFNAMSIZ)
-		return -1;
-
 	while (*name) {
 		if (*name == '/' || isspace(*name))
 			return -1;
@@ -840,6 +836,19 @@ int check_ifname(const char *name)
 	return 0;
 }
 
+int check_ifname(const char *name)
+{
+	/* These checks mimic kernel checks in dev_valid_name */
+	if (strlen(name) >= IFNAMSIZ)
+		return -1;
+	return __check_ifname(name);
+}
+
+int check_altifname(const char *name)
+{
+	return __check_ifname(name);
+}
+
 /* buf is assumed to be IFNAMSIZ */
 int get_ifname(char *buf, const char *name)
 {
diff --git a/man/man8/ip-link.8.in b/man/man8/ip-link.8.in
index a8ae72d2b097..f800a18a45fc 100644
--- a/man/man8/ip-link.8.in
+++ b/man/man8/ip-link.8.in
@@ -244,6 +244,17 @@ ip-link \- network device configuration
 .IR VLAN-QOS " ] ["
 .B proto
 .IR VLAN-PROTO " ] ]"
+.in -8
+
+.ti -8
+.BI "ip link property add"
+.RB "[ " altname
+.IR NAME " .. ]"
+
+.ti -8
+.BI "ip link property del"
+.RB "[ " altname
+.IR NAME " .. ]"
 
 .SH "DESCRIPTION"
 .SS ip link add - add virtual link
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [patch iproute2-next v5 3/3] ip: allow to use alternative names as handle
  2019-10-24 10:20 [patch iproute2-next v5 0/3] ip: add support for alternative names Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 1/3] lib/ll_map: cache " Jiri Pirko
  2019-10-24 10:20 ` [patch iproute2-next v5 2/3] ip: add support for alternative name addition/deletion/list Jiri Pirko
@ 2019-10-24 10:20 ` Jiri Pirko
  2019-10-27 17:16 ` [patch iproute2-next v5 0/3] ip: add support for alternative names David Ahern
  3 siblings, 0 replies; 8+ messages in thread
From: Jiri Pirko @ 2019-10-24 10:20 UTC (permalink / raw)
  To: netdev
  Cc: davem, jakub.kicinski, dsahern, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

From: Jiri Pirko <jiri@mellanox.com>

Extend ll_name_to_index() to get the index of a netdevice using
alternative interface name. Allow alternative long names to pass checks
in couple of ip link/addr commands.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
---
v3->v4:
- moved utils.h include into the first patch
v2->v3:
- removed altnametoindex and doing IFLA_IFNAME/IFLA_ALT_IFNAME in
  ll_link_get() instead.
rfc->v1:
- added patch description
---
 ip/iplink.c  | 5 +++--
 lib/ll_map.c | 7 ++++---
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/ip/iplink.c b/ip/iplink.c
index bf90fad1b3ea..47f73988c2d5 100644
--- a/ip/iplink.c
+++ b/ip/iplink.c
@@ -931,7 +931,7 @@ int iplink_parse(int argc, char **argv, struct iplink_req *req, char **type)
 				NEXT_ARG();
 			if (dev != name)
 				duparg2("dev", *argv);
-			if (check_ifname(*argv))
+			if (check_altifname(*argv))
 				invarg("\"dev\" not a valid ifname", *argv);
 			dev = *argv;
 		}
@@ -1106,7 +1106,8 @@ int iplink_get(char *name, __u32 filt_mask)
 
 	if (name) {
 		addattr_l(&req.n, sizeof(req),
-			  IFLA_IFNAME, name, strlen(name) + 1);
+			  !check_ifname(name) ? IFLA_IFNAME : IFLA_ALT_IFNAME,
+			  name, strlen(name) + 1);
 	}
 	addattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask);
 
diff --git a/lib/ll_map.c b/lib/ll_map.c
index 9ec73d166790..70ea3d499c8f 100644
--- a/lib/ll_map.c
+++ b/lib/ll_map.c
@@ -72,7 +72,7 @@ static struct ll_cache *ll_get_by_name(const char *name)
 		struct ll_cache *im
 			= container_of(n, struct ll_cache, name_hash);
 
-		if (strncmp(im->name, name, IFNAMSIZ) == 0)
+		if (strcmp(im->name, name) == 0)
 			return im;
 	}
 
@@ -288,8 +288,9 @@ static int ll_link_get(const char *name, int index)
 
 	addattr32(&req.n, sizeof(req), IFLA_EXT_MASK, filt_mask);
 	if (name)
-		addattr_l(&req.n, sizeof(req), IFLA_IFNAME, name,
-			  strlen(name) + 1);
+		addattr_l(&req.n, sizeof(req),
+			  !check_ifname(name) ? IFLA_IFNAME : IFLA_ALT_IFNAME,
+			  name, strlen(name) + 1);
 
 	if (rtnl_talk_suppress_rtnl_errmsg(&rth, &req.n, &answer) < 0)
 		goto out;
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [patch iproute2-next v5 0/3] ip: add support for alternative names
  2019-10-24 10:20 [patch iproute2-next v5 0/3] ip: add support for alternative names Jiri Pirko
                   ` (2 preceding siblings ...)
  2019-10-24 10:20 ` [patch iproute2-next v5 3/3] ip: allow to use alternative names as handle Jiri Pirko
@ 2019-10-27 17:16 ` David Ahern
  2019-10-28  7:38   ` Jiri Pirko
  3 siblings, 1 reply; 8+ messages in thread
From: David Ahern @ 2019-10-27 17:16 UTC (permalink / raw)
  To: Jiri Pirko, netdev
  Cc: davem, jakub.kicinski, stephen, roopa, dcbw, nikolay, mkubecek,
	andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni, mlxsw

On 10/24/19 4:20 AM, Jiri Pirko wrote:
> From: Jiri Pirko <jiri@mellanox.com>
> 
> This patchset adds support for alternative names caching,
> manipulation and usage.
> 

something is still not right with this change:

$ ip li add veth1 type veth peer name veth2
$ ip li prop add dev veth1 altname veth1_by_another_name

$ ip li sh dev veth1
15: veth1@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state
DOWN mode DEFAULT group default qlen 1000
    link/ether 1e:6e:bc:26:52:f6 brd ff:ff:ff:ff:ff:ff
    altname veth1_by_another_name

$ ip li sh dev veth1_by_another_name
Device "veth1_by_another_name" does not exist.

$ ip li set dev veth1_by_another_name up
Error: argument "veth1_by_another_name" is wrong: "dev" not a valid ifname


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2-next v5 0/3] ip: add support for alternative names
  2019-10-27 17:16 ` [patch iproute2-next v5 0/3] ip: add support for alternative names David Ahern
@ 2019-10-28  7:38   ` Jiri Pirko
  2019-10-28 14:49     ` David Ahern
  0 siblings, 1 reply; 8+ messages in thread
From: Jiri Pirko @ 2019-10-28  7:38 UTC (permalink / raw)
  To: David Ahern
  Cc: netdev, davem, jakub.kicinski, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

Sun, Oct 27, 2019 at 06:16:25PM CET, dsahern@gmail.com wrote:
>On 10/24/19 4:20 AM, Jiri Pirko wrote:
>> From: Jiri Pirko <jiri@mellanox.com>
>> 
>> This patchset adds support for alternative names caching,
>> manipulation and usage.
>> 
>
>something is still not right with this change:
>
>$ ip li add veth1 type veth peer name veth2
>$ ip li prop add dev veth1 altname veth1_by_another_name
>
>$ ip li sh dev veth1
>15: veth1@veth2: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state
>DOWN mode DEFAULT group default qlen 1000
>    link/ether 1e:6e:bc:26:52:f6 brd ff:ff:ff:ff:ff:ff
>    altname veth1_by_another_name
>
>$ ip li sh dev veth1_by_another_name
>Device "veth1_by_another_name" does not exist.
>
>$ ip li set dev veth1_by_another_name up
>Error: argument "veth1_by_another_name" is wrong: "dev" not a valid ifname

Odd. This works for me fine:
bash-5.0# ip li prop add dev veth1 altname veth1_by_another_name
bash-5.0# ip li sh dev veth1
4: veth1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 82:ce:19:28:bb:f5 brd ff:ff:ff:ff:ff:ff
    altname veth1_by_another_name
bash-5.0# ip li sh dev veth1_by_another_name
4: veth1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 82:ce:19:28:bb:f5 brd ff:ff:ff:ff:ff:ff
    altname veth1_by_another_name
bash-5.0# ip li set dev veth1_by_another_name up


Did you by any chance forget to apply the last patch?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2-next v5 0/3] ip: add support for alternative names
  2019-10-28  7:38   ` Jiri Pirko
@ 2019-10-28 14:49     ` David Ahern
  2019-10-28 18:19       ` Jiri Pirko
  0 siblings, 1 reply; 8+ messages in thread
From: David Ahern @ 2019-10-28 14:49 UTC (permalink / raw)
  To: Jiri Pirko
  Cc: netdev, davem, jakub.kicinski, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

On 10/28/19 1:38 AM, Jiri Pirko wrote:
> Did you by any chance forget to apply the last patch?

apparently so. With the 3rd patch it worked fine.

Applied all 3 to iproute2-next.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [patch iproute2-next v5 0/3] ip: add support for alternative names
  2019-10-28 14:49     ` David Ahern
@ 2019-10-28 18:19       ` Jiri Pirko
  0 siblings, 0 replies; 8+ messages in thread
From: Jiri Pirko @ 2019-10-28 18:19 UTC (permalink / raw)
  To: David Ahern
  Cc: netdev, davem, jakub.kicinski, stephen, roopa, dcbw, nikolay,
	mkubecek, andrew, parav, saeedm, f.fainelli, sd, sbrivio, pabeni,
	mlxsw

Mon, Oct 28, 2019 at 03:49:57PM CET, dsahern@gmail.com wrote:
>On 10/28/19 1:38 AM, Jiri Pirko wrote:
>> Did you by any chance forget to apply the last patch?
>
>apparently so. With the 3rd patch it worked fine.
>
>Applied all 3 to iproute2-next.

Great. Thanks!

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-10-28 18:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-24 10:20 [patch iproute2-next v5 0/3] ip: add support for alternative names Jiri Pirko
2019-10-24 10:20 ` [patch iproute2-next v5 1/3] lib/ll_map: cache " Jiri Pirko
2019-10-24 10:20 ` [patch iproute2-next v5 2/3] ip: add support for alternative name addition/deletion/list Jiri Pirko
2019-10-24 10:20 ` [patch iproute2-next v5 3/3] ip: allow to use alternative names as handle Jiri Pirko
2019-10-27 17:16 ` [patch iproute2-next v5 0/3] ip: add support for alternative names David Ahern
2019-10-28  7:38   ` Jiri Pirko
2019-10-28 14:49     ` David Ahern
2019-10-28 18:19       ` Jiri Pirko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.