All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
@ 2022-12-07 10:10 ehakim
  2022-12-07 10:10 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: ehakim @ 2022-12-07 10:10 UTC (permalink / raw)
  To: linux-kernel
  Cc: raeds, davem, edumazet, kuba, pabeni, netdev, sd, atenart, jiri,
	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_change link.

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

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
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 | 102 +++++++++++++++++++++++++++----------------
 1 file changed, 64 insertions(+), 38 deletions(-)

diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
index d73b9d535b7a..1850a1ee4380 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -2583,16 +2583,45 @@ static bool macsec_is_configured(struct macsec_dev *macsec)
 	return false;
 }
 
+static int macsec_update_offload(struct macsec_dev *macsec, enum macsec_offload offload)
+{
+	enum macsec_offload prev_offload;
+	const struct macsec_ops *ops;
+	struct macsec_context ctx;
+	int ret = 0;
+
+	prev_offload = macsec->offload;
+
+	/* Check if the device already has rules configured: we do not support
+	 * rules migration.
+	 */
+	if (macsec_is_configured(macsec))
+		return -EBUSY;
+
+	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;
 
 	if (!attrs[MACSEC_ATTR_IFINDEX])
@@ -2629,39 +2658,7 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
 
 	rtnl_lock();
 
-	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;
+	ret = macsec_update_offload(macsec, offload);
 
 	rtnl_unlock();
 	return ret;
@@ -3803,6 +3800,29 @@ static int macsec_changelink_common(struct net_device *dev,
 	return 0;
 }
 
+static int macsec_changelink_upd_offload(struct net_device *dev, struct nlattr *data[])
+{
+	enum macsec_offload offload;
+	struct macsec_dev *macsec;
+
+	macsec = macsec_priv(dev);
+	offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
+
+	if (macsec->offload == offload)
+		return 0;
+
+	/* 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;
+
+	return macsec_update_offload(macsec, offload);
+}
+
 static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
 			     struct nlattr *data[],
 			     struct netlink_ext_ack *extack)
@@ -3831,6 +3851,12 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
 	if (ret)
 		goto cleanup;
 
+	if (data[IFLA_MACSEC_OFFLOAD]) {
+		ret = macsec_changelink_upd_offload(dev, data);
+		if (ret)
+			goto cleanup;
+	}
+
 	/* If h/w offloading is available, propagate to the device */
 	if (macsec_is_offloaded(macsec)) {
 		const struct macsec_ops *ops;
-- 
2.21.3


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
  2022-12-07 10:10 [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
@ 2022-12-07 10:10 ` ehakim
  2022-12-07 15:33   ` Jiri Pirko
  2022-12-07 15:35 ` [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink Jiri Pirko
  2022-12-07 15:45 ` Sabrina Dubroca
  2 siblings, 1 reply; 12+ messages in thread
From: ehakim @ 2022-12-07 10:10 UTC (permalink / raw)
  To: linux-kernel
  Cc: raeds, davem, edumazet, kuba, pabeni, netdev, sd, atenart, jiri,
	Emeel Hakim

From: Emeel Hakim <ehakim@nvidia.com>

consider IFLA_MACSEC_OFFLOAD in macsec's device dump,
this mandates a change at macsec_get_size to consider the
additional attribute.

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
 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 1850a1ee4380..0b8613576383 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -4257,16 +4257,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;
@@ -4291,6 +4297,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] 12+ messages in thread

* Re: [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
  2022-12-07 10:10 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
@ 2022-12-07 15:33   ` Jiri Pirko
  0 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2022-12-07 15:33 UTC (permalink / raw)
  To: ehakim
  Cc: linux-kernel, raeds, davem, edumazet, kuba, pabeni, netdev, sd,
	atenart

Wed, Dec 07, 2022 at 11:10:17AM CET, ehakim@nvidia.com wrote:
>From: Emeel Hakim <ehakim@nvidia.com>
>
>consider IFLA_MACSEC_OFFLOAD in macsec's device dump,

Sentense starts with capital letter.


>this mandates a change at macsec_get_size to consider the
>additional attribute.

I'm unable to understand what you mean by this description. What should
the codebase consider and why?

Code looks fine.

>
>Reviewed-by: Raed Salem <raeds@nvidia.com>
>Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
>---
> 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 1850a1ee4380..0b8613576383 100644
>--- a/drivers/net/macsec.c
>+++ b/drivers/net/macsec.c
>@@ -4257,16 +4257,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;
>@@ -4291,6 +4297,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	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-07 10:10 [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
  2022-12-07 10:10 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
@ 2022-12-07 15:35 ` Jiri Pirko
  2022-12-07 15:45 ` Sabrina Dubroca
  2 siblings, 0 replies; 12+ messages in thread
From: Jiri Pirko @ 2022-12-07 15:35 UTC (permalink / raw)
  To: ehakim
  Cc: linux-kernel, raeds, davem, edumazet, kuba, pabeni, netdev, sd,
	atenart

Wed, Dec 07, 2022 at 11:10:16AM CET, ehakim@nvidia.com wrote:
>From: Emeel Hakim <ehakim@nvidia.com>
>
>Add support for changing Macsec offload selection through the
>netlink layer by implementing the relevant changes in
>macsec_change link.
>
>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
>
>Reviewed-by: Raed Salem <raeds@nvidia.com>
>Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
>---
>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 | 102 +++++++++++++++++++++++++++----------------
> 1 file changed, 64 insertions(+), 38 deletions(-)
>
>diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c
>index d73b9d535b7a..1850a1ee4380 100644
>--- a/drivers/net/macsec.c
>+++ b/drivers/net/macsec.c
>@@ -2583,16 +2583,45 @@ static bool macsec_is_configured(struct macsec_dev *macsec)
> 	return false;
> }
> 
>+static int macsec_update_offload(struct macsec_dev *macsec, enum macsec_offload offload)
>+{
>+	enum macsec_offload prev_offload;
>+	const struct macsec_ops *ops;
>+	struct macsec_context ctx;
>+	int ret = 0;
>+
>+	prev_offload = macsec->offload;
>+
>+	/* Check if the device already has rules configured: we do not support
>+	 * rules migration.
>+	 */
>+	if (macsec_is_configured(macsec))
>+		return -EBUSY;
>+
>+	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;
> 
> 	if (!attrs[MACSEC_ATTR_IFINDEX])
>@@ -2629,39 +2658,7 @@ static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info)
> 
> 	rtnl_lock();
> 
>-	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;
>+	ret = macsec_update_offload(macsec, offload);
> 
> 	rtnl_unlock();
> 	return ret;
>@@ -3803,6 +3800,29 @@ static int macsec_changelink_common(struct net_device *dev,
> 	return 0;
> }
> 
>+static int macsec_changelink_upd_offload(struct net_device *dev, struct nlattr *data[])

Only data[IFLA_MACSEC_OFFLOAD] is used there. Pass just this attr.


>+{
>+	enum macsec_offload offload;
>+	struct macsec_dev *macsec;
>+
>+	macsec = macsec_priv(dev);
>+	offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
>+
>+	if (macsec->offload == offload)
>+		return 0;
>+
>+	/* 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;
>+
>+	return macsec_update_offload(macsec, offload);
>+}
>+
> static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
> 			     struct nlattr *data[],
> 			     struct netlink_ext_ack *extack)
>@@ -3831,6 +3851,12 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[],
> 	if (ret)
> 		goto cleanup;
> 
>+	if (data[IFLA_MACSEC_OFFLOAD]) {
>+		ret = macsec_changelink_upd_offload(dev, data);
>+		if (ret)
>+			goto cleanup;
>+	}
>+
> 	/* If h/w offloading is available, propagate to the device */
> 	if (macsec_is_offloaded(macsec)) {
> 		const struct macsec_ops *ops;
>-- 
>2.21.3
>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-07 10:10 [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
  2022-12-07 10:10 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
  2022-12-07 15:35 ` [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink Jiri Pirko
@ 2022-12-07 15:45 ` Sabrina Dubroca
  2022-12-07 15:52   ` Emeel Hakim
  2 siblings, 1 reply; 12+ messages in thread
From: Sabrina Dubroca @ 2022-12-07 15:45 UTC (permalink / raw)
  To: ehakim
  Cc: linux-kernel, raeds, davem, edumazet, kuba, pabeni, netdev,
	atenart, jiri

2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> From: Emeel Hakim <ehakim@nvidia.com>
> 
> Add support for changing Macsec offload selection through the
> netlink layer by implementing the relevant changes in
> macsec_change link.

nit: macsec_changelink

[...]
> +static int macsec_update_offload(struct macsec_dev *macsec, enum macsec_offload offload)
> +{
> +	enum macsec_offload prev_offload;
> +	const struct macsec_ops *ops;
> +	struct macsec_context ctx;
> +	int ret = 0;
> +
> +	prev_offload = macsec->offload;
> +
> +	/* Check if the device already has rules configured: we do not support
> +	 * rules migration.
> +	 */
> +	if (macsec_is_configured(macsec))
> +		return -EBUSY;
> +
> +	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);

I think aligning the two macsec_offload(...) calls would make this a
bit easier to read:

	ret = offload == MACSEC_OFFLOAD_OFF ? macsec_offload(ops->mdo_del_secy, &ctx)
					    : macsec_offload(ops->mdo_add_secy, &ctx);

(and remove the unnecessary ())

> +
> +	if (ret)
> +		macsec->offload = prev_offload;
> +
> +	return ret;
> +}
> +

[...]
> +static int macsec_changelink_upd_offload(struct net_device *dev, struct nlattr *data[])
> +{
> +	enum macsec_offload offload;
> +	struct macsec_dev *macsec;
> +
> +	macsec = macsec_priv(dev);
> +	offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);

All those checks are also present in macsec_upd_offload, why not move
them into macsec_update_offload as well? (and then you don't really
need macsec_changelink_upd_offload anymore)

> +	if (macsec->offload == offload)
> +		return 0;
> +
> +	/* 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;
> +
> +	return macsec_update_offload(macsec, offload);
> +}
> +

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-07 15:45 ` Sabrina Dubroca
@ 2022-12-07 15:52   ` Emeel Hakim
  2022-12-07 22:03     ` Sabrina Dubroca
  0 siblings, 1 reply; 12+ messages in thread
From: Emeel Hakim @ 2022-12-07 15:52 UTC (permalink / raw)
  To: Sabrina Dubroca
  Cc: linux-kernel@vger.kernel.org, Raed Salem, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	netdev@vger.kernel.org, atenart@kernel.org, jiri@resnulli.us



> -----Original Message-----
> From: Sabrina Dubroca <sd@queasysnail.net>
> Sent: Wednesday, 7 December 2022 17:46
> To: Emeel Hakim <ehakim@nvidia.com>
> Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org; jiri@resnulli.us
> Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> IFLA_MACSEC_OFFLOAD in macsec_changelink
> 
> External email: Use caution opening links or attachments
> 
> 
> 2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> > From: Emeel Hakim <ehakim@nvidia.com>
> >
> > Add support for changing Macsec offload selection through the netlink
> > layer by implementing the relevant changes in macsec_change link.
> 
> nit: macsec_changelink

Ack

> [...]
> > +static int macsec_update_offload(struct macsec_dev *macsec, enum
> > +macsec_offload offload) {
> > +     enum macsec_offload prev_offload;
> > +     const struct macsec_ops *ops;
> > +     struct macsec_context ctx;
> > +     int ret = 0;
> > +
> > +     prev_offload = macsec->offload;
> > +
> > +     /* Check if the device already has rules configured: we do not support
> > +      * rules migration.
> > +      */
> > +     if (macsec_is_configured(macsec))
> > +             return -EBUSY;
> > +
> > +     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);
> 
> I think aligning the two macsec_offload(...) calls would make this a bit easier to
> read:
> 
>         ret = offload == MACSEC_OFFLOAD_OFF ? macsec_offload(ops-
> >mdo_del_secy, &ctx)
>                                             : macsec_offload(ops->mdo_add_secy, &ctx);
> 
> (and remove the unnecessary ())

Ack

> > +
> > +     if (ret)
> > +             macsec->offload = prev_offload;
> > +
> > +     return ret;
> > +}
> > +
> 
> [...]
> > +static int macsec_changelink_upd_offload(struct net_device *dev,
> > +struct nlattr *data[]) {
> > +     enum macsec_offload offload;
> > +     struct macsec_dev *macsec;
> > +
> > +     macsec = macsec_priv(dev);
> > +     offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
> 
> All those checks are also present in macsec_upd_offload, why not move them into
> macsec_update_offload as well? (and then you don't really need
> macsec_changelink_upd_offload anymore)
> 

Right, I thought about it , but I realized that those checks are done before holding the lock in macsec_upd_offload
and if I move them to macsec_update_offload I will hold the lock for a longer time , I want to minimize the time
of holding the lock.

> > +     if (macsec->offload == offload)
> > +             return 0;
> > +
> > +     /* 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;
> > +
> > +     return macsec_update_offload(macsec, offload); }
> > +
> 
> --
> Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-07 15:52   ` Emeel Hakim
@ 2022-12-07 22:03     ` Sabrina Dubroca
  2022-12-08  6:53       ` Emeel Hakim
  0 siblings, 1 reply; 12+ messages in thread
From: Sabrina Dubroca @ 2022-12-07 22:03 UTC (permalink / raw)
  To: Emeel Hakim
  Cc: linux-kernel@vger.kernel.org, Raed Salem, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	netdev@vger.kernel.org, atenart@kernel.org, jiri@resnulli.us

2022-12-07, 15:52:15 +0000, Emeel Hakim wrote:
> 
> 
> > -----Original Message-----
> > From: Sabrina Dubroca <sd@queasysnail.net>
> > Sent: Wednesday, 7 December 2022 17:46
> > To: Emeel Hakim <ehakim@nvidia.com>
> > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org; jiri@resnulli.us
> > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > 
> > External email: Use caution opening links or attachments
> > 
> > 
> > 2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> > [...]
> > > +static int macsec_changelink_upd_offload(struct net_device *dev,
> > > +struct nlattr *data[]) {
> > > +     enum macsec_offload offload;
> > > +     struct macsec_dev *macsec;
> > > +
> > > +     macsec = macsec_priv(dev);
> > > +     offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
> > 
> > All those checks are also present in macsec_upd_offload, why not move them into
> > macsec_update_offload as well? (and then you don't really need
> > macsec_changelink_upd_offload anymore)
> > 
> 
> Right, I thought about it , but I realized that those checks are done before holding the lock in macsec_upd_offload
> and if I move them to macsec_update_offload I will hold the lock for a longer time , I want to minimize the time
> of holding the lock.

Those couple of tests are probably lost in the noise compared to what
mdo_add_secy ends up doing. It also looks like a race condition
between the "macsec->offload == offload" test in macsec_upd_offload
(outside rtnl_lock) and updating macsec->offload via macsec_changelink
is possible. (Currently we can only change it with macsec_upd_offload
(called under genl_lock) so there's no issue until we add this patch)


> > > +     if (macsec->offload == offload)
> > > +             return 0;
> > > +
> > > +     /* 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;
> > > +
> > > +     return macsec_update_offload(macsec, offload); }
> > > +
> > 
> > --
> > Sabrina
> 

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-07 22:03     ` Sabrina Dubroca
@ 2022-12-08  6:53       ` Emeel Hakim
  2022-12-08 10:37         ` Sabrina Dubroca
  0 siblings, 1 reply; 12+ messages in thread
From: Emeel Hakim @ 2022-12-08  6:53 UTC (permalink / raw)
  To: Sabrina Dubroca
  Cc: linux-kernel@vger.kernel.org, Raed Salem, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	netdev@vger.kernel.org, atenart@kernel.org, jiri@resnulli.us



> -----Original Message-----
> From: Sabrina Dubroca <sd@queasysnail.net>
> Sent: Thursday, 8 December 2022 0:04
> To: Emeel Hakim <ehakim@nvidia.com>
> Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org; jiri@resnulli.us
> Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> IFLA_MACSEC_OFFLOAD in macsec_changelink
> 
> External email: Use caution opening links or attachments
> 
> 
> 2022-12-07, 15:52:15 +0000, Emeel Hakim wrote:
> >
> >
> > > -----Original Message-----
> > > From: Sabrina Dubroca <sd@queasysnail.net>
> > > Sent: Wednesday, 7 December 2022 17:46
> > > To: Emeel Hakim <ehakim@nvidia.com>
> > > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org;
> > > jiri@resnulli.us
> > > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > >
> > > External email: Use caution opening links or attachments
> > >
> > >
> > > 2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> > > [...]
> > > > +static int macsec_changelink_upd_offload(struct net_device *dev,
> > > > +struct nlattr *data[]) {
> > > > +     enum macsec_offload offload;
> > > > +     struct macsec_dev *macsec;
> > > > +
> > > > +     macsec = macsec_priv(dev);
> > > > +     offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
> > >
> > > All those checks are also present in macsec_upd_offload, why not
> > > move them into macsec_update_offload as well? (and then you don't
> > > really need macsec_changelink_upd_offload anymore)
> > >
> >
> > Right, I thought about it , but I realized that those checks are done
> > before holding the lock in macsec_upd_offload and if I move them to
> > macsec_update_offload I will hold the lock for a longer time , I want to minimize
> the time of holding the lock.
> 
> Those couple of tests are probably lost in the noise compared to what
> mdo_add_secy ends up doing. It also looks like a race condition between the
> "macsec->offload == offload" test in macsec_upd_offload (outside rtnl_lock) and
> updating macsec->offload via macsec_changelink is possible. (Currently we can
> only change it with macsec_upd_offload (called under genl_lock) so there's no issue
> until we add this patch)

Ack, 
so getting rid of macsec_changelink_upd_offload and moving the locking inside macsec_update_offload
should handle this issue

> 
> > > > +     if (macsec->offload == offload)
> > > > +             return 0;
> > > > +
> > > > +     /* 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;
> > > > +
> > > > +     return macsec_update_offload(macsec, offload); }
> > > > +
> > >
> > > --
> > > Sabrina
> >
> 
> --
> Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-08  6:53       ` Emeel Hakim
@ 2022-12-08 10:37         ` Sabrina Dubroca
  2022-12-08 11:14           ` Emeel Hakim
  0 siblings, 1 reply; 12+ messages in thread
From: Sabrina Dubroca @ 2022-12-08 10:37 UTC (permalink / raw)
  To: Emeel Hakim
  Cc: linux-kernel@vger.kernel.org, Raed Salem, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	netdev@vger.kernel.org, atenart@kernel.org, jiri@resnulli.us

2022-12-08, 06:53:18 +0000, Emeel Hakim wrote:
> 
> 
> > -----Original Message-----
> > From: Sabrina Dubroca <sd@queasysnail.net>
> > Sent: Thursday, 8 December 2022 0:04
> > To: Emeel Hakim <ehakim@nvidia.com>
> > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org; jiri@resnulli.us
> > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > 
> > External email: Use caution opening links or attachments
> > 
> > 
> > 2022-12-07, 15:52:15 +0000, Emeel Hakim wrote:
> > >
> > >
> > > > -----Original Message-----
> > > > From: Sabrina Dubroca <sd@queasysnail.net>
> > > > Sent: Wednesday, 7 December 2022 17:46
> > > > To: Emeel Hakim <ehakim@nvidia.com>
> > > > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > > > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > > > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org;
> > > > jiri@resnulli.us
> > > > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > > > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > > >
> > > > External email: Use caution opening links or attachments
> > > >
> > > >
> > > > 2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> > > > [...]
> > > > > +static int macsec_changelink_upd_offload(struct net_device *dev,
> > > > > +struct nlattr *data[]) {
> > > > > +     enum macsec_offload offload;
> > > > > +     struct macsec_dev *macsec;
> > > > > +
> > > > > +     macsec = macsec_priv(dev);
> > > > > +     offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
> > > >
> > > > All those checks are also present in macsec_upd_offload, why not
> > > > move them into macsec_update_offload as well? (and then you don't
> > > > really need macsec_changelink_upd_offload anymore)
> > > >
> > >
> > > Right, I thought about it , but I realized that those checks are done
> > > before holding the lock in macsec_upd_offload and if I move them to
> > > macsec_update_offload I will hold the lock for a longer time , I want to minimize
> > the time of holding the lock.
> > 
> > Those couple of tests are probably lost in the noise compared to what
> > mdo_add_secy ends up doing. It also looks like a race condition between the
> > "macsec->offload == offload" test in macsec_upd_offload (outside rtnl_lock) and
> > updating macsec->offload via macsec_changelink is possible. (Currently we can
> > only change it with macsec_upd_offload (called under genl_lock) so there's no issue
> > until we add this patch)
> 
> Ack, 
> so getting rid of macsec_changelink_upd_offload and moving the locking inside macsec_update_offload
> should handle this issue

You mean moving rtnl_lock()/unlock inside macsec_update_offload?
changelink is already under rtnl_lock. Just move the checks that you
currently have in macsec_changelink_upd_offload into
macsec_update_offload, and remove them from macsec_upd_offload.

> > 
> > > > > +     if (macsec->offload == offload)
> > > > > +             return 0;
> > > > > +
> > > > > +     /* 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;
> > > > > +
> > > > > +     return macsec_update_offload(macsec, offload); }
> > > > > +
> > > >
> > > > --
> > > > Sabrina
> > >
> > 
> > --
> > Sabrina
> 

-- 
Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink
  2022-12-08 10:37         ` Sabrina Dubroca
@ 2022-12-08 11:14           ` Emeel Hakim
  0 siblings, 0 replies; 12+ messages in thread
From: Emeel Hakim @ 2022-12-08 11:14 UTC (permalink / raw)
  To: Sabrina Dubroca
  Cc: linux-kernel@vger.kernel.org, Raed Salem, davem@davemloft.net,
	edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
	netdev@vger.kernel.org, atenart@kernel.org, jiri@resnulli.us



> -----Original Message-----
> From: Sabrina Dubroca <sd@queasysnail.net>
> Sent: Thursday, 8 December 2022 12:38
> To: Emeel Hakim <ehakim@nvidia.com>
> Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org; jiri@resnulli.us
> Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> IFLA_MACSEC_OFFLOAD in macsec_changelink
> 
> External email: Use caution opening links or attachments
> 
> 
> 2022-12-08, 06:53:18 +0000, Emeel Hakim wrote:
> >
> >
> > > -----Original Message-----
> > > From: Sabrina Dubroca <sd@queasysnail.net>
> > > Sent: Thursday, 8 December 2022 0:04
> > > To: Emeel Hakim <ehakim@nvidia.com>
> > > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org;
> > > jiri@resnulli.us
> > > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > >
> > > External email: Use caution opening links or attachments
> > >
> > >
> > > 2022-12-07, 15:52:15 +0000, Emeel Hakim wrote:
> > > >
> > > >
> > > > > -----Original Message-----
> > > > > From: Sabrina Dubroca <sd@queasysnail.net>
> > > > > Sent: Wednesday, 7 December 2022 17:46
> > > > > To: Emeel Hakim <ehakim@nvidia.com>
> > > > > Cc: linux-kernel@vger.kernel.org; Raed Salem <raeds@nvidia.com>;
> > > > > davem@davemloft.net; edumazet@google.com; kuba@kernel.org;
> > > > > pabeni@redhat.com; netdev@vger.kernel.org; atenart@kernel.org;
> > > > > jiri@resnulli.us
> > > > > Subject: Re: [PATCH net-next v3 1/2] macsec: add support for
> > > > > IFLA_MACSEC_OFFLOAD in macsec_changelink
> > > > >
> > > > > External email: Use caution opening links or attachments
> > > > >
> > > > >
> > > > > 2022-12-07, 12:10:16 +0200, ehakim@nvidia.com wrote:
> > > > > [...]
> > > > > > +static int macsec_changelink_upd_offload(struct net_device
> > > > > > +*dev, struct nlattr *data[]) {
> > > > > > +     enum macsec_offload offload;
> > > > > > +     struct macsec_dev *macsec;
> > > > > > +
> > > > > > +     macsec = macsec_priv(dev);
> > > > > > +     offload = nla_get_u8(data[IFLA_MACSEC_OFFLOAD]);
> > > > >
> > > > > All those checks are also present in macsec_upd_offload, why not
> > > > > move them into macsec_update_offload as well? (and then you
> > > > > don't really need macsec_changelink_upd_offload anymore)
> > > > >
> > > >
> > > > Right, I thought about it , but I realized that those checks are
> > > > done before holding the lock in macsec_upd_offload and if I move
> > > > them to macsec_update_offload I will hold the lock for a longer
> > > > time , I want to minimize
> > > the time of holding the lock.
> > >
> > > Those couple of tests are probably lost in the noise compared to
> > > what mdo_add_secy ends up doing. It also looks like a race condition
> > > between the "macsec->offload == offload" test in macsec_upd_offload
> > > (outside rtnl_lock) and updating macsec->offload via
> > > macsec_changelink is possible. (Currently we can only change it with
> > > macsec_upd_offload (called under genl_lock) so there's no issue
> > > until we add this patch)
> >
> > Ack,
> > so getting rid of macsec_changelink_upd_offload and moving the locking
> > inside macsec_update_offload should handle this issue
> 
> You mean moving rtnl_lock()/unlock inside macsec_update_offload?
> changelink is already under rtnl_lock. Just move the checks that you currently have
> in macsec_changelink_upd_offload into macsec_update_offload, and remove them
> from macsec_upd_offload.

Ack will send new version

> > >
> > > > > > +     if (macsec->offload == offload)
> > > > > > +             return 0;
> > > > > > +
> > > > > > +     /* 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;
> > > > > > +
> > > > > > +     return macsec_update_offload(macsec, offload); }
> > > > > > +
> > > > >
> > > > > --
> > > > > Sabrina
> > > >
> > >
> > > --
> > > Sabrina
> >
> 
> --
> Sabrina


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
  2022-12-27  8:25 [PATCH net-next " ehakim
@ 2022-12-27  8:25 ` ehakim
  0 siblings, 0 replies; 12+ messages in thread
From: ehakim @ 2022-12-27  8:25 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.

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
 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 1974c59977aa..0cff5083e661 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -4238,16 +4238,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;
@@ -4272,6 +4278,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] 12+ messages in thread

* [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump
  2023-01-04  7:46 [PATCH net-next 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
@ 2023-01-04  7:46 ` ehakim
  0 siblings, 0 replies; 12+ messages in thread
From: ehakim @ 2023-01-04  7:46 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.

Reviewed-by: Raed Salem <raeds@nvidia.com>
Signed-off-by: Emeel Hakim <ehakim@nvidia.com>
---
 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 1974c59977aa..0cff5083e661 100644
--- a/drivers/net/macsec.c
+++ b/drivers/net/macsec.c
@@ -4238,16 +4238,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;
@@ -4272,6 +4278,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] 12+ messages in thread

end of thread, other threads:[~2023-01-04  7:47 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-07 10:10 [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
2022-12-07 10:10 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
2022-12-07 15:33   ` Jiri Pirko
2022-12-07 15:35 ` [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink Jiri Pirko
2022-12-07 15:45 ` Sabrina Dubroca
2022-12-07 15:52   ` Emeel Hakim
2022-12-07 22:03     ` Sabrina Dubroca
2022-12-08  6:53       ` Emeel Hakim
2022-12-08 10:37         ` Sabrina Dubroca
2022-12-08 11:14           ` Emeel Hakim
  -- strict thread matches above, loose matches on Subject: below --
2022-12-27  8:25 [PATCH net-next " ehakim
2022-12-27  8:25 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim
2023-01-04  7:46 [PATCH net-next 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim
2023-01-04  7:46 ` [PATCH net-next 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim

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.