* [PATCH net-next v6 0/2] Add support to offload macsec using netlink update @ 2023-01-06 13:35 ehakim 2023-01-06 13:35 ` [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim 2023-01-06 13:35 ` [PATCH net-next v6 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim 0 siblings, 2 replies; 7+ messages in thread From: ehakim @ 2023-01-06 13:35 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 | 127 ++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 61 deletions(-) -- 2.21.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink 2023-01-06 13:35 [PATCH net-next v6 0/2] Add support to offload macsec using netlink update ehakim @ 2023-01-06 13:35 ` ehakim 2023-01-07 23:04 ` Sabrina Dubroca 2023-01-06 13:35 ` [PATCH net-next v6 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim 1 sibling, 1 reply; 7+ messages in thread From: ehakim @ 2023-01-06 13:35 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 Reviewed-by: Raed Salem <raeds@nvidia.com> Signed-off-by: Emeel Hakim <ehakim@nvidia.com> --- 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 | 116 +++++++++++++++++++++---------------------- 1 file changed, 57 insertions(+), 59 deletions(-) diff --git a/drivers/net/macsec.c b/drivers/net/macsec.c index bf8ac7a3ded7..1974c59977aa 100644 --- a/drivers/net/macsec.c +++ b/drivers/net/macsec.c @@ -2583,95 +2583,87 @@ static bool macsec_is_configured(struct macsec_dev *macsec) return false; } -static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info) +static int macsec_update_offload(struct net_device *dev, enum macsec_offload offload) { - 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; + enum macsec_offload prev_offload; const struct macsec_ops *ops; struct macsec_context ctx; struct macsec_dev *macsec; int ret = 0; - if (!attrs[MACSEC_ATTR_IFINDEX]) - return -EINVAL; - - if (!attrs[MACSEC_ATTR_OFFLOAD]) - return -EINVAL; - - if (nla_parse_nested_deprecated(tb_offload, MACSEC_OFFLOAD_ATTR_MAX, - attrs[MACSEC_ATTR_OFFLOAD], - macsec_genl_offload_policy, NULL)) - return -EINVAL; - - rtnl_lock(); - - dev = get_dev_from_nl(genl_info_net(info), attrs); - if (IS_ERR(dev)) { - ret = PTR_ERR(dev); - goto out; - } macsec = macsec_priv(dev); - if (!tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]) { - ret = -EINVAL; - goto out; - } - - offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]); if (macsec->offload == offload) - goto out; + return 0; /* 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; + return -EOPNOTSUPP; } /* Check if the net device is busy. */ - if (netif_running(dev)) { - ret = -EBUSY; - goto out; - } - - prev_offload = macsec->offload; - macsec->offload = offload; + 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)) { - ret = -EBUSY; - goto rollback; - } + 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) { - ret = -EOPNOTSUPP; - goto rollback; - } + if (!ops) + return -EOPNOTSUPP; - if (prev_offload == MACSEC_OFFLOAD_OFF) - func = ops->mdo_add_secy; - else - func = ops->mdo_del_secy; + macsec->offload = offload; ctx.secy = &macsec->secy; - ret = macsec_offload(func, &ctx); + ret = offload == MACSEC_OFFLOAD_OFF ? macsec_offload(ops->mdo_del_secy, &ctx) + : macsec_offload(ops->mdo_add_secy, &ctx); if (ret) - goto rollback; + macsec->offload = prev_offload; - rtnl_unlock(); - return 0; + return ret; +} + +static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info) +{ + struct nlattr *tb_offload[MACSEC_OFFLOAD_ATTR_MAX + 1]; + struct nlattr **attrs = info->attrs; + enum macsec_offload offload; + struct net_device *dev; + int ret; + + if (!attrs[MACSEC_ATTR_IFINDEX]) + return -EINVAL; + + if (!attrs[MACSEC_ATTR_OFFLOAD]) + return -EINVAL; + + if (nla_parse_nested_deprecated(tb_offload, MACSEC_OFFLOAD_ATTR_MAX, + attrs[MACSEC_ATTR_OFFLOAD], + macsec_genl_offload_policy, NULL)) + return -EINVAL; + + dev = get_dev_from_nl(genl_info_net(info), attrs); + if (IS_ERR(dev)) + return PTR_ERR(dev); + + if (!tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]) + return -EINVAL; + + offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]); + + rtnl_lock(); + + ret = macsec_update_offload(dev, offload); -rollback: - macsec->offload = prev_offload; -out: rtnl_unlock(); + return ret; } @@ -3840,6 +3832,12 @@ static int macsec_changelink(struct net_device *dev, struct nlattr *tb[], if (ret) goto cleanup; + if (data[IFLA_MACSEC_OFFLOAD]) { + ret = macsec_update_offload(dev, nla_get_u8(data[IFLA_MACSEC_OFFLOAD])); + 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] 7+ messages in thread
* Re: [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink 2023-01-06 13:35 ` [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim @ 2023-01-07 23:04 ` Sabrina Dubroca 2023-01-08 9:46 ` Emeel Hakim 0 siblings, 1 reply; 7+ messages in thread From: Sabrina Dubroca @ 2023-01-07 23:04 UTC (permalink / raw) To: ehakim; +Cc: netdev, raeds, davem, edumazet, kuba, pabeni, atenart 2023-01-06, 15:35:50 +0200, ehakim@nvidia.com wrote: [...] > +static int macsec_upd_offload(struct sk_buff *skb, struct genl_info *info) > +{ > + struct nlattr *tb_offload[MACSEC_OFFLOAD_ATTR_MAX + 1]; > + struct nlattr **attrs = info->attrs; > + enum macsec_offload offload; > + struct net_device *dev; > + int ret; > + > + if (!attrs[MACSEC_ATTR_IFINDEX]) > + return -EINVAL; > + > + if (!attrs[MACSEC_ATTR_OFFLOAD]) > + return -EINVAL; > + > + if (nla_parse_nested_deprecated(tb_offload, MACSEC_OFFLOAD_ATTR_MAX, > + attrs[MACSEC_ATTR_OFFLOAD], > + macsec_genl_offload_policy, NULL)) > + return -EINVAL; > + > + dev = get_dev_from_nl(genl_info_net(info), attrs); > + if (IS_ERR(dev)) > + return PTR_ERR(dev); > + > + if (!tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]) > + return -EINVAL; > + > + offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]); > + > + rtnl_lock(); Why are you putting rtnl_lock() back down here? You just moved it above get_dev_from_nl with commit f3b4a00f0f62 ("net: macsec: fix net device access prior to holding a lock"), now you're pretty much reverting that fix. > + > + ret = macsec_update_offload(dev, offload); > > -rollback: > - macsec->offload = prev_offload; > -out: > rtnl_unlock(); > + > return ret; > } > -- Sabrina ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink 2023-01-07 23:04 ` Sabrina Dubroca @ 2023-01-08 9:46 ` Emeel Hakim 0 siblings, 0 replies; 7+ messages in thread From: Emeel Hakim @ 2023-01-08 9:46 UTC (permalink / raw) To: Sabrina Dubroca Cc: netdev@vger.kernel.org, Raed Salem, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, atenart@kernel.org > -----Original Message----- > From: Sabrina Dubroca <sd@queasysnail.net> > Sent: Sunday, 8 January 2023 1:05 > To: Emeel Hakim <ehakim@nvidia.com> > Cc: netdev@vger.kernel.org; Raed Salem <raeds@nvidia.com>; > davem@davemloft.net; edumazet@google.com; kuba@kernel.org; > pabeni@redhat.com; atenart@kernel.org > Subject: Re: [PATCH net-next v6 1/2] macsec: add support for > IFLA_MACSEC_OFFLOAD in macsec_changelink > > External email: Use caution opening links or attachments > > > 2023-01-06, 15:35:50 +0200, ehakim@nvidia.com wrote: > [...] > > +static int macsec_upd_offload(struct sk_buff *skb, struct genl_info > > +*info) { > > + struct nlattr *tb_offload[MACSEC_OFFLOAD_ATTR_MAX + 1]; > > + struct nlattr **attrs = info->attrs; > > + enum macsec_offload offload; > > + struct net_device *dev; > > + int ret; > > + > > + if (!attrs[MACSEC_ATTR_IFINDEX]) > > + return -EINVAL; > > + > > + if (!attrs[MACSEC_ATTR_OFFLOAD]) > > + return -EINVAL; > > + > > + if (nla_parse_nested_deprecated(tb_offload, MACSEC_OFFLOAD_ATTR_MAX, > > + attrs[MACSEC_ATTR_OFFLOAD], > > + macsec_genl_offload_policy, NULL)) > > + return -EINVAL; > > + > > + dev = get_dev_from_nl(genl_info_net(info), attrs); > > + if (IS_ERR(dev)) > > + return PTR_ERR(dev); > > + > > + if (!tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]) > > + return -EINVAL; > > + > > + offload = nla_get_u8(tb_offload[MACSEC_OFFLOAD_ATTR_TYPE]); > > + > > + rtnl_lock(); > > Why are you putting rtnl_lock() back down here? You just moved it above > get_dev_from_nl with commit f3b4a00f0f62 ("net: macsec: fix net device access > prior to holding a lock"), now you're pretty much reverting that fix. Ack will fix. > > + > > + ret = macsec_update_offload(dev, offload); > > > > -rollback: > > - macsec->offload = prev_offload; > > -out: > > rtnl_unlock(); > > + > > return ret; > > } > > > > -- > Sabrina ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH net-next v6 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump 2023-01-06 13:35 [PATCH net-next v6 0/2] Add support to offload macsec using netlink update ehakim 2023-01-06 13:35 ` [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim @ 2023-01-06 13:35 ` ehakim 1 sibling, 0 replies; 7+ messages in thread From: ehakim @ 2023-01-06 13:35 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> --- 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 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] 7+ messages in thread
* [PATCH net-next v6 0/2] Add support to offload macsec using netlink update @ 2023-01-05 7:57 ehakim 2023-01-05 8:00 ` Emeel Hakim 0 siblings, 1 reply; 7+ messages in thread From: ehakim @ 2023-01-05 7:57 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 | 127 ++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 61 deletions(-) -- 2.21.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: [PATCH net-next v6 0/2] Add support to offload macsec using netlink update 2023-01-05 7:57 [PATCH net-next v6 0/2] Add support to offload macsec using netlink update ehakim @ 2023-01-05 8:00 ` Emeel Hakim 0 siblings, 0 replies; 7+ messages in thread From: Emeel Hakim @ 2023-01-05 8:00 UTC (permalink / raw) To: netdev@vger.kernel.org Cc: Raed Salem, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, sd@queasysnail.net, atenart@kernel.org This got the versioning tag as part of an automated versioning script, sorry about that will fix and resend. > -----Original Message----- > From: Emeel Hakim <ehakim@nvidia.com> > Sent: Thursday, 5 January 2023 9:57 > To: netdev@vger.kernel.org > Cc: Raed Salem <raeds@nvidia.com>; davem@davemloft.net; > edumazet@google.com; kuba@kernel.org; pabeni@redhat.com; > sd@queasysnail.net; atenart@kernel.org; Emeel Hakim <ehakim@nvidia.com> > Subject: [PATCH net-next v6 0/2] Add support to offload macsec using netlink > update > > 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 | 127 ++++++++++++++++++++++--------------------- > 1 file changed, 66 insertions(+), 61 deletions(-) > > -- > 2.21.3 ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2023-01-08 9:46 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-06 13:35 [PATCH net-next v6 0/2] Add support to offload macsec using netlink update ehakim 2023-01-06 13:35 ` [PATCH net-next v6 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink ehakim 2023-01-07 23:04 ` Sabrina Dubroca 2023-01-08 9:46 ` Emeel Hakim 2023-01-06 13:35 ` [PATCH net-next v6 2/2] macsec: dump IFLA_MACSEC_OFFLOAD attribute as part of macsec dump ehakim -- strict thread matches above, loose matches on Subject: below -- 2023-01-05 7:57 [PATCH net-next v6 0/2] Add support to offload macsec using netlink update ehakim 2023-01-05 8:00 ` Emeel Hakim
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.