lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Wed, 3 Sep 2014 17:02:15 +0200
From:	Jiri Pirko <jiri@...nulli.us>
To:	Nikolay Aleksandrov <nikolay@...hat.com>
Cc:	netdev@...r.kernel.org, stephen@...workplumber.org,
	davem@...emloft.net
Subject: Re: [PATCH net-next iproute2] iproute2: allow to change slave
 options via type_slave

Wed, Sep 03, 2014 at 04:43:28PM CEST, nikolay@...hat.com wrote:
>This patch adds the necessary changes to allow altering a slave device's
>options via ip link set <device> type <master type>_slave specific-option.
>It also adds support to set the bonding slaves' queue_id.
>
>Example:
> ip link set eth0 type bond_slave queue_id 10
>
>Signed-off-by: Nikolay Aleksandrov <nikolay@...hat.com>
>---
> ip/iplink.c            | 22 +++++++++++++++++++---
> ip/iplink_bond_slave.c | 19 +++++++++++++++++++
> 2 files changed, 38 insertions(+), 3 deletions(-)
>
>diff --git a/ip/iplink.c b/ip/iplink.c
>index 1a907d998a87..5f2db92c981e 100644
>--- a/ip/iplink.c
>+++ b/ip/iplink.c
>@@ -88,7 +88,8 @@ void iplink_usage(void)
> 		fprintf(stderr, "\n");
> 		fprintf(stderr, "TYPE := { vlan | veth | vcan | dummy | ifb | macvlan | macvtap |\n");
> 		fprintf(stderr, "          bridge | bond | ipoib | ip6tnl | ipip | sit | vxlan |\n");
>-		fprintf(stderr, "          gre | gretap | ip6gre | ip6gretap | vti | nlmon }\n");
>+		fprintf(stderr, "          gre | gretap | ip6gre | ip6gretap | vti | nlmon |\n");
>+		fprintf(stderr, "          <master type>_slave }\n");

I think you can put "bond_slave" here. Once any other slave type
implements parse_opt, it would be added here as well.


> 	}
> 	exit(-1);
> }
>@@ -697,14 +698,29 @@ static int iplink_modify(int cmd, unsigned int flags, int argc, char **argv)
> 
> 	if (type) {
> 		struct rtattr *linkinfo = NLMSG_TAIL(&req.n);
>+		char slavebuf[128], *ulinep = strchr(type, '_');
>+		int iflatype;
>+
> 		addattr_l(&req.n, sizeof(req), IFLA_LINKINFO, NULL, 0);
> 		addattr_l(&req.n, sizeof(req), IFLA_INFO_KIND, type,
> 			 strlen(type));
> 
>-		lu = get_link_kind(type);
>+		if (ulinep && !strcmp(ulinep, "_slave")) {
>+			strncpy(slavebuf, type, sizeof(slavebuf));
>+			slavebuf[sizeof(slavebuf) - 1] = '\0';
>+			ulinep = strchr(slavebuf, '_');
>+			/* check in case it was after sizeof(slavebuf) - 1*/
>+			if (ulinep)
>+				*ulinep = '\0';
>+			lu = get_link_slave_kind(slavebuf);
>+			iflatype = IFLA_INFO_SLAVE_DATA;
>+		} else {
>+			lu = get_link_kind(type);
>+			iflatype = IFLA_INFO_DATA;
>+		}
> 		if (lu && argc) {
> 			struct rtattr * data = NLMSG_TAIL(&req.n);
>-			addattr_l(&req.n, sizeof(req), IFLA_INFO_DATA, NULL, 0);
>+			addattr_l(&req.n, sizeof(req), iflatype, NULL, 0);
> 
> 			if (lu->parse_opt &&
> 			    lu->parse_opt(lu, argc, argv, &req.n))
>diff --git a/ip/iplink_bond_slave.c b/ip/iplink_bond_slave.c
>index 8f3fc6cec6fa..aacba14aef9c 100644
>--- a/ip/iplink_bond_slave.c
>+++ b/ip/iplink_bond_slave.c
>@@ -80,10 +80,29 @@ static void bond_slave_print_opt(struct link_util *lu, FILE *f, struct rtattr *t
> 			rta_getattr_u16(tb[IFLA_BOND_SLAVE_AD_AGGREGATOR_ID]));
> }
> 
>+static int bond_slave_parse_opt(struct link_util *lu, int argc, char **argv,
>+				struct nlmsghdr *n)
>+{
>+	__u16 queue_id;
>+
>+	while (argc > 0) {
>+		if (matches(*argv, "queue_id") == 0) {
>+			NEXT_ARG();
>+			if (get_u16(&queue_id, *argv, 0))
>+				invarg("queue_id is invalid", *argv);
>+			addattr16(n, 1024, IFLA_BOND_SLAVE_QUEUE_ID, queue_id);
>+		}
>+		argc--, argv++;
>+	}
>+
>+	return 0;
>+}
>+
> struct link_util bond_slave_link_util = {
> 	.id		= "bond",
> 	.maxattr	= IFLA_BOND_SLAVE_MAX,
> 	.print_opt	= bond_slave_print_opt,
>+	.parse_opt	= bond_slave_parse_opt,
> 	.slave		= true,
> };
> 
>-- 
>1.9.3
>
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ