Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3427083imw; Mon, 11 Jul 2022 08:26:51 -0700 (PDT) X-Google-Smtp-Source: AGRyM1uJC6cGYV88rL5Xy2bnoaS8EXJfAoGNfPL46M8QIoIl/LrBREveEBi/c7T7WmBCLlA5LDA/ X-Received: by 2002:a63:1921:0:b0:412:407f:f012 with SMTP id z33-20020a631921000000b00412407ff012mr15957360pgl.125.1657553211671; Mon, 11 Jul 2022 08:26:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657553211; cv=none; d=google.com; s=arc-20160816; b=Bzew2b5cSfsqNo3lAzYQHs+hiZA8h1NQ2Y9Tgaa/rldElh4VH/i7Lfzpg/Wi+aFch/ OyBPHM/qfj5KLOFozxlFncefJWlAhLPK/pe/13A+fiiMxe/8i5vpGTf61S5SxyeHTd0W qhGz4SYO2+vg5htI8LHdzfvSB18ahMDESMjggdUtJBaHASKsVjc099finKH0fOuq4ip0 JTL0psurys81biXxzfqrpbpfSmzNFGVt1hVMwIuhTlXytaQQCxWKPPsntZxFJIyHEZFQ 0btXwszU53Js/7vMykul79MR75ZY61vLztiSU5NpQFNKjRDHIlHuqdfI1bnffw1rYEne QcVQ== 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; bh=6qV0BGnB5zbX0zcQjLtUSoIek/DMkwAo3TB/QUWGW/o=; b=pmJdioYWuLQbsaCNppCwEpxSuUKXA3S2HkWJsXow2OchpuXGvYR2d0cKxAR725EH35 3yRmoZ3wNZxwTKKxnRzoVdJx3HKRFBrQ8Z0nq64wF7xfN3G/bz4tM+sB1LcKbcX8jLGY skiGd0FMvO/MJfSD4dO0FpzHeI16FQ9Sm36YtBXwjPwWALRrbh3qoZE7oHm1P3atYfzS rAsdmYMtg9w+dWdRok2f2O5N3Br6r2g8bttZvOdUQ/779uEBa2rfUey7XOSrxtjX0fCo wRhLMGdnEYbb3qZ9saUYVDKQAHAttONFXKLWxIabligA54lmNmxzNmNzQUBBGbOqtSh4 DiqQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=plvision.eu Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b6-20020a170902d50600b00163fbb1f1fasi12918590plg.252.2022.07.11.08.26.39; Mon, 11 Jul 2022 08:26:51 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=plvision.eu Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232145AbiGKPJj (ORCPT + 99 others); Mon, 11 Jul 2022 11:09:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37256 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232114AbiGKPJc (ORCPT ); Mon, 11 Jul 2022 11:09:32 -0400 Received: from syslogsrv (unknown [217.20.186.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4640A5FAD7; Mon, 11 Jul 2022 08:09:31 -0700 (PDT) Received: from fg200.ow.s ([172.20.254.44] helo=localhost.localdomain) by syslogsrv with esmtp (Exim 4.90_1) (envelope-from ) id 1oAv2D-000G64-NI; Mon, 11 Jul 2022 18:09:17 +0300 From: Maksym Glubokiy To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jamal Hadi Salim , Cong Wang , Jiri Pirko Cc: Maksym Glubokiy , louis.peens@corigine.com, elic@nvidia.com, simon.horman@corigine.com, baowen.zheng@corigine.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Volodymyr Mytnyk Subject: [PATCH net-next v2 1/2] net: extract port range fields from fl_flow_key Date: Mon, 11 Jul 2022 18:09:07 +0300 Message-Id: <20220711150908.1030650-2-maksym.glubokiy@plvision.eu> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220711150908.1030650-1-maksym.glubokiy@plvision.eu> References: <20220711150908.1030650-1-maksym.glubokiy@plvision.eu> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FSL_HELO_NON_FQDN_1, HELO_NO_DOMAIN,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 So it can be used for port range filter offloading. Co-developed-by: Volodymyr Mytnyk Signed-off-by: Volodymyr Mytnyk Signed-off-by: Maksym Glubokiy --- v2: - fix kernel-doc for the newly added structure include/net/flow_dissector.h | 16 ++++++++++++++++ include/net/flow_offload.h | 6 ++++++ net/core/flow_offload.c | 7 +++++++ net/sched/cls_flower.c | 8 +------- 4 files changed, 30 insertions(+), 7 deletions(-) diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h index a4c6057c7097..0f9544a9bb9e 100644 --- a/include/net/flow_dissector.h +++ b/include/net/flow_dissector.h @@ -178,6 +178,22 @@ struct flow_dissector_key_ports { }; }; +/** + * struct flow_dissector_key_ports_range + * @tp: port number from packet + * @tp_min: min port number in range + * @tp_max: max port number in range + */ +struct flow_dissector_key_ports_range { + union { + struct flow_dissector_key_ports tp; + struct { + struct flow_dissector_key_ports tp_min; + struct flow_dissector_key_ports tp_max; + }; + }; +}; + /** * flow_dissector_key_icmp: * type: ICMP type diff --git a/include/net/flow_offload.h b/include/net/flow_offload.h index 7ac313858037..a8d8512b7059 100644 --- a/include/net/flow_offload.h +++ b/include/net/flow_offload.h @@ -48,6 +48,10 @@ struct flow_match_ports { struct flow_dissector_key_ports *key, *mask; }; +struct flow_match_ports_range { + struct flow_dissector_key_ports_range *key, *mask; +}; + struct flow_match_icmp { struct flow_dissector_key_icmp *key, *mask; }; @@ -94,6 +98,8 @@ void flow_rule_match_ip(const struct flow_rule *rule, struct flow_match_ip *out); void flow_rule_match_ports(const struct flow_rule *rule, struct flow_match_ports *out); +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_icmp(const struct flow_rule *rule, diff --git a/net/core/flow_offload.c b/net/core/flow_offload.c index 929f6379a279..0d3075d3c8fb 100644 --- a/net/core/flow_offload.c +++ b/net/core/flow_offload.c @@ -125,6 +125,13 @@ void flow_rule_match_ports(const struct flow_rule *rule, } EXPORT_SYMBOL(flow_rule_match_ports); +void flow_rule_match_ports_range(const struct flow_rule *rule, + struct flow_match_ports_range *out) +{ + FLOW_DISSECTOR_MATCH(rule, FLOW_DISSECTOR_KEY_PORTS_RANGE, out); +} +EXPORT_SYMBOL(flow_rule_match_ports_range); + void flow_rule_match_tcp(const struct flow_rule *rule, struct flow_match_tcp *out) { diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index dcca70144dff..1a1e34480b7e 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -63,13 +63,7 @@ struct fl_flow_key { struct flow_dissector_key_ip ip; struct flow_dissector_key_ip enc_ip; struct flow_dissector_key_enc_opts enc_opts; - union { - struct flow_dissector_key_ports tp; - struct { - struct flow_dissector_key_ports tp_min; - struct flow_dissector_key_ports tp_max; - }; - } tp_range; + struct flow_dissector_key_ports_range tp_range; struct flow_dissector_key_ct ct; struct flow_dissector_key_hash hash; struct flow_dissector_key_num_of_vlans num_of_vlans; -- 2.25.1