|
@@ -2911,6 +2911,7 @@ int ndo_dflt_fdb_dump(struct sk_buff *skb,
|
|
nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->mc);
|
|
nlmsg_populate_fdb(skb, cb, dev, &idx, &dev->mc);
|
|
out:
|
|
out:
|
|
netif_addr_unlock_bh(dev);
|
|
netif_addr_unlock_bh(dev);
|
|
|
|
+ cb->args[1] = err;
|
|
return idx;
|
|
return idx;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL(ndo_dflt_fdb_dump);
|
|
EXPORT_SYMBOL(ndo_dflt_fdb_dump);
|
|
@@ -2944,6 +2945,7 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
|
ops = br_dev->netdev_ops;
|
|
ops = br_dev->netdev_ops;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ cb->args[1] = 0;
|
|
for_each_netdev(net, dev) {
|
|
for_each_netdev(net, dev) {
|
|
if (brport_idx && (dev->ifindex != brport_idx))
|
|
if (brport_idx && (dev->ifindex != brport_idx))
|
|
continue;
|
|
continue;
|
|
@@ -2971,12 +2973,16 @@ static int rtnl_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb)
|
|
idx = cops->ndo_fdb_dump(skb, cb, br_dev, dev,
|
|
idx = cops->ndo_fdb_dump(skb, cb, br_dev, dev,
|
|
idx);
|
|
idx);
|
|
}
|
|
}
|
|
|
|
+ if (cb->args[1] == -EMSGSIZE)
|
|
|
|
+ break;
|
|
|
|
|
|
if (dev->netdev_ops->ndo_fdb_dump)
|
|
if (dev->netdev_ops->ndo_fdb_dump)
|
|
idx = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, NULL,
|
|
idx = dev->netdev_ops->ndo_fdb_dump(skb, cb, dev, NULL,
|
|
idx);
|
|
idx);
|
|
else
|
|
else
|
|
idx = ndo_dflt_fdb_dump(skb, cb, dev, NULL, idx);
|
|
idx = ndo_dflt_fdb_dump(skb, cb, dev, NULL, idx);
|
|
|
|
+ if (cb->args[1] == -EMSGSIZE)
|
|
|
|
+ break;
|
|
|
|
|
|
cops = NULL;
|
|
cops = NULL;
|
|
}
|
|
}
|