Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13323516 authored by Jiri Pirko's avatar Jiri Pirko Committed by David S. Miller
Browse files

bridge: implement rtnl_link_ops->changelink



Allow rtnetlink users to set bridge master info via IFLA_INFO_DATA attr
This initial part implements forward_delay, hello_time, max_age options.

Signed-off-by: default avatarJiri Pirko <jiri@resnulli.us>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent e5c3ea5c
Loading
Loading
Loading
Loading
+39 −0
Original line number Original line Diff line number Diff line
@@ -484,6 +484,42 @@ static size_t br_port_get_slave_size(const struct net_device *brdev,
	return br_port_info_size();
	return br_port_info_size();
}
}


static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
	[IFLA_BR_FORWARD_DELAY]	= { .type = NLA_U32 },
	[IFLA_BR_HELLO_TIME]	= { .type = NLA_U32 },
	[IFLA_BR_MAX_AGE]	= { .type = NLA_U32 },
};

static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
			 struct nlattr *data[])
{
	struct net_bridge *br = netdev_priv(brdev);
	int err;

	if (!data)
		return 0;

	if (data[IFLA_BR_FORWARD_DELAY]) {
		err = br_set_forward_delay(br, nla_get_u32(data[IFLA_BR_FORWARD_DELAY]));
		if (err)
			return err;
	}

	if (data[IFLA_BR_HELLO_TIME]) {
		err = br_set_hello_time(br, nla_get_u32(data[IFLA_BR_HELLO_TIME]));
		if (err)
			return err;
	}

	if (data[IFLA_BR_MAX_AGE]) {
		err = br_set_max_age(br, nla_get_u32(data[IFLA_BR_MAX_AGE]));
		if (err)
			return err;
	}

	return 0;
}

static size_t br_get_size(const struct net_device *brdev)
static size_t br_get_size(const struct net_device *brdev)
{
{
	return nla_total_size(sizeof(u32)) +	/* IFLA_BR_FORWARD_DELAY  */
	return nla_total_size(sizeof(u32)) +	/* IFLA_BR_FORWARD_DELAY  */
@@ -534,8 +570,11 @@ struct rtnl_link_ops br_link_ops __read_mostly = {
	.kind			= "bridge",
	.kind			= "bridge",
	.priv_size		= sizeof(struct net_bridge),
	.priv_size		= sizeof(struct net_bridge),
	.setup			= br_dev_setup,
	.setup			= br_dev_setup,
	.maxtype		= IFLA_BRPORT_MAX,
	.policy			= br_policy,
	.validate		= br_validate,
	.validate		= br_validate,
	.newlink		= br_dev_newlink,
	.newlink		= br_dev_newlink,
	.changelink		= br_changelink,
	.dellink		= br_dev_delete,
	.dellink		= br_dev_delete,
	.get_size		= br_get_size,
	.get_size		= br_get_size,
	.fill_info		= br_fill_info,
	.fill_info		= br_fill_info,