Commit 68db604e authored by Hangbin Liu's avatar Hangbin Liu Committed by Paolo Abeni
Browse files

bonding: support xfrm state update



The patch add xfrm statistics update for bonding IPsec offload.

Reviewed-by: default avatarNikolay Aleksandrov <razor@blackwall.org>
Acked-by: default avatarJay Vosburgh <jv@jvosburgh.net>
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 96d30bf9
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -718,12 +718,37 @@ static void bond_advance_esn_state(struct xfrm_state *xs)
	rcu_read_unlock();
}

/**
 * bond_xfrm_update_stats - Update xfrm state
 * @xs: pointer to transformer state struct
 **/
static void bond_xfrm_update_stats(struct xfrm_state *xs)
{
	struct net_device *real_dev;

	rcu_read_lock();
	real_dev = bond_ipsec_dev(xs);
	if (!real_dev)
		goto out;

	if (!real_dev->xfrmdev_ops ||
	    !real_dev->xfrmdev_ops->xdo_dev_state_update_stats) {
		pr_warn_ratelimited("%s: %s doesn't support xdo_dev_state_update_stats\n", __func__, real_dev->name);
		goto out;
	}

	real_dev->xfrmdev_ops->xdo_dev_state_update_stats(xs);
out:
	rcu_read_unlock();
}

static const struct xfrmdev_ops bond_xfrmdev_ops = {
	.xdo_dev_state_add = bond_ipsec_add_sa,
	.xdo_dev_state_delete = bond_ipsec_del_sa,
	.xdo_dev_state_free = bond_ipsec_free_sa,
	.xdo_dev_offload_ok = bond_ipsec_offload_ok,
	.xdo_dev_state_advance_esn = bond_advance_esn_state,
	.xdo_dev_state_update_stats = bond_xfrm_update_stats,
};
#endif /* CONFIG_XFRM_OFFLOAD */