|
@@ -2854,7 +2854,7 @@ static int brport_nla_put_flag(struct sk_buff *skb, u32 flags, u32 mask,
|
|
|
|
|
|
int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
|
|
struct net_device *dev, u16 mode,
|
|
|
- u32 flags, u32 mask)
|
|
|
+ u32 flags, u32 mask, int nlflags)
|
|
|
{
|
|
|
struct nlmsghdr *nlh;
|
|
|
struct ifinfomsg *ifm;
|
|
@@ -2863,7 +2863,7 @@ int ndo_dflt_bridge_getlink(struct sk_buff *skb, u32 pid, u32 seq,
|
|
|
u8 operstate = netif_running(dev) ? dev->operstate : IF_OPER_DOWN;
|
|
|
struct net_device *br_dev = netdev_master_upper_dev_get(dev);
|
|
|
|
|
|
- nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), NLM_F_MULTI);
|
|
|
+ nlh = nlmsg_put(skb, pid, seq, RTM_NEWLINK, sizeof(*ifm), nlflags);
|
|
|
if (nlh == NULL)
|
|
|
return -EMSGSIZE;
|
|
|
|
|
@@ -2969,7 +2969,8 @@ static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
|
|
|
if (br_dev && br_dev->netdev_ops->ndo_bridge_getlink) {
|
|
|
if (idx >= cb->args[0] &&
|
|
|
br_dev->netdev_ops->ndo_bridge_getlink(
|
|
|
- skb, portid, seq, dev, filter_mask) < 0)
|
|
|
+ skb, portid, seq, dev, filter_mask,
|
|
|
+ NLM_F_MULTI) < 0)
|
|
|
break;
|
|
|
idx++;
|
|
|
}
|
|
@@ -2977,7 +2978,8 @@ static int rtnl_bridge_getlink(struct sk_buff *skb, struct netlink_callback *cb)
|
|
|
if (ops->ndo_bridge_getlink) {
|
|
|
if (idx >= cb->args[0] &&
|
|
|
ops->ndo_bridge_getlink(skb, portid, seq, dev,
|
|
|
- filter_mask) < 0)
|
|
|
+ filter_mask,
|
|
|
+ NLM_F_MULTI) < 0)
|
|
|
break;
|
|
|
idx++;
|
|
|
}
|
|
@@ -3018,7 +3020,7 @@ static int rtnl_bridge_notify(struct net_device *dev)
|
|
|
goto errout;
|
|
|
}
|
|
|
|
|
|
- err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0);
|
|
|
+ err = dev->netdev_ops->ndo_bridge_getlink(skb, 0, 0, dev, 0, 0);
|
|
|
if (err < 0)
|
|
|
goto errout;
|
|
|
|