Skip to content

Commit 1332351

Browse files
jpirkodavem330
authored andcommitted
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: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e5c3ea5 commit 1332351

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

net/bridge/br_netlink.c

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,42 @@ static size_t br_port_get_slave_size(const struct net_device *brdev,
484484
return br_port_info_size();
485485
}
486486

487+
static const struct nla_policy br_policy[IFLA_BR_MAX + 1] = {
488+
[IFLA_BR_FORWARD_DELAY] = { .type = NLA_U32 },
489+
[IFLA_BR_HELLO_TIME] = { .type = NLA_U32 },
490+
[IFLA_BR_MAX_AGE] = { .type = NLA_U32 },
491+
};
492+
493+
static int br_changelink(struct net_device *brdev, struct nlattr *tb[],
494+
struct nlattr *data[])
495+
{
496+
struct net_bridge *br = netdev_priv(brdev);
497+
int err;
498+
499+
if (!data)
500+
return 0;
501+
502+
if (data[IFLA_BR_FORWARD_DELAY]) {
503+
err = br_set_forward_delay(br, nla_get_u32(data[IFLA_BR_FORWARD_DELAY]));
504+
if (err)
505+
return err;
506+
}
507+
508+
if (data[IFLA_BR_HELLO_TIME]) {
509+
err = br_set_hello_time(br, nla_get_u32(data[IFLA_BR_HELLO_TIME]));
510+
if (err)
511+
return err;
512+
}
513+
514+
if (data[IFLA_BR_MAX_AGE]) {
515+
err = br_set_max_age(br, nla_get_u32(data[IFLA_BR_MAX_AGE]));
516+
if (err)
517+
return err;
518+
}
519+
520+
return 0;
521+
}
522+
487523
static size_t br_get_size(const struct net_device *brdev)
488524
{
489525
return nla_total_size(sizeof(u32)) + /* IFLA_BR_FORWARD_DELAY */
@@ -534,8 +570,11 @@ struct rtnl_link_ops br_link_ops __read_mostly = {
534570
.kind = "bridge",
535571
.priv_size = sizeof(struct net_bridge),
536572
.setup = br_dev_setup,
573+
.maxtype = IFLA_BRPORT_MAX,
574+
.policy = br_policy,
537575
.validate = br_validate,
538576
.newlink = br_dev_newlink,
577+
.changelink = br_changelink,
539578
.dellink = br_dev_delete,
540579
.get_size = br_get_size,
541580
.fill_info = br_fill_info,

0 commit comments

Comments
 (0)