Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 340645
b: refs/heads/master
c: c38e01b
h: refs/heads/master
i:
  340643: b20d0e9
v: v3
  • Loading branch information
John Fastabend authored and David S. Miller committed Nov 3, 2012
1 parent 8ea9c22 commit 5deaa6f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 26cdfb4915a9a408f4c1f04111999a11eb0ee606
refs/heads/master: c38e01b8b958cb6606bcc156d3d00c3ee99a13f8
26 changes: 18 additions & 8 deletions trunk/net/core/rtnetlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -2364,13 +2364,19 @@ static int rtnl_bridge_notify(struct net_device *dev, u16 flags)
goto errout;
}

if (!flags && master && master->netdev_ops->ndo_bridge_getlink)
if ((!flags || (flags & BRIDGE_FLAGS_MASTER)) &&
master && master->netdev_ops->ndo_bridge_getlink) {
err = master->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev);
else if (dev->netdev_ops->ndo_bridge_getlink)
err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev);
if (err < 0)
goto errout;
}

if (err < 0)
goto errout;
if ((flags & BRIDGE_FLAGS_SELF) &&
dev->netdev_ops->ndo_bridge_getlink) {
err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev);
if (err < 0)
goto errout;
}

rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC);
return 0;
Expand All @@ -2389,7 +2395,8 @@ static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
struct net_device *dev;
struct nlattr *br_spec, *attr = NULL;
int rem, err = -EOPNOTSUPP;
u16 flags = 0;
u16 oflags, flags = 0;
bool have_flags = false;

if (nlmsg_len(nlh) < sizeof(*ifm))
return -EINVAL;
Expand All @@ -2408,12 +2415,15 @@ static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
if (br_spec) {
nla_for_each_nested(attr, br_spec, rem) {
if (nla_type(attr) == IFLA_BRIDGE_FLAGS) {
have_flags = true;
flags = nla_get_u16(attr);
break;
}
}
}

oflags = flags;

if (!flags || (flags & BRIDGE_FLAGS_MASTER)) {
if (!dev->master ||
!dev->master->netdev_ops->ndo_bridge_setlink) {
Expand All @@ -2438,11 +2448,11 @@ static int rtnl_bridge_setlink(struct sk_buff *skb, struct nlmsghdr *nlh,
flags &= ~BRIDGE_FLAGS_SELF;
}

if (attr && nla_type(attr) == IFLA_BRIDGE_FLAGS)
if (have_flags)
memcpy(nla_data(attr), &flags, sizeof(flags));
/* Generate event to notify upper layer of bridge change */
if (!err)
err = rtnl_bridge_notify(dev, flags);
err = rtnl_bridge_notify(dev, oflags);
out:
return err;
}
Expand Down

0 comments on commit 5deaa6f

Please sign in to comment.