From patchwork Mon Jul 31 11:34:05 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ratheesh Kannoth X-Patchwork-Id: 128627 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp1969439vqg; Mon, 31 Jul 2023 05:10:53 -0700 (PDT) X-Google-Smtp-Source: APBJJlFteuhvUQQClA2Fv85TRKB85e1IqivHqOhZnsWYbAa9VaPc22xN2qfVIAc5u5mD4dpTpRda X-Received: by 2002:a05:6402:5159:b0:522:1fd2:ca7a with SMTP id n25-20020a056402515900b005221fd2ca7amr7561472edd.29.1690805453007; Mon, 31 Jul 2023 05:10:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690805452; cv=none; d=google.com; s=arc-20160816; b=cYOC1ZgK3DPMrBwjCgeesRx5Mze0Fy2YryWsYQeGp/LN9qypyQEwd9ttkpfQ5sr8Kb 2I9JfdgFWL64s0PxSH3zw2k/LbLcT0fRGNe+yVmUndugANy2CWmd5CF4yR8SbLkFG+ba PBo2Uqc2RJsrsi8mIh8O2YtFOK9P/OFa5F8T575m3ghdOZkZ6qkSNvjWBvLtzbveUIZw IsqNdihRHRtyMjyol7pu4VQ/8HEe6ZQ5fLfcks7N3mAtq3tphWZE4th1vio5P4ZjqsRY SWCEh2d6IW4i1fOaeilI59v0hHDEp9eWrroJ7+g3n4mtTmR8ddDBFeIz0f8jfjdlazko SWgA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ipXbT1cqgP4CNIwzhgHaW5Z3vAdmUxHEUeztPVaht8o=; fh=loc5t3CWKCELQ8qsEHEP7JqHIUmihzCJLxVV5iEap+I=; b=YglSlw/iE7o6Vu8g4hEMKfif0DmCnfRP8o36bH/I4+kvhzfppzlKJ8bl8ILaLPsuwQ WJqnRLbvTJHSP07R2LY0nMS0ddGfIs9zYSPwIN7aTcbO/bYLF145Lj998oWEFzFTrIpv aBzldmIFYFgAnTrlliLz2axVJmcegcVI89AxPaChEMGd8rqvqkgpri9xxpd/OdwZ2a1O h6OasVCcdkeMVKDsm9ak3kscYEHG1d7TCcExvm0D4C+4Ow3QnfJwJkjPT5Pjss12PW4k 0v2Why453Zi3yXzs46jtyqx9j6bdJmDICkAG5aCEUeg4H73GDXrXquoyt/X51vKgedeg +J9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=Mhz1t+Jw; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id e4-20020a50ec84000000b0052257067830si6823866edr.511.2023.07.31.05.10.27; Mon, 31 Jul 2023 05:10:52 -0700 (PDT) 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=@marvell.com header.s=pfpt0220 header.b=Mhz1t+Jw; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231465AbjGaLew (ORCPT + 99 others); Mon, 31 Jul 2023 07:34:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229809AbjGaLev (ORCPT ); Mon, 31 Jul 2023 07:34:51 -0400 Received: from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 09B22C3; Mon, 31 Jul 2023 04:34:50 -0700 (PDT) Received: from pps.filterd (m0045849.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36UNSU7F022028; Mon, 31 Jul 2023 04:34:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=ipXbT1cqgP4CNIwzhgHaW5Z3vAdmUxHEUeztPVaht8o=; b=Mhz1t+JwPjDxIy6HPFcRqd9RWGyA70OW1U2wfvz9VR7N/dzDBCEkqCOCti6x1jcilGJR 9HS55c/ZRL8Yso6Guj5pfhg1upq45ceCQ+HVEX+gs4OxtwGXm+Zfu8K7dFNdLRlN5ldt z9gZDyFCT4ia/puhk6hRNLVWjJEr72rKLCJEm06EWZQdTyerwROHl11IxO6ii9iqD1vU ADws/NRn3GM4v2nzlH3NdLYQa2NhT/KdJBP8GX+kK3OMXk2gU2PbamDCjyJJC27R/nwb 63kaBqokb5Z9PiiudRzWU3g9rCdZipo9dzIblPKImfcPeT9KqSstlsRdktj9cbIhMiNo +w== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 3s504nndeu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 31 Jul 2023 04:34:37 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 31 Jul 2023 04:34:35 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Mon, 31 Jul 2023 04:34:35 -0700 Received: from marvell-OptiPlex-7090.marvell.com (unknown [10.28.36.165]) by maili.marvell.com (Postfix) with ESMTP id 9C4A13F70B9; Mon, 31 Jul 2023 04:34:30 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , , , , , , , , , Ratheesh Kannoth Subject: [PATCH net-next 1/4] net: flow_dissector: Add IPSEC dissector Date: Mon, 31 Jul 2023 17:04:05 +0530 Message-ID: <20230731113408.2586913-2-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230731113408.2586913-1-rkannoth@marvell.com> References: <20230731113408.2586913-1-rkannoth@marvell.com> MIME-Version: 1.0 X-Proofpoint-ORIG-GUID: h1i0TyvZQo4NMwQXxtGZ6GiMYA3t7bH4 X-Proofpoint-GUID: h1i0TyvZQo4NMwQXxtGZ6GiMYA3t7bH4 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-31_05,2023-07-31_01,2023-05-22_02 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772938018912915188 X-GMAIL-MSGID: 1772938018912915188 Support for dissecting IPSEC field SPI (which is 32bits in size) for ESP and AH packets. Signed-off-by: Ratheesh Kannoth --- include/net/flow_dissector.h | 9 ++++++ net/core/flow_dissector.c | 53 +++++++++++++++++++++++++++++++++++- 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h index 830f06b2f36d..2b1ae5108ce6 100644 --- a/include/net/flow_dissector.h +++ b/include/net/flow_dissector.h @@ -301,6 +301,14 @@ struct flow_dissector_key_l2tpv3 { __be32 session_id; }; +/** + * struct flow_dissector_key_ipsec: + * @spi: identifier for a ipsec connection + */ +struct flow_dissector_key_ipsec { + __be32 spi; +}; + /** * struct flow_dissector_key_cfm * @mdl_ver: maintenance domain level (mdl) and cfm protocol version @@ -353,6 +361,7 @@ enum flow_dissector_key_id { FLOW_DISSECTOR_KEY_NUM_OF_VLANS, /* struct flow_dissector_key_num_of_vlans */ FLOW_DISSECTOR_KEY_PPPOE, /* struct flow_dissector_key_pppoe */ FLOW_DISSECTOR_KEY_L2TPV3, /* struct flow_dissector_key_l2tpv3 */ + FLOW_DISSECTOR_KEY_IPSEC, /* struct flow_dissector_key_ipsec */ FLOW_DISSECTOR_KEY_CFM, /* struct flow_dissector_key_cfm */ FLOW_DISSECTOR_KEY_MAX, diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index ed5dfa376024..89d15ceaf9af 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -205,6 +205,50 @@ static void __skb_flow_dissect_icmp(const struct sk_buff *skb, skb_flow_get_icmp_tci(skb, key_icmp, data, thoff, hlen); } +static void __skb_flow_dissect_ah(const struct sk_buff *skb, + struct flow_dissector *flow_dissector, + void *target_container, const void *data, + int nhoff, int hlen) +{ + struct flow_dissector_key_ipsec *key_ah; + struct ip_auth_hdr _hdr, *hdr; + + if (!dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_IPSEC)) + return; + + hdr = __skb_header_pointer(skb, nhoff, sizeof(_hdr), data, hlen, &_hdr); + if (!hdr) + return; + + key_ah = skb_flow_dissector_target(flow_dissector, + FLOW_DISSECTOR_KEY_IPSEC, + target_container); + + key_ah->spi = hdr->spi; +} + +static void __skb_flow_dissect_esp(const struct sk_buff *skb, + struct flow_dissector *flow_dissector, + void *target_container, const void *data, + int nhoff, int hlen) +{ + struct flow_dissector_key_ipsec *key_esp; + struct ip_esp_hdr _hdr, *hdr; + + if (!dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_IPSEC)) + return; + + hdr = __skb_header_pointer(skb, nhoff, sizeof(_hdr), data, hlen, &_hdr); + if (!hdr) + return; + + key_esp = skb_flow_dissector_target(flow_dissector, + FLOW_DISSECTOR_KEY_IPSEC, + target_container); + + key_esp->spi = hdr->spi; +} + static void __skb_flow_dissect_l2tpv3(const struct sk_buff *skb, struct flow_dissector *flow_dissector, void *target_container, const void *data, @@ -1571,7 +1615,14 @@ bool __skb_flow_dissect(const struct net *net, __skb_flow_dissect_l2tpv3(skb, flow_dissector, target_container, data, nhoff, hlen); break; - + case IPPROTO_ESP: + __skb_flow_dissect_esp(skb, flow_dissector, target_container, + data, nhoff, hlen); + break; + case IPPROTO_AH: + __skb_flow_dissect_ah(skb, flow_dissector, target_container, + data, nhoff, hlen); + break; default: break; } From patchwork Mon Jul 31 11:34:06 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ratheesh Kannoth X-Patchwork-Id: 128633 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp1974285vqg; Mon, 31 Jul 2023 05:18:50 -0700 (PDT) X-Google-Smtp-Source: APBJJlGD7QiAzCuO7P3V17FyeC/sii2lVHdT3nMw5Lr9dmv3Xz3+kS2ay4oVQiTuPfN1XHAD23pu X-Received: by 2002:a17:90a:ee90:b0:268:565f:44a with SMTP id i16-20020a17090aee9000b00268565f044amr9594607pjz.9.1690805929858; Mon, 31 Jul 2023 05:18:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690805929; cv=none; d=google.com; s=arc-20160816; b=NDDKKkyC63YqCXFLLq7+ktNXZs9t43kSp/hMecV55T/yfZMTYCNEEaU0sG4hAsWavn NTpl12D4ltK+fOS+mgowFvuXhLsIA3oYqMHMO4LhDRfBXj24vKrwsKAOY/MlO9oHQBqZ 5OviFt0T/1noGT7a9Y0j77tU/AruRB7gxVpRqVSkpIXjQha6t/Kp/tfO07rNLsOMNo1M hJjNTSKv2JnEuWLJHVg8vUGK9EbvLC4XsnqaTdm6y5CQusgXZC9V6cU3kh4RbZBIEQTX 6xZRnqVCmEXvpxDKfFYiwPzLN9b6A+a4eYReMpArM+2VVcxTWcfYuYaaSYgir9/1PPFs Hj0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dyZuotwS16ZG56Yq3dCvtQ0Bfe8UVn59yG8l/Wtbrj8=; fh=loc5t3CWKCELQ8qsEHEP7JqHIUmihzCJLxVV5iEap+I=; b=VNdJ3YygGYvdvvU4/0EIG/nuku81YCX/I4lTn6htkC9Y1dacMUSaoUtL3ZuKI4f2j+ AkjzCzIC0czOFXq3N7QN6jlVIIN7Dax0pcux0aJgz9BYFEdZpjP/M7Gi2OtSeZ6bu9yW qpZY32dIia+3nBy4IO5YTPUOj/iO+BkYrdiavuXbggql7fvmVcKSM4kmkSmxH/WkIgRu ir6PYgyZkxiCQXqIM8AbkhHw9mIAeh4x6bxKEt1jnfT3aF/PIYHh0zB2PVOLjH9kepo+ L+s+C63EsgtAge5nXyz0g0nhPPBDu4WWdhZEWCwz4WuBJHvf/tofRsHrIbnr/Ub5nk1W TL8A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=TXIayJJ3; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b6-20020a17090a12c600b0025e9a3124c7si8827461pjg.143.2023.07.31.05.18.36; Mon, 31 Jul 2023 05:18:49 -0700 (PDT) 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=@marvell.com header.s=pfpt0220 header.b=TXIayJJ3; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231574AbjGaLfH (ORCPT + 99 others); Mon, 31 Jul 2023 07:35:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43878 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231152AbjGaLfF (ORCPT ); Mon, 31 Jul 2023 07:35:05 -0400 Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0527DE5B; Mon, 31 Jul 2023 04:35:01 -0700 (PDT) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36UNIc2x012062; Mon, 31 Jul 2023 04:34:54 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=dyZuotwS16ZG56Yq3dCvtQ0Bfe8UVn59yG8l/Wtbrj8=; b=TXIayJJ3/20TUwiX1/Iz1aAKA0ulG/2w2XHJjfLPK8RWNuvTgo/DmAktXSHpSwpM6lUY vmBS/AsIbSlse0LBaX2lAjKThwAOq87KqjvpPs7sM5GqTBcPHJ7NTlJGMUIHgCHoVAWJ 68w1UGfyGSf0fZ4o5z6amBnKvuY8fxLhB0y53fPpu8pLMCTlY9vLsT1jMkSDTQgBto9k stp/g18E4XuTcOhrsLqphJD+4JCHJ/XW8O7Kx/lS+2QOW5LhHEFurW4qV8+O64g5TnoI 60NDaYkiO9bKe4t8TF7jGAowkHlKnQfPmDZ5bEp8mht9JoZGu2XfUMAU/hBM3Jk7WsS7 Kw== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3s529k4qh3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 31 Jul 2023 04:34:54 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 31 Jul 2023 04:34:40 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Mon, 31 Jul 2023 04:34:40 -0700 Received: from marvell-OptiPlex-7090.marvell.com (unknown [10.28.36.165]) by maili.marvell.com (Postfix) with ESMTP id 1ABFF3F70B7; Mon, 31 Jul 2023 04:34:35 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , , , , , , , , , Ratheesh Kannoth Subject: [PATCH net-next 2/4] tc: flower: support for SPI Date: Mon, 31 Jul 2023 17:04:06 +0530 Message-ID: <20230731113408.2586913-3-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230731113408.2586913-1-rkannoth@marvell.com> References: <20230731113408.2586913-1-rkannoth@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: bDUP4_LcKtHP62aYrhNwrz1Iz6_oSNRZ X-Proofpoint-ORIG-GUID: bDUP4_LcKtHP62aYrhNwrz1Iz6_oSNRZ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-31_05,2023-07-31_01,2023-05-22_02 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772938518826874381 X-GMAIL-MSGID: 1772938518826874381 tc flower rules support to classify ESP/AH packets matching SPI field. Signed-off-by: Ratheesh Kannoth --- include/uapi/linux/pkt_cls.h | 3 +++ net/sched/cls_flower.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index 7865f5a9885b..a90b0e3d351f 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -594,6 +594,9 @@ enum { TCA_FLOWER_KEY_L2TPV3_SID, /* be32 */ + TCA_FLOWER_KEY_SPI, /* be32 */ + TCA_FLOWER_KEY_SPI_MASK, /* be32 */ + TCA_FLOWER_L2_MISS, /* u8 */ TCA_FLOWER_KEY_CFM, /* nested */ diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 8da9d039d964..eca260272845 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -72,6 +72,7 @@ struct fl_flow_key { struct flow_dissector_key_num_of_vlans num_of_vlans; struct flow_dissector_key_pppoe pppoe; struct flow_dissector_key_l2tpv3 l2tpv3; + struct flow_dissector_key_ipsec ipsec; struct flow_dissector_key_cfm cfm; } __aligned(BITS_PER_LONG / 8); /* Ensure that we can do comparisons as longs. */ @@ -726,6 +727,8 @@ static const struct nla_policy fl_policy[TCA_FLOWER_MAX + 1] = { [TCA_FLOWER_KEY_PPPOE_SID] = { .type = NLA_U16 }, [TCA_FLOWER_KEY_PPP_PROTO] = { .type = NLA_U16 }, [TCA_FLOWER_KEY_L2TPV3_SID] = { .type = NLA_U32 }, + [TCA_FLOWER_KEY_SPI] = { .type = NLA_U32 }, + [TCA_FLOWER_KEY_SPI_MASK] = { .type = NLA_U32 }, [TCA_FLOWER_L2_MISS] = NLA_POLICY_MAX(NLA_U8, 1), [TCA_FLOWER_KEY_CFM] = { .type = NLA_NESTED }, }; @@ -795,6 +798,24 @@ static void fl_set_key_val(struct nlattr **tb, nla_memcpy(mask, tb[mask_type], len); } +static int fl_set_key_spi(struct nlattr **tb, struct fl_flow_key *key, + struct fl_flow_key *mask, + struct netlink_ext_ack *extack) +{ + if (key->basic.ip_proto != IPPROTO_ESP && + key->basic.ip_proto != IPPROTO_AH) { + NL_SET_ERR_MSG(extack, + "Protocol must be either ESP or AH"); + return -EINVAL; + } + + fl_set_key_val(tb, &key->ipsec.spi, + TCA_FLOWER_KEY_SPI, + &mask->ipsec.spi, TCA_FLOWER_KEY_SPI_MASK, + sizeof(key->ipsec.spi)); + return 0; +} + static int fl_set_key_port_range(struct nlattr **tb, struct fl_flow_key *key, struct fl_flow_key *mask, struct netlink_ext_ack *extack) @@ -1894,6 +1915,12 @@ static int fl_set_key(struct net *net, struct nlattr **tb, return ret; } + if (tb[TCA_FLOWER_KEY_SPI]) { + ret = fl_set_key_spi(tb, key, mask, extack); + if (ret) + return ret; + } + if (tb[TCA_FLOWER_KEY_ENC_IPV4_SRC] || tb[TCA_FLOWER_KEY_ENC_IPV4_DST]) { key->enc_control.addr_type = FLOW_DISSECTOR_KEY_IPV4_ADDRS; @@ -2066,6 +2093,8 @@ static void fl_init_dissector(struct flow_dissector *dissector, FLOW_DISSECTOR_KEY_PPPOE, pppoe); FL_KEY_SET_IF_MASKED(mask, keys, cnt, FLOW_DISSECTOR_KEY_L2TPV3, l2tpv3); + FL_KEY_SET_IF_MASKED(mask, keys, cnt, + FLOW_DISSECTOR_KEY_IPSEC, ipsec); FL_KEY_SET_IF_MASKED(mask, keys, cnt, FLOW_DISSECTOR_KEY_CFM, cfm); @@ -3364,6 +3393,12 @@ static int fl_dump_key(struct sk_buff *skb, struct net *net, sizeof(key->l2tpv3.session_id))) goto nla_put_failure; + if (key->ipsec.spi && + fl_dump_key_val(skb, &key->ipsec.spi, TCA_FLOWER_KEY_SPI, + &mask->ipsec.spi, TCA_FLOWER_KEY_SPI_MASK, + sizeof(key->ipsec.spi))) + goto nla_put_failure; + if ((key->basic.ip_proto == IPPROTO_TCP || key->basic.ip_proto == IPPROTO_UDP || key->basic.ip_proto == IPPROTO_SCTP) && From patchwork Mon Jul 31 11:34:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ratheesh Kannoth X-Patchwork-Id: 128636 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp1974955vqg; Mon, 31 Jul 2023 05:19:55 -0700 (PDT) X-Google-Smtp-Source: APBJJlEM9ncgHN1PFIIdAUUen8v8NWnmOpsxiJcQDGO199CEt1VcO3v+O+9JPkU5loUW2/ZkVbh/ X-Received: by 2002:a05:6e02:1486:b0:345:a01b:45a with SMTP id n6-20020a056e02148600b00345a01b045amr10789886ilk.19.1690805995377; Mon, 31 Jul 2023 05:19:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690805995; cv=none; d=google.com; s=arc-20160816; b=KnhysrtOB6X+cEHd3O77OkA2xc7ZXugqUtcH0ysq669YZU0u493nHs4GtllYgqTmCb kzmd1/cQ6yALwCnIpLOLPZEUc0c/ujeOs6eyh+zalwGsFy4YCHJt/DEIY8vQDahjC7w6 S1xOxWVJCjXTl5LfHNyF+Rl1EvztTtHKT1j4xAQFLxtPWoz3khOfcMsif4FtLwV9ToEc xrHriXgGfDCl6FWjsFzOCD3tAvON5qRJu4gdd89iYaE+avnsByOZK2OOnWMMS2llEVJm Jf7TdImJ1qUMKmRzamyJ3GE1Ih5WaNpjNB4qk+7cdmM/uMhc7cQDXFIdpDzKMgsd4ui+ viRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=vgx8W1pEDySIT9JiCZ7nyjhqaZPBiW70I9WHZj6ZAG0=; fh=loc5t3CWKCELQ8qsEHEP7JqHIUmihzCJLxVV5iEap+I=; b=w6S2l+aM1HXEuzFX87u3/6QekXi37UFpp6+RHIi9UFUlG9QsHFiunEbPynB2mwec/1 +sC8jG8Pw3nj+HsqUbR1cksosHKoFqy+6N7VdwUdjB78jLM2xLnl7WYxrCCwhhaB9Fdq 7ql4WTO51XtXMOfycKJNsE23+A4LaLDHPme1miYK7Q1J7NjlxW/yz+mQcbguH4p1f/Nh 6OW2XxoLoW+TNWNmffMSd+Um2Vbw9hbrOcGDKL9NO6gfOPnFpDBMXatviK6DNI7PzUap B7PpLpiR6UGK9GnmtHmhSPY9Pf3X1d+8na0j1x/xPs2TCLSDmZNxGqJre380cMj3x8H4 PEuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b="ZMi/Wg0t"; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n2-20020a17090ade8200b0025bec4468c2si7245168pjv.167.2023.07.31.05.19.41; Mon, 31 Jul 2023 05:19:55 -0700 (PDT) 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=@marvell.com header.s=pfpt0220 header.b="ZMi/Wg0t"; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231602AbjGaLfJ (ORCPT + 99 others); Mon, 31 Jul 2023 07:35:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43908 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231204AbjGaLfG (ORCPT ); Mon, 31 Jul 2023 07:35:06 -0400 Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 43A31E57; Mon, 31 Jul 2023 04:35:02 -0700 (PDT) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36UNIc31012062; Mon, 31 Jul 2023 04:34:55 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=vgx8W1pEDySIT9JiCZ7nyjhqaZPBiW70I9WHZj6ZAG0=; b=ZMi/Wg0tPL0dsr7Vqsp8QYCuYHYJnF25p96ZvUEN7ZQswUrz6TUiOHFHlRWrkOQ7cz3w /m2tKPWkLacGzGlfhlvQ1TAs7vl8UAk+1+PirtdODm46w0b9fOrlHHxO5riqKQYbQIXj 7HOg6qnYvMiffjdBbg37inJ8wiBMt4fVZrt3RkiGDU8aPbJJydKxgUiNGjqub9gTq8WO JD1GBThnkzdOYZKpOcD/2S9qZY2tDhHAUohkbvghH2PkoKZnRJD/GiHDT9GY5HzihLs8 sYqneByWSlUSj3ILSu7dIAHrbJ1q3uHjfFPEmS5zj+xiArsPv1i1InnEof3TdvrSuExj 7Q== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3s529k4qh3-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 31 Jul 2023 04:34:55 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 31 Jul 2023 04:34:46 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Mon, 31 Jul 2023 04:34:46 -0700 Received: from marvell-OptiPlex-7090.marvell.com (unknown [10.28.36.165]) by maili.marvell.com (Postfix) with ESMTP id 8DCB83F70BC; Mon, 31 Jul 2023 04:34:41 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , , , , , , , , , Ratheesh Kannoth Subject: [PATCH net-next 3/4] tc: flower: Enable offload support IPSEC SPI field. Date: Mon, 31 Jul 2023 17:04:07 +0530 Message-ID: <20230731113408.2586913-4-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230731113408.2586913-1-rkannoth@marvell.com> References: <20230731113408.2586913-1-rkannoth@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: OUjm-omyBsg_PYkYg992KkVlqPgjoaGq X-Proofpoint-ORIG-GUID: OUjm-omyBsg_PYkYg992KkVlqPgjoaGq X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-31_05,2023-07-31_01,2023-05-22_02 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772938587277506235 X-GMAIL-MSGID: 1772938587277506235 This patch enables offload for TC classifier flower rules which matches against SPI field. Signed-off-by: Ratheesh Kannoth --- include/net/flow_offload.h | 6 ++++++ net/core/flow_offload.c | 7 +++++++ 2 files changed, 13 insertions(+) diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h index 118082eae48c..9efa9a59e81f 100644 --- a/include/net/flow_offload.h +++ b/include/net/flow_offload.h @@ -64,6 +64,10 @@ struct flow_match_tcp { struct flow_dissector_key_tcp *key, *mask; }; +struct flow_match_ipsec { + struct flow_dissector_key_ipsec *key, *mask; +}; + struct flow_match_mpls { struct flow_dissector_key_mpls *key, *mask; }; @@ -116,6 +120,8 @@ void flow_rule_match_ports_range(const struct flow_rule *rule, struct flow_match_ports_range *out); void flow_rule_match_tcp(const struct flow_rule *rule, struct flow_match_tcp *out); +void flow_rule_match_ipsec(const struct flow_rule *rule, + struct flow_match_ipsec *out); void flow_rule_match_icmp(const struct flow_rule *rule, struct flow_match_icmp *out); void flow_rule_match_mpls(const struct flow_rule *rule, diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c index acfc1f88ea79..bc5169482710 100644 --- a/net/core/flow_offload.c +++ b/net/core/flow_offload.c @@ -146,6 +146,13 @@ void flow_rule_match_tcp(const struct flow_rule *rule, } EXPORT_SYMBOL(flow_rule_match_tcp); +void flow_rule_match_ipsec(const struct flow_rule *rule, + struct flow_match_ipsec *out) +{ + FLOW_DISSECTOR_MATCH(rule, FLOW_DISSECTOR_KEY_IPSEC, out); +} +EXPORT_SYMBOL(flow_rule_match_ipsec); + void flow_rule_match_icmp(const struct flow_rule *rule, struct flow_match_icmp *out) { From patchwork Mon Jul 31 11:34:08 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ratheesh Kannoth X-Patchwork-Id: 128693 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2024843vqg; Mon, 31 Jul 2023 06:45:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlFs8IxLshY5+Wuo7P5+dHAh4lJqZ4AFmyNf179Pzo2KgbTr3JWuUyPEa8El+4obhHO803yd X-Received: by 2002:a17:903:54a:b0:1b8:ae12:5610 with SMTP id jo10-20020a170903054a00b001b8ae125610mr8565277plb.7.1690811158432; Mon, 31 Jul 2023 06:45:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690811158; cv=none; d=google.com; s=arc-20160816; b=Ni1uaF5+aeQ1R/hXKFy1QLtxMC8wjlSZokgd+C0WAs5VqgerOnpYYuhiMIywIo2KPi qdq+BlXzGGgWNs8yvzhEmpqCq6N5Kb6x0bihlkB9qz5NH6Ffmo8Fe0uSJiqvU4AsHNE1 bXGjL47XO6Fs+WYQZjaSu1BoN55ZHSNV4l22uOOJm2Zx3xba1UjMggxf7ndWHowL+CSL 9nIBg+fcN/H12yuar8J0Ixb2Nrff850j4P3blirhqHipvJn413eF+f0PkdWoMvCicOdc hy8U4vP5YG8aWznqfYfCo7M1of3/olCoNOMT2TXzhFa4aKaBL2tGkuD4kzPLDbHUVDAB HUKA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=rwYjoK+wb+CQ5fgWspTLi2yMGbffC5+/B4dizAAuhNw=; fh=loc5t3CWKCELQ8qsEHEP7JqHIUmihzCJLxVV5iEap+I=; b=cAoIF1MAa/mKePLBBmKRRucvqa0uhxSXngfsciqrhJ/GOsEimxX4LfSAlxJVokdkPM 7wovw0UFpIIpaSWinYV+PTeRtzxRKLWziQ63M0veAha61ahE2avO7jnp6e0cB2C4vTCt aSIPFIj0qexa9Ad/c87KSmKp2fqcC4OprxdCm1rYRiXbZSlehK3vYAl/OFftLwyxRQDw Eh++iuc/pCpt6En96uerqLEVqL4hgJcrfgXUqdRNQVVo2VDatzdhJGmqzYn4hpyAB1Ue VfYhm4aE3onI1zwayFYCWWIna4zBbjZ0Ma/MUQDQJX6kBBogkqYUFCUyD2HT4oDwCSxi RrwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@marvell.com header.s=pfpt0220 header.b=GqstEKni; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n4-20020a170902d2c400b001bc17ab8d6esi1141100plc.530.2023.07.31.06.45.44; Mon, 31 Jul 2023 06:45:58 -0700 (PDT) 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=@marvell.com header.s=pfpt0220 header.b=GqstEKni; 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; dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=marvell.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231773AbjGaLfM (ORCPT + 99 others); Mon, 31 Jul 2023 07:35:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231520AbjGaLfH (ORCPT ); Mon, 31 Jul 2023 07:35:07 -0400 Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 589C810C1; Mon, 31 Jul 2023 04:35:03 -0700 (PDT) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 36UNIc32012062; Mon, 31 Jul 2023 04:34:56 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=pfpt0220; bh=rwYjoK+wb+CQ5fgWspTLi2yMGbffC5+/B4dizAAuhNw=; b=GqstEKni9UKRykTtmoidEyZjOMs53F//N5l0oKHSiGy5WGzP/yiiHt0EOfq78qbs5kvI x5u2zgpVsF0z+SAn6jHRBhMLbdv8RSSu08MrDRTb+jcQBxI0uoHx5WX55D7N5QPaQFUa cTMYIDAK8FmCzUpWejpZkLNpJjSn/j619bNEaXoKLLi7ZBBaSIBS9qq6gUi0IgejcixU kmwkGb68KJBeT6RXej2VYpI3M1YXXpeoi9ygBcMepVu9ReTSlHpsNCsG9nIy+njzzH/i BFYy1/xHX3fI56IV4pj7sSpZcJ0fppbZeAmB26770P8xLnFbFAZ3KEfeAodfQUSzMITM hg== Received: from dc5-exch01.marvell.com ([199.233.59.181]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3s529k4qh3-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Mon, 31 Jul 2023 04:34:55 -0700 Received: from DC5-EXCH02.marvell.com (10.69.176.39) by DC5-EXCH01.marvell.com (10.69.176.38) with Microsoft SMTP Server (TLS) id 15.0.1497.48; Mon, 31 Jul 2023 04:34:51 -0700 Received: from maili.marvell.com (10.69.176.80) by DC5-EXCH02.marvell.com (10.69.176.39) with Microsoft SMTP Server id 15.0.1497.48 via Frontend Transport; Mon, 31 Jul 2023 04:34:51 -0700 Received: from marvell-OptiPlex-7090.marvell.com (unknown [10.28.36.165]) by maili.marvell.com (Postfix) with ESMTP id 0CAA43F70B7; Mon, 31 Jul 2023 04:34:46 -0700 (PDT) From: Ratheesh Kannoth To: , CC: , , , , , , , , , , , , , Ratheesh Kannoth Subject: [PATCH net-next 4/4] octeontx2-pf: TC flower offload support for SPI field Date: Mon, 31 Jul 2023 17:04:08 +0530 Message-ID: <20230731113408.2586913-5-rkannoth@marvell.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230731113408.2586913-1-rkannoth@marvell.com> References: <20230731113408.2586913-1-rkannoth@marvell.com> MIME-Version: 1.0 X-Proofpoint-GUID: lun4bGcLY4GP7CI685wcX9-dNilUlNqS X-Proofpoint-ORIG-GUID: lun4bGcLY4GP7CI685wcX9-dNilUlNqS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.591,FMLib:17.11.176.26 definitions=2023-07-31_05,2023-07-31_01,2023-05-22_02 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham 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 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772944001081403162 X-GMAIL-MSGID: 1772944001081403162 Driver support to offload TC flower rules which matches against SPI field of IPSEC packets (AH/ESP). Signed-off-by: Ratheesh Kannoth --- .../net/ethernet/marvell/octeontx2/af/mbox.h | 4 +++ .../net/ethernet/marvell/octeontx2/af/npc.h | 1 + .../marvell/octeontx2/af/rvu_debugfs.c | 4 +++ .../marvell/octeontx2/af/rvu_npc_fs.c | 11 ++++++++ .../ethernet/marvell/octeontx2/nic/otx2_tc.c | 27 +++++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h index ed66c5989102..a8f3c8faf8af 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/mbox.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/mbox.h @@ -1451,6 +1451,10 @@ struct flow_msg { __be32 ip4dst; __be32 ip6dst[4]; }; + union { + __be32 spi; + }; + u8 tos; u8 ip_ver; u8 ip_proto; diff --git a/drivers/net/ethernet/marvell/octeontx2/af/npc.h b/drivers/net/ethernet/marvell/octeontx2/af/npc.h index 9beeead56d7b..534f20c0c5df 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/npc.h +++ b/drivers/net/ethernet/marvell/octeontx2/af/npc.h @@ -204,6 +204,7 @@ enum key_fields { NPC_DPORT_UDP, NPC_SPORT_SCTP, NPC_DPORT_SCTP, + NPC_IPSEC_SPI, NPC_HEADER_FIELDS_MAX, NPC_CHAN = NPC_HEADER_FIELDS_MAX, /* Valid when Rx */ NPC_PF_FUNC, /* Valid when Tx */ diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c index 3b26893efdf8..7cd33edca365 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c @@ -2827,6 +2827,10 @@ static void rvu_dbg_npc_mcam_show_flows(struct seq_file *s, seq_printf(s, "%d ", ntohs(rule->packet.dport)); seq_printf(s, "mask 0x%x\n", ntohs(rule->mask.dport)); break; + case NPC_IPSEC_SPI: + seq_printf(s, "0x%x ", ntohl(rule->packet.spi)); + seq_printf(s, "mask 0x%x\n", ntohl(rule->mask.spi)); + break; default: seq_puts(s, "\n"); break; diff --git a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c index 9c365cc3e736..bb715e616fad 100644 --- a/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c +++ b/drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c @@ -41,6 +41,7 @@ static const char * const npc_flow_names[] = { [NPC_SPORT_SCTP] = "sctp source port", [NPC_DPORT_SCTP] = "sctp destination port", [NPC_LXMB] = "Mcast/Bcast header ", + [NPC_IPSEC_SPI] = "SPI ", [NPC_UNKNOWN] = "unknown", }; @@ -513,6 +514,10 @@ do { \ NPC_SCAN_HDR(NPC_VLAN_TAG1, NPC_LID_LB, NPC_LT_LB_CTAG, 2, 2); NPC_SCAN_HDR(NPC_VLAN_TAG2, NPC_LID_LB, NPC_LT_LB_STAG_QINQ, 2, 2); NPC_SCAN_HDR(NPC_DMAC, NPC_LID_LA, la_ltype, la_start, 6); + + NPC_SCAN_HDR(NPC_IPSEC_SPI, NPC_LID_LD, NPC_LT_LD_AH, 4, 4); + NPC_SCAN_HDR(NPC_IPSEC_SPI, NPC_LID_LE, NPC_LT_LE_ESP, 0, 4); + /* SMAC follows the DMAC(which is 6 bytes) */ NPC_SCAN_HDR(NPC_SMAC, NPC_LID_LA, la_ltype, la_start + 6, 6); /* PF_FUNC is 2 bytes at 0th byte of NPC_LT_LA_IH_NIX_ETHER */ @@ -564,6 +569,9 @@ static void npc_set_features(struct rvu *rvu, int blkaddr, u8 intf) if (!npc_check_field(rvu, blkaddr, NPC_LB, intf)) *features &= ~BIT_ULL(NPC_OUTER_VID); + if (*features & (BIT_ULL(NPC_IPPROTO_AH) | BIT_ULL(NPC_IPPROTO_ESP))) + *features |= BIT_ULL(NPC_IPSEC_SPI); + /* for vlan ethertypes corresponding layer type should be in the key */ if (npc_check_field(rvu, blkaddr, NPC_LB, intf)) *features |= BIT_ULL(NPC_VLAN_ETYPE_CTAG) | @@ -930,6 +938,9 @@ do { \ NPC_WRITE_FLOW(NPC_DPORT_SCTP, dport, ntohs(pkt->dport), 0, ntohs(mask->dport), 0); + NPC_WRITE_FLOW(NPC_IPSEC_SPI, spi, ntohl(pkt->spi), 0, + ntohl(mask->spi), 0); + NPC_WRITE_FLOW(NPC_OUTER_VID, vlan_tci, ntohs(pkt->vlan_tci), 0, ntohs(mask->vlan_tci), 0); diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c index 5a44e9b96fc0..4bb511e3cbe5 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_tc.c @@ -461,6 +461,7 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, BIT_ULL(FLOW_DISSECTOR_KEY_IPV4_ADDRS) | BIT_ULL(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | BIT_ULL(FLOW_DISSECTOR_KEY_PORTS) | + BIT(FLOW_DISSECTOR_KEY_IPSEC) | BIT_ULL(FLOW_DISSECTOR_KEY_IP)))) { netdev_info(nic->netdev, "unsupported flow used key 0x%llx", dissector->used_keys); @@ -482,6 +483,8 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, match.key->ip_proto != IPPROTO_UDP && match.key->ip_proto != IPPROTO_SCTP && match.key->ip_proto != IPPROTO_ICMP && + match.key->ip_proto != IPPROTO_ESP && + match.key->ip_proto != IPPROTO_AH && match.key->ip_proto != IPPROTO_ICMPV6)) { netdev_info(nic->netdev, "ip_proto=0x%x not supported\n", @@ -501,6 +504,10 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, req->features |= BIT_ULL(NPC_IPPROTO_ICMP); else if (ip_proto == IPPROTO_ICMPV6) req->features |= BIT_ULL(NPC_IPPROTO_ICMP6); + else if (ip_proto == IPPROTO_ESP) + req->features |= BIT_ULL(NPC_IPPROTO_ESP); + else if (ip_proto == IPPROTO_AH) + req->features |= BIT_ULL(NPC_IPPROTO_AH); } if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_CONTROL)) { @@ -545,6 +552,26 @@ static int otx2_tc_prepare_flow(struct otx2_nic *nic, struct otx2_tc_flow *node, } } + if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IPSEC)) { + struct flow_match_ipsec match; + + flow_rule_match_ipsec(rule, &match); + if (!match.mask->spi) { + NL_SET_ERR_MSG_MOD(extack, "spi index not specified"); + return -EOPNOTSUPP; + } + if (ip_proto != IPPROTO_ESP && + ip_proto != IPPROTO_AH) { + NL_SET_ERR_MSG_MOD(extack, + "SPI index is valid only for ESP/AH proto"); + return -EOPNOTSUPP; + } + + flow_spec->spi = match.key->spi; + flow_mask->spi = match.mask->spi; + req->features |= BIT_ULL(NPC_IPSEC_SPI); + } + if (flow_rule_match_key(rule, FLOW_DISSECTOR_KEY_IP)) { struct flow_match_ip match;