Message ID | 20240820004840.510412-4-liuhangbin@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | Bonding: support new xfrm state offload functions | expand |
Hi Hangbin, 2024-08-20, 08:48:40 +0800, Hangbin Liu wrote: > The patch add xfrm statistics update for bonding IPsec offload. > > Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org> > Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> > --- > drivers/net/bonding/bond_main.c | 25 +++++++++++++++++++++++++ > 1 file changed, 25 insertions(+) > > diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c > index 24747fceef66..4a4a1d9c8cca 100644 > --- a/drivers/net/bonding/bond_main.c > +++ b/drivers/net/bonding/bond_main.c > @@ -675,11 +675,36 @@ 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("%s: %s doesn't support xdo_dev_state_update_stats\n", __func__, real_dev->name); I'm not convinced we should warn here. Most drivers don't implement xdo_dev_state_update_stats, so if we're using one of those drivers (for example netdevsim), we'll get one line in dmesg for every "ip xfrm state" command run by the user. At most it should be ratelimited, but since it's an optional callback, I think no warning would be fine.
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index 24747fceef66..4a4a1d9c8cca 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -675,11 +675,36 @@ 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("%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_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 */