Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp3446890imw; Thu, 7 Jul 2022 01:47:20 -0700 (PDT) X-Google-Smtp-Source: AGRyM1u/n68JhK33BoD/ACt3qIr5vWewopRaSdRkjTWcVKoJ0mLeEuD3chd+OwY4Tc/1/cduLAVX X-Received: by 2002:a17:907:c13:b0:726:a5ee:a0f1 with SMTP id ga19-20020a1709070c1300b00726a5eea0f1mr44901936ejc.332.1657183640633; Thu, 07 Jul 2022 01:47:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1657183640; cv=none; d=google.com; s=arc-20160816; b=QUZzCBd0TuCUS9YWYfwCiyN+8ZqQ6AZaUyYHskNi+tyB29VHZK3lvlAfrzzn5CEFcN mD01Ywpq7Ys26wUM4AuAMDafpiFymMBvh1xDf3YN7/8WfqEVGuUq5Nj8CaHBTmCwAs93 txi8kGnAgrWMRTss3X3Sa0UyaqX7z/qzPzh/0Iu/9IDZTVPYdxwGY8RTC7Xrz8n92DrM 50p331MF/DH/w/oF20fPpIrusduNDaMeyRURgR5waVOYeOm/whAFyFiSZOb1Q9ZurlMr c9eNiLydbcVwwMAKuE2vWBr6dAE3e2ronHQZkkNTT/kh0Skkbp0CCovGgU5AMdgIJxDW DWcw== 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=QC3/48aSOZs2vtLRzO8X6KeKf0bBpRCagiYsDUAuX/Q=; b=yCgS3LbXFDaspXnGDZzprwGgJEu9WeMbZGPZj2Fmr39eqbVP6tj9X5lmPwS5WGCG9l +A1G2/Q8wjTwBbysT8c8Cr6kwwcnoIi8DQKer22fRGXpUJ+OXPNKrBK5faB/LJF8Lvtr exdTEDbqTfYdW4bQGdRfhBWnbKRRiFGeFE8/5iYEJJUNRVxuK206T8/U6X/N5zy4+ogF J01cyex1A7br5/aWzdQMTCuK0lNwcdQQY92WjaFfhckzw9LOJSMlQPZh8ZCHkdSrVcbx DHwHNohoLHip1oPS4PGnIN9VwkbXP7iY+yP596GDqXTt+Ny57LNY+YQ5h0hc7WIRsLjy C0AA== 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 hs2-20020a1709073e8200b00711dc674239si15277427ejc.726.2022.07.07.01.46.55; Thu, 07 Jul 2022 01:47:20 -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 S234443AbiGGIhu (ORCPT + 99 others); Thu, 7 Jul 2022 04:37:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52864 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230005AbiGGIhr (ORCPT ); Thu, 7 Jul 2022 04:37:47 -0400 Received: from syslogsrv (unknown [217.20.186.93]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7C837326D5; Thu, 7 Jul 2022 01:37:45 -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 1o9MzS-000CqE-7C; Thu, 07 Jul 2022 11:36:02 +0300 From: Maksym Glubokiy To: Taras Chornyi , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Maksym Glubokiy , Volodymyr Mytnyk , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next 2/2] net: prestera: add support for port range filters Date: Thu, 7 Jul 2022 11:35:39 +0300 Message-Id: <20220707083539.171242-2-maksym.glubokiy@plvision.eu> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220707083539.171242-1-maksym.glubokiy@plvision.eu> References: <20220707083539.171242-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 This adds support for port-range rules: $ tc qdisc add ... clsact $ tc filter add ... flower ... src_port - ... Co-developed-by: Volodymyr Mytnyk Signed-off-by: Volodymyr Mytnyk Signed-off-by: Maksym Glubokiy --- .../marvell/prestera/prestera_flower.c | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/net/ethernet/marvell/prestera/prestera_flower.c b/drivers/net/ethernet/marvell/prestera/prestera_flower.c index a54748ac6541..652aa95e65ac 100644 --- a/drivers/net/ethernet/marvell/prestera/prestera_flower.c +++ b/drivers/net/ethernet/marvell/prestera/prestera_flower.c @@ -202,6 +202,7 @@ static int prestera_flower_parse(struct prestera_flow_block *block, BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | BIT(FLOW_DISSECTOR_KEY_ICMP) | BIT(FLOW_DISSECTOR_KEY_PORTS) | + BIT(FLOW_DISSECTOR_KEY_PORTS_RANGE) | BIT(FLOW_DISSECTOR_KEY_VLAN))) { NL_SET_ERR_MSG_MOD(f->common.extack, "Unsupported key"); return -EOPNOTSUPP; @@ -301,6 +302,29 @@ static int prestera_flower_parse(struct prestera_flow_block *block, rule_match_set(r_match->mask, L4_PORT_DST, match.mask->dst); } + if (flow_rule_match_key(f_rule, FLOW_DISSECTOR_KEY_PORTS_RANGE)) { + struct flow_match_ports_range match; + __be32 tp_key, tp_mask; + + flow_rule_match_ports_range(f_rule, &match); + + /* src port range (min, max) */ + tp_key = htonl(ntohs(match.key->tp_min.src) | + (ntohs(match.key->tp_max.src) << 16)); + tp_mask = htonl(ntohs(match.mask->tp_min.src) | + (ntohs(match.mask->tp_max.src) << 16)); + rule_match_set(r_match->key, L4_PORT_RANGE_SRC, tp_key); + rule_match_set(r_match->mask, L4_PORT_RANGE_SRC, tp_mask); + + /* dst port range (min, max) */ + tp_key = htonl(ntohs(match.key->tp_min.dst) | + (ntohs(match.key->tp_max.dst) << 16)); + tp_mask = htonl(ntohs(match.mask->tp_min.dst) | + (ntohs(match.mask->tp_max.dst) << 16)); + rule_match_set(r_match->key, L4_PORT_RANGE_DST, tp_key); + rule_match_set(r_match->mask, L4_PORT_RANGE_DST, tp_mask); + } + if (flow_rule_match_key(f_rule, FLOW_DISSECTOR_KEY_VLAN)) { struct flow_match_vlan match; -- 2.25.1