* [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions
@ 2024-09-04 0:34 Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 1/3] bonding: add common function to check ipsec device Hangbin Liu
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Hangbin Liu @ 2024-09-04 0:34 UTC (permalink / raw)
To: netdev
Cc: Jay Vosburgh, Andy Gospodarek, David S . Miller, Jakub Kicinski,
Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
Jianbo Liu, Sabrina Dubroca, Simon Horman, Steffen Klassert,
Hangbin Liu
Add 2 new xfrm state offload functions xdo_dev_state_advance_esn and
xdo_dev_state_update_stats for bonding. The xdo_dev_state_free will be
added by Jianbo's patchset [1]. I will add the bonding xfrm policy offload
in future.
v7: no update, just rebase the code.
v6: Use "Return: " based on ./scripts/kernel-doc (Simon Horman)
v5: Rebase to latest net-next, update function doc (Jakub Kicinski)
v4: Ratelimit pr_warn (Sabrina Dubroca)
v3: Re-format bond_ipsec_dev, use slave_warn instead of WARN_ON (Nikolay Aleksandrov)
Fix bond_ipsec_dev defination, add *. (Simon Horman, kernel test robot)
Fix "real" typo (kernel test robot)
v2: Add a function to process the common device checking (Nikolay Aleksandrov)
Remove unused variable (Simon Horman)
v1: lore.kernel.org/netdev/20240816035518.203704-1-liuhangbin@gmail.com
Hangbin Liu (3):
bonding: add common function to check ipsec device
bonding: Add ESN support to IPSec HW offload
bonding: support xfrm state update
drivers/net/bonding/bond_main.c | 100 +++++++++++++++++++++++++++-----
1 file changed, 87 insertions(+), 13 deletions(-)
--
2.45.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCHv7 net-next 1/3] bonding: add common function to check ipsec device
2024-09-04 0:34 [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions Hangbin Liu
@ 2024-09-04 0:34 ` Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 2/3] bonding: Add ESN support to IPSec HW offload Hangbin Liu
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Hangbin Liu @ 2024-09-04 0:34 UTC (permalink / raw)
To: netdev
Cc: Jay Vosburgh, Andy Gospodarek, David S . Miller, Jakub Kicinski,
Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
Jianbo Liu, Sabrina Dubroca, Simon Horman, Steffen Klassert,
Hangbin Liu, Jay Vosburgh
This patch adds a common function to check the status of IPSec devices.
This function will be useful for future implementations, such as IPSec ESN
and state offload callbacks.
Suggested-by: Nikolay Aleksandrov <razor@blackwall.org>
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
drivers/net/bonding/bond_main.c | 50 ++++++++++++++++++++++++---------
1 file changed, 37 insertions(+), 13 deletions(-)
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index f13d413ad26c..46f46fea9152 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -418,6 +418,41 @@ static int bond_vlan_rx_kill_vid(struct net_device *bond_dev,
/*---------------------------------- XFRM -----------------------------------*/
#ifdef CONFIG_XFRM_OFFLOAD
+/**
+ * bond_ipsec_dev - Get active device for IPsec offload
+ * @xs: pointer to transformer state struct
+ *
+ * Context: caller must hold rcu_read_lock.
+ *
+ * Return: the device for ipsec offload, or NULL if not exist.
+ **/
+static struct net_device *bond_ipsec_dev(struct xfrm_state *xs)
+{
+ struct net_device *bond_dev = xs->xso.dev;
+ struct bonding *bond;
+ struct slave *slave;
+
+ if (!bond_dev)
+ return NULL;
+
+ bond = netdev_priv(bond_dev);
+ if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP)
+ return NULL;
+
+ slave = rcu_dereference(bond->curr_active_slave);
+ if (!slave)
+ return NULL;
+
+ if (!xs->xso.real_dev)
+ return NULL;
+
+ if (xs->xso.real_dev != slave->dev)
+ pr_warn_ratelimited("%s: (slave %s): not same with IPsec offload real dev %s\n",
+ bond_dev->name, slave->dev->name, xs->xso.real_dev->name);
+
+ return slave->dev;
+}
+
/**
* bond_ipsec_add_sa - program device with a security association
* @xs: pointer to transformer state struct
@@ -640,23 +675,12 @@ static void bond_ipsec_free_sa(struct xfrm_state *xs)
**/
static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs)
{
- struct net_device *bond_dev = xs->xso.dev;
struct net_device *real_dev;
- struct slave *curr_active;
- struct bonding *bond;
bool ok = false;
- bond = netdev_priv(bond_dev);
rcu_read_lock();
- curr_active = rcu_dereference(bond->curr_active_slave);
- if (!curr_active)
- goto out;
- real_dev = curr_active->dev;
-
- if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP)
- goto out;
-
- if (!xs->xso.real_dev)
+ real_dev = bond_ipsec_dev(xs);
+ if (!real_dev)
goto out;
if (!real_dev->xfrmdev_ops ||
--
2.45.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCHv7 net-next 2/3] bonding: Add ESN support to IPSec HW offload
2024-09-04 0:34 [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 1/3] bonding: add common function to check ipsec device Hangbin Liu
@ 2024-09-04 0:34 ` Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 3/3] bonding: support xfrm state update Hangbin Liu
2024-09-05 11:30 ` [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions patchwork-bot+netdevbpf
3 siblings, 0 replies; 5+ messages in thread
From: Hangbin Liu @ 2024-09-04 0:34 UTC (permalink / raw)
To: netdev
Cc: Jay Vosburgh, Andy Gospodarek, David S . Miller, Jakub Kicinski,
Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
Jianbo Liu, Sabrina Dubroca, Simon Horman, Steffen Klassert,
Hangbin Liu, Jay Vosburgh
Currently, users can see that bonding supports IPSec HW offload via ethtool.
However, this functionality does not work with NICs like Mellanox cards when
ESN (Extended Sequence Numbers) is enabled, as ESN functions are not yet
supported. This patch adds ESN support to the bonding IPSec device offload,
ensuring proper functionality with NICs that support ESN.
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
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 46f46fea9152..a6628b1f33a7 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -694,11 +694,36 @@ static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs)
return ok;
}
+/**
+ * bond_advance_esn_state - ESN support for IPSec HW offload
+ * @xs: pointer to transformer state struct
+ **/
+static void bond_advance_esn_state(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_advance_esn) {
+ pr_warn_ratelimited("%s: %s doesn't support xdo_dev_state_advance_esn\n", __func__, real_dev->name);
+ goto out;
+ }
+
+ real_dev->xfrmdev_ops->xdo_dev_state_advance_esn(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,
};
#endif /* CONFIG_XFRM_OFFLOAD */
--
2.45.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCHv7 net-next 3/3] bonding: support xfrm state update
2024-09-04 0:34 [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 1/3] bonding: add common function to check ipsec device Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 2/3] bonding: Add ESN support to IPSec HW offload Hangbin Liu
@ 2024-09-04 0:34 ` Hangbin Liu
2024-09-05 11:30 ` [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions patchwork-bot+netdevbpf
3 siblings, 0 replies; 5+ messages in thread
From: Hangbin Liu @ 2024-09-04 0:34 UTC (permalink / raw)
To: netdev
Cc: Jay Vosburgh, Andy Gospodarek, David S . Miller, Jakub Kicinski,
Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
Jianbo Liu, Sabrina Dubroca, Simon Horman, Steffen Klassert,
Hangbin Liu, Jay Vosburgh
The patch add xfrm statistics update for bonding IPsec offload.
Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org>
Acked-by: Jay Vosburgh <jv@jvosburgh.net>
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 a6628b1f33a7..47ab4ccd6fc1 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -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 */
--
2.45.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions
2024-09-04 0:34 [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions Hangbin Liu
` (2 preceding siblings ...)
2024-09-04 0:34 ` [PATCHv7 net-next 3/3] bonding: support xfrm state update Hangbin Liu
@ 2024-09-05 11:30 ` patchwork-bot+netdevbpf
3 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-09-05 11:30 UTC (permalink / raw)
To: Hangbin Liu
Cc: netdev, j.vosburgh, andy, davem, kuba, pabeni, edumazet, razor,
tariqt, jianbol, sd, horms, steffen.klassert
Hello:
This series was applied to netdev/net-next.git (main)
by Paolo Abeni <pabeni@redhat.com>:
On Wed, 4 Sep 2024 08:34:54 +0800 you wrote:
> Add 2 new xfrm state offload functions xdo_dev_state_advance_esn and
> xdo_dev_state_update_stats for bonding. The xdo_dev_state_free will be
> added by Jianbo's patchset [1]. I will add the bonding xfrm policy offload
> in future.
>
> v7: no update, just rebase the code.
> v6: Use "Return: " based on ./scripts/kernel-doc (Simon Horman)
> v5: Rebase to latest net-next, update function doc (Jakub Kicinski)
> v4: Ratelimit pr_warn (Sabrina Dubroca)
> v3: Re-format bond_ipsec_dev, use slave_warn instead of WARN_ON (Nikolay Aleksandrov)
> Fix bond_ipsec_dev defination, add *. (Simon Horman, kernel test robot)
> Fix "real" typo (kernel test robot)
> v2: Add a function to process the common device checking (Nikolay Aleksandrov)
> Remove unused variable (Simon Horman)
> v1: lore.kernel.org/netdev/20240816035518.203704-1-liuhangbin@gmail.com
>
> [...]
Here is the summary with links:
- [PATCHv7,net-next,1/3] bonding: add common function to check ipsec device
https://git.kernel.org/netdev/net-next/c/1ddec5d0eec4
- [PATCHv7,net-next,2/3] bonding: Add ESN support to IPSec HW offload
https://git.kernel.org/netdev/net-next/c/96d30bf94109
- [PATCHv7,net-next,3/3] bonding: support xfrm state update
https://git.kernel.org/netdev/net-next/c/68db604e16d5
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2024-09-05 11:30 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-04 0:34 [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 1/3] bonding: add common function to check ipsec device Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 2/3] bonding: Add ESN support to IPSec HW offload Hangbin Liu
2024-09-04 0:34 ` [PATCHv7 net-next 3/3] bonding: support xfrm state update Hangbin Liu
2024-09-05 11:30 ` [PATCHv7 net-next 0/3] Bonding: support new xfrm state offload functions patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).