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

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

bonding: convert netlink to use slave data info api

parent ba7d49b1
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3824,7 +3824,6 @@ static const struct net_device_ops bond_netdev_ops = {
#endif
	.ndo_add_slave		= bond_enslave,
	.ndo_del_slave		= bond_release,
	.ndo_get_slave		= bond_get_slave,
	.ndo_fix_features	= bond_fix_features,
};

+19 −2
Original line number Diff line number Diff line
@@ -21,10 +21,23 @@
#include <net/rtnetlink.h>
#include "bonding.h"

int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb)
static size_t bond_get_slave_size(const struct net_device *bond_dev,
				  const struct net_device *slave_dev)
{
	return nla_total_size(sizeof(u8)) +	/* IFLA_BOND_SLAVE_STATE */
		nla_total_size(sizeof(u8)) +	/* IFLA_BOND_SLAVE_MII_STATUS */
		nla_total_size(sizeof(u32)) +	/* IFLA_BOND_SLAVE_LINK_FAILURE_COUNT */
		nla_total_size(MAX_ADDR_LEN) +	/* IFLA_BOND_SLAVE_PERM_HWADDR */
		nla_total_size(sizeof(u16)) +	/* IFLA_BOND_SLAVE_QUEUE_ID */
		nla_total_size(sizeof(u16)) +	/* IFLA_BOND_SLAVE_AD_AGGREGATOR_ID */
		0;
}

static int bond_fill_slave_info(struct sk_buff *skb,
				const struct net_device *bond_dev,
				const struct net_device *slave_dev)
{
	struct slave *slave = bond_slave_get_rtnl(slave_dev);
	const struct aggregator *agg;

	if (nla_put_u8(skb, IFLA_BOND_SLAVE_STATE, bond_slave_state(slave)))
		goto nla_put_failure;
@@ -44,6 +57,8 @@ int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb)
		goto nla_put_failure;

	if (slave->bond->params.mode == BOND_MODE_8023AD) {
		const struct aggregator *agg;

		agg = SLAVE_AD_INFO(slave).port.aggregator;
		if (agg)
			if (nla_put_u16(skb, IFLA_BOND_SLAVE_AD_AGGREGATOR_ID,
@@ -541,6 +556,8 @@ struct rtnl_link_ops bond_link_ops __read_mostly = {
	.get_num_tx_queues	= bond_get_num_tx_queues,
	.get_num_rx_queues	= bond_get_num_tx_queues, /* Use the same number
							     as for TX queues */
	.get_slave_size		= bond_get_slave_size,
	.fill_slave_info	= bond_fill_slave_info,
};

int __init bond_netlink_init(void)
+0 −1
Original line number Diff line number Diff line
@@ -436,7 +436,6 @@ int bond_sysfs_slave_add(struct slave *slave);
void bond_sysfs_slave_del(struct slave *slave);
int bond_enslave(struct net_device *bond_dev, struct net_device *slave_dev);
int bond_release(struct net_device *bond_dev, struct net_device *slave_dev);
int bond_get_slave(struct net_device *slave_dev, struct sk_buff *skb);
int bond_xmit_hash(struct bonding *bond, struct sk_buff *skb, int count);
int bond_parse_parm(const char *mode_arg, const struct bond_parm_tbl *tbl);
int bond_parm_tbl_lookup(int mode, const struct bond_parm_tbl *tbl);
+0 −51
Original line number Diff line number Diff line
@@ -800,28 +800,6 @@ static size_t rtnl_port_size(const struct net_device *dev)
		return port_self_size;
}

static size_t rtnl_bond_slave_size(const struct net_device *dev)
{
	struct net_device *bond;
	size_t slave_size =
		nla_total_size(sizeof(struct nlattr)) +	/* IFLA_BOND_SLAVE */
		nla_total_size(1) +	/* IFLA_BOND_SLAVE_STATE */
		nla_total_size(1) +	/* IFLA_BOND_SLAVE_MII_STATUS */
		nla_total_size(4) +	/* IFLA_BOND_SLAVE_LINK_FAILURE_COUNT */
		nla_total_size(MAX_ADDR_LEN) +	/* IFLA_BOND_SLAVE_PERM_HWADDR */
		nla_total_size(2) +	/* IFLA_BOND_SLAVE_QUEUE_ID */
		nla_total_size(2) +	/* IFLA_BOND_SLAVE_AD_AGGREGATOR_ID */
		0;

	if (netif_is_bond_slave((struct net_device *)dev)) {
		bond = netdev_master_upper_dev_get((struct net_device *)dev);
		if (bond && bond->netdev_ops->ndo_get_slave)
			return slave_size;
	}

	return 0;
}

static noinline size_t if_nlmsg_size(const struct net_device *dev,
				     u32 ext_filter_mask)
{
@@ -851,7 +829,6 @@ static noinline size_t if_nlmsg_size(const struct net_device *dev,
	       + rtnl_port_size(dev) /* IFLA_VF_PORTS + IFLA_PORT_SELF */
	       + rtnl_link_get_size(dev) /* IFLA_LINKINFO */
	       + rtnl_link_get_af_size(dev) /* IFLA_AF_SPEC */
	       + rtnl_bond_slave_size(dev) /* IFLA_SLAVE */
	       + nla_total_size(MAX_PHYS_PORT_ID_LEN); /* IFLA_PHYS_PORT_ID */
}

@@ -949,34 +926,6 @@ static int rtnl_phys_port_id_fill(struct sk_buff *skb, struct net_device *dev)
	return 0;
}

static size_t rtnl_bond_slave_fill(struct sk_buff *skb, struct net_device *dev)
{
	struct net_device *bond;
	struct nlattr *nest;
	int err;

	if (!netif_is_bond_slave(dev))
		return 0;

	bond = netdev_master_upper_dev_get(dev);
	if (!bond || !bond->netdev_ops->ndo_get_slave)
		return 0;

	nest = nla_nest_start(skb, IFLA_BOND_SLAVE);
	if (!nest)
		return -EMSGSIZE;

	err = bond->netdev_ops->ndo_get_slave(dev, skb);
	if (err) {
		nla_nest_cancel(skb, nest);
		return (err == -EMSGSIZE) ? err : 0;
	}

	nla_nest_end(skb, nest);

	return 0;
}

static int rtnl_fill_ifinfo(struct sk_buff *skb, struct net_device *dev,
			    int type, u32 pid, u32 seq, u32 change,
			    unsigned int flags, u32 ext_filter_mask)