Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp1080271rwb; Wed, 7 Dec 2022 08:23:18 -0800 (PST) X-Google-Smtp-Source: AA0mqf4Snyrj+JOYT3PBQs+wBHuSlGKKEn/5AA3g5Ifvq6yszbv9c03WOD2hGwYvYrBujPrD4Gft X-Received: by 2002:a63:fa44:0:b0:476:d169:30ea with SMTP id g4-20020a63fa44000000b00476d16930eamr65986074pgk.474.1670430197738; Wed, 07 Dec 2022 08:23:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1670430197; cv=none; d=google.com; s=arc-20160816; b=1A/q3eahB441ggXQmnqOEAgI3DiBGmNxyA56lP4IX0uO8S1Pyh+Ht7hnmrVcKFpvbi fzQgg8BmWKEL7iEp36khMosoaQRm5nUetGjvVvh1CxE9UvXzs1mgUrD8a98djBI+FEym FuyuwxXuded+bRNY2AuWubgiJLJVDphirweLd+AqCeDyjCNnQAMfKJe2L+Ekgfzs8Kb6 MMOaCa2XwPvRi12UVl3iAXXLjrKwTveW1507rYgEbug8l8nGM3P8D240B0z1Fv4sqgsW CGg6Yu9mbf6LfJJj/6XIISuY0+t5Dw0M44fAb1o8m2QPFrx58k70egKsRapwDeGplhXg xfPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=ynYOXTDJ+jSbaP4iA8SQ13bAss1f1uhiQjcqDmiTglw=; b=pMdARjx4i9+gvxZIaMlbsvLxaYcUJZD5zuNuCTC1X8CjR9lmixhXD4/elCJZIHjoJc ENyeuBu71wM9Vn8oN5bPK7iknMq7Yot6e/wAwRTkAjwS8VWN4T0Gv9adPGcfhdguDBtN uS2u334+aguwYVzyvo9e/bEry0JGR/n0e5zhwC2Q5HjA/C0166ERkNh3g3ioDkHPAYVA nxob9CS8nIZveGNuPtli5XeRxvXJ3IEfwpUBEtCRMKXVDpEz2wwHaBnx8ELVjivh//6x HeomkKi8nph1CwLzt93YZOOXROAmCwd3XTKnRK4Lh5LO8StRnRmUjKlTXMm/5NbVL3y3 S3Bw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@resnulli-us.20210112.gappssmtp.com header.s=20210112 header.b=WwwNOsjx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id np5-20020a17090b4c4500b002190932890asi2118993pjb.57.2022.12.07.08.23.07; Wed, 07 Dec 2022 08:23:17 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@resnulli-us.20210112.gappssmtp.com header.s=20210112 header.b=WwwNOsjx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229523AbiLGPfg (ORCPT + 76 others); Wed, 7 Dec 2022 10:35:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42734 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229545AbiLGPfe (ORCPT ); Wed, 7 Dec 2022 10:35:34 -0500 Received: from mail-ej1-x62f.google.com (mail-ej1-x62f.google.com [IPv6:2a00:1450:4864:20::62f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F092F61BBE for ; Wed, 7 Dec 2022 07:35:32 -0800 (PST) Received: by mail-ej1-x62f.google.com with SMTP id m18so13345254eji.5 for ; Wed, 07 Dec 2022 07:35:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20210112.gappssmtp.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=ynYOXTDJ+jSbaP4iA8SQ13bAss1f1uhiQjcqDmiTglw=; b=WwwNOsjxvwHD6s8xzzPvCkg4ToWiYnoTrCjrr/x7v3+SU2iBeLlffNNchctzk6i5T/ e8Y/Hu7P2qTCxS8P33notKeHaNpG8nmWSs3Llo3rmlVjJ5/iz2Twkulu7jbeoI/+vo2X c21vxk/ozvIGjfy0fKgGn3D861N8fV11IeVhJrG6nJuMyp8gq38XpJB0sZ7v8sjKD2Iw +81hq10pKgqAxl4hFkjJEJ3I9Xr8Vh2tsTrlhlaQGEsldI4xzwpi/RQSA15J1g9LWroK AqH9yOV+1cWjCvRrL5MU+elO/boWTB6eVUrYvjbFL+EfhvK8tjQWGQum4qYlb6vvKE97 8BSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ynYOXTDJ+jSbaP4iA8SQ13bAss1f1uhiQjcqDmiTglw=; b=MuFGeWJmdFDKBpsi36PlOzVikxyjcvTztCM0cBctWrnTfU4B8EBxZ6T/Sgt57W4LWp N/EXxzVMUXKQ8T5XcTeqbMxw829pOZy3X23QoXqe58c024r19DXGSLnpOrhKuDFow6Qg 7TOSDhhmwqAVnuKU7jLmGO5yc3AZN9J9F0+70DVN8+/7nCK5QlmBIC5FIni4KjxCMzC8 LtjpodK21v4q2jw507bt/QxEoA7GwwNLUpdodLAvTCTiMfUPh07/S6hORZaPu45MNHBh jb6oMSWGln9sLYmWop1CF/MyU/87HJKX/JIG072cIDyWXgVSRveLRuV8A+zPXHwZEGe6 aKGA== X-Gm-Message-State: ANoB5pmbVERQ7e+c9Uw7BtAj5+7KmgsBTJ6ovruwuXZQSgVAmdH4euDQ 5hkmZc8Pp7eKrws3YNoI37Tw0g== X-Received: by 2002:a17:906:1b48:b0:7c1:706:d63c with SMTP id p8-20020a1709061b4800b007c10706d63cmr7352480ejg.697.1670427331526; Wed, 07 Dec 2022 07:35:31 -0800 (PST) Received: from localhost (host-213-179-129-39.customer.m-online.net. [213.179.129.39]) by smtp.gmail.com with ESMTPSA id kx16-20020a170907775000b007c0934db0e0sm8720403ejc.141.2022.12.07.07.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Dec 2022 07:35:30 -0800 (PST) Date: Wed, 7 Dec 2022 16:35:29 +0100 From: Jiri Pirko To: ehakim@nvidia.com Cc: linux-kernel@vger.kernel.org, raeds@nvidia.com, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, netdev@vger.kernel.org, sd@queasysnail.net, atenart@kernel.org Subject: Re: [PATCH net-next v3 1/2] macsec: add support for IFLA_MACSEC_OFFLOAD in macsec_changelink Message-ID: References: <20221207101017.533-1-ehakim@nvidia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20221207101017.533-1-ehakim@nvidia.com> X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_NONE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Wed, Dec 07, 2022 at 11:10:16AM CET, ehakim@nvidia.com wrote: >From: Emeel Hakim > >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 >Signed-off-by: Emeel Hakim >--- >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 >