* [PATCH net-next v9 0/2] Add support to offload macsec using netlink update
@ 2023-01-11 15:02 ehakim
2023-01-11 15:02 ` [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: ehakim @ 2023-01-11 15:02 UTC (permalink / raw)
To: netdev; +Cc: raeds, davem, edumazet, kuba, pabeni, sd, atenart, Emeel Hakim
From: Emeel Hakim <ehakim@nvidia.com>
This series adds support for offloading macsec as part of the netlink
update routine, command example:
ip link set link eth2 macsec0 type macsec offload mac
The above is done using the IFLA_MACSEC_OFFLOAD attribute hence
the second patch of dumping this attribute as part of the macsec
dump.
Emeel Hakim (2):
macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
drivers/net/macsec.c | 126 ++++++++++++++++++++++++-------------------
1 file changed, 70 insertions(+), 56 deletions(-)
--
2.21.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
2023-01-11 15:02 [PATCH net-next v9 0/2] Add support to offload macsec using netlink update ehakim
@ 2023-01-11 15:02 ` ehakim
2023-01-13 5:42 ` Jakub Kicinski
2023-01-11 15:02 ` [PATCH net-next v9 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
2023-01-12 9:08 ` [PATCH net-next v9 0/2] Add support to offload macsec using netlink update Sabrina Dubroca
2 siblings, 1 reply; 5+ messages in thread
From: ehakim @ 2023-01-11 15:02 UTC (permalink / raw)
To: netdev; +Cc: raeds, davem, edumazet, kuba, pabeni, sd, atenart, Emeel Hakim
From: Emeel Hakim <ehakim@nvidia.com>
Add support for changing Macsec offload selection through the
netlink layer by implementing the relevant changes in
macsec_changelink.
Since the handling in macsec_changelink is similar to macsec_upd_offload,
update macsec_upd_offload to use a common helper function to avoid
duplication.
Example for setting offload for a macsec device:
ip link set macsec0 type macsec offload mac
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
v8 -> v9: - Initialize ret variable to prevent returning uninitialized value.
v7 -> v8: - Dont call mdo_upd_secy when mdo_add_secy has been just called.
v6 -> v7: - Dont change rtnl_lock position after commit f3b4a00f0f62 ("net: macsec: fix net device access prior to holding a lock").
v5 -> v6: - Locking issue got fixed in a separate patch so rebase
V4 -> V5: - Fail immediately if macsec ops does not exist
V3 -> V4: - Dont pass whole attributes data to macsec_update_offload, just pass relevant attribute.
- Fix code style.
- Remove macsec_changelink_upd_offload
V2 -> V3: - Split the original patch into 3 patches, the macsec_rtnl_policy related change (separate patch)
to be sent to "net" branch as a fix.
- Change the original patch title to make it clear that it's only adding IFLA_MACSEC_OFFLOAD
to changelink
V1 -> V2: - Add common helper to avoid duplicating code
drivers/net/macsec.c | 115 +++++++++++++++++++++++--------------------
1 file changed, 61 insertions(+), 54 deletions(-)
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index bf8ac7a3ded7..4ba6712d5831 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2583,16 +2583,57 @@ static bool macsec_is_configured(struct macsec_dev *macsec)
return false;
}
+static int macsec_update_offload(struct net_device *dev, enum macsec_offload offload)
+{
+ enum macsec_offload prev_offload;
+ const struct macsec_ops *ops;
+ struct macsec_context ctx;
+ struct macsec_dev *macsec;
+ int ret = 0;
+
+ macsec = macsec_priv(dev);
+
+ /* Check if the offloading mode is supported by the underlying layers */
+ if (offload != MACSEC_OFFLOAD_OFF &&
+ !macsec_check_offload(offload, macsec)) {
+ return -EOPNOTSUPP;
+ }
+
+ /* Check if the net device is busy. */
+ if (netif_running(dev))
+ return -EBUSY;
+
+ /* Check if the device already has rules configured: we do not support
+ * rules migration.
+ */
+ if (macsec_is_configured(macsec))
+ return -EBUSY;
+
+ prev_offload = macsec->offload;
+
+ ops = __macsec_get_ops(offload == MACSEC_OFFLOAD_OFF ? prev_offload : offload,
+ macsec, &ctx);
+ if (!ops)
+ return -EOPNOTSUPP;
+
+ macsec->offload = offload;
+
+ ctx.secy = &macsec->secy;
+ ret = offload == MACSEC_OFFLOAD_OFF ? macsec_offload(ops->mdo_del_secy, &ctx)
+ : macsec_offload(ops->mdo_add_secy, &ctx);
+ if (ret)
+ macsec->offload = prev_offload;
+
+ return ret;
+}
+
static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
{
struct nlattr *tb_offload[MACSEC_OFFLOAD_ATTR_MAX + 1];
- enum macsec_offload offload, prev_offload;
- int (*func)(struct macsec_context *ctx);
struct nlattr **attrs = info->attrs;
- struct net_device *dev;
- const struct macsec_ops *ops;
- struct macsec_context ctx;
+ enum macsec_offload offload;
struct macsec_dev *macsec;
+ struct net_device *dev;
int ret = 0;
if (!attrs[MACSEC_ATTR_IFINDEX])
@@ -2621,55 +2662,9 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
}
offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]);
- if (macsec->offload == offload)
- goto out;
-
- /* Check if the offloading mode is supported by the underlying layers */
- if (offload != MACSEC_OFFLOAD_OFF &&
- !macsec_check_offload(offload, macsec)) {
- ret = -EOPNOTSUPP;
- goto out;
- }
-
- /* Check if the net device is busy. */
- if (netif_running(dev)) {
- ret = -EBUSY;
- goto out;
- }
-
- prev_offload = macsec->offload;
- macsec->offload = offload;
-
- /* Check if the device already has rules configured: we do not support
- * rules migration.
- */
- if (macsec_is_configured(macsec)) {
- ret = -EBUSY;
- goto rollback;
- }
-
- ops = __macsec_get_ops(offload == MACSEC_OFFLOAD_OFF ? prev_offload : offload,
- macsec, &ctx);
- if (!ops) {
- ret = -EOPNOTSUPP;
- goto rollback;
- }
-
- if (prev_offload == MACSEC_OFFLOAD_OFF)
- func = ops->mdo_add_secy;
- else
- func = ops->mdo_del_secy;
- ctx.secy = &macsec->secy;
- ret = macsec_offload(func, &ctx);
- if (ret)
- goto rollback;
-
- rtnl_unlock();
- return 0;
-
-rollback:
- macsec->offload = prev_offload;
+ if (macsec->offload != offload)
+ ret = macsec_update_offload(dev, offload);
out:
rtnl_unlock();
return ret;
@@ -3817,6 +3812,8 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
struct netlink_ext_ack *extack)
{
struct macsec_dev *macsec = macsec_priv(dev);
+ bool macsec_offload_state_change = false;
+ enum macsec_offload offload;
struct macsec_tx_sc tx_sc;
struct macsec_secy secy;
int ret;
@@ -3840,8 +3837,18 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
if (ret)
goto cleanup;
+ if (data[IFLA_MACSEC_OFFLOAD]) {
+ offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
+ if (macsec->offload != offload) {
+ macsec_offload_state_change = true;
+ ret = macsec_update_offload(dev, offload);
+ if (ret)
+ goto cleanup;
+ }
+ }
+
/* If h/w offloading is available, propagate to the device */
- if (macsec_is_offloaded(macsec)) {
+ if (!macsec_offload_state_change && macsec_is_offloaded(macsec)) {
const struct macsec_ops *ops;
struct macsec_context ctx;
--
2.21.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH net-next v9 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
2023-01-11 15:02 [PATCH net-next v9 0/2] Add support to offload macsec using netlink update ehakim
2023-01-11 15:02 ` [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
@ 2023-01-11 15:02 ` ehakim
2023-01-12 9:08 ` [PATCH net-next v9 0/2] Add support to offload macsec using netlink update Sabrina Dubroca
2 siblings, 0 replies; 5+ messages in thread
From: ehakim @ 2023-01-11 15:02 UTC (permalink / raw)
To: netdev; +Cc: raeds, davem, edumazet, kuba, pabeni, sd, atenart, Emeel Hakim
From: Emeel Hakim <ehakim@nvidia.com>
Support dumping offload netlink attribute in macsec's device
attributes dump.
Change macsec_get_size to consider the offload attribute in
the calculations of the required room for dumping the device
netlink attributes.
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
V1 -> V2: - Update commit message.
drivers/net/macsec.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index 4ba6712d5831..877cdbdaaf6b 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -4247,16 +4247,22 @@ static size_t macsec_get_size(const struct net_device *dev)
nla_total_size(1) + /* IFLA_MACSEC_SCB */
nla_total_size(1) + /* IFLA_MACSEC_REPLAY_PROTECT */
nla_total_size(1) + /* IFLA_MACSEC_VALIDATION */
+ nla_total_size(1) + /* IFLA_MACSEC_OFFLOAD */
0;
}
static int macsec_fill_info(struct sk_buff *skb,
const struct net_device *dev)
{
- struct macsec_secy *secy = &macsec_priv(dev)->secy;
- struct macsec_tx_sc *tx_sc = &secy->tx_sc;
+ struct macsec_tx_sc *tx_sc;
+ struct macsec_dev *macsec;
+ struct macsec_secy *secy;
u64 csid;
+ macsec = macsec_priv(dev);
+ secy = &macsec->secy;
+ tx_sc = &secy->tx_sc;
+
switch (secy->key_len) {
case MACSEC_GCM_AES_128_SAK_LEN:
csid = secy->xpn ? MACSEC_CIPHER_ID_GCM_AES_XPN_128 : MACSEC_DEFAULT_CIPHER_ID;
@@ -4281,6 +4287,7 @@ static int macsec_fill_info(struct sk_buff *skb,
nla_put_u8(skb, IFLA_MACSEC_SCB, tx_sc->scb) ||
nla_put_u8(skb, IFLA_MACSEC_REPLAY_PROTECT, secy->replay_protect) ||
nla_put_u8(skb, IFLA_MACSEC_VALIDATION, secy->validate_frames) ||
+ nla_put_u8(skb, IFLA_MACSEC_OFFLOAD, macsec->offload) ||
0)
goto nla_put_failure;
--
2.21.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v9 0/2] Add support to offload macsec using netlink update
2023-01-11 15:02 [PATCH net-next v9 0/2] Add support to offload macsec using netlink update ehakim
2023-01-11 15:02 ` [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
2023-01-11 15:02 ` [PATCH net-next v9 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
@ 2023-01-12 9:08 ` Sabrina Dubroca
2 siblings, 0 replies; 5+ messages in thread
From: Sabrina Dubroca @ 2023-01-12 9:08 UTC (permalink / raw)
To: ehakim; +Cc: netdev, raeds, davem, edumazet, kuba, pabeni, atenart
2023-01-11, 17:02:08 +0200, ehakim@nvidia.com wrote:
> From: Emeel Hakim <ehakim@nvidia.com>
>
> This series adds support for offloading macsec as part of the netlink
> update routine, command example:
> ip link set link eth2 macsec0 type macsec offload mac
>
> The above is done using the IFLA_MACSEC_OFFLOAD attribute hence
> the second patch of dumping this attribute as part of the macsec
> dump.
>
> Emeel Hakim (2):
> macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
> macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
>
> drivers/net/macsec.c | 126 ++++++++++++++++++++++++-------------------
> 1 file changed, 70 insertions(+), 56 deletions(-)
Series:
Reviewed-by: Sabrina Dubroca <sd@queasysnail.net>
Thanks Emeel.
--
Sabrina
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
2023-01-11 15:02 ` [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
@ 2023-01-13 5:42 ` Jakub Kicinski
0 siblings, 0 replies; 5+ messages in thread
From: Jakub Kicinski @ 2023-01-13 5:42 UTC (permalink / raw)
To: ehakim; +Cc: netdev, raeds, davem, edumazet, pabeni, sd, atenart
On Wed, 11 Jan 2023 17:02:09 +0200 ehakim@nvidia.com wrote:
> + /* Check if the offloading mode is supported by the underlying layers */
> + if (offload != MACSEC_OFFLOAD_OFF &&
> + !macsec_check_offload(offload, macsec)) {
> + return -EOPNOTSUPP;
> + }
SMH. Let me drop the extra brackets here when applying.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-01-13 5:43 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-11 15:02 [PATCH net-next v9 0/2] Add support to offload macsec using netlink update ehakim
2023-01-11 15:02 ` [PATCH net-next v9 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
2023-01-13 5:42 ` Jakub Kicinski
2023-01-11 15:02 ` [PATCH net-next v9 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
2023-01-12 9:08 ` [PATCH net-next v9 0/2] Add support to offload macsec using netlink update Sabrina Dubroca
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.