From patchwork Tue Apr 12 10:03:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Sukholitko X-Patchwork-Id: 12810515 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4BEF5C4332F for ; Tue, 12 Apr 2022 11:17:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345897AbiDLLTT (ORCPT ); Tue, 12 Apr 2022 07:19:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58514 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1353728AbiDLLSp (ORCPT ); Tue, 12 Apr 2022 07:18:45 -0400 Received: from mail-pf1-x435.google.com (mail-pf1-x435.google.com [IPv6:2607:f8b0:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 96D17270F for ; Tue, 12 Apr 2022 03:04:03 -0700 (PDT) Received: by mail-pf1-x435.google.com with SMTP id w7so17018976pfu.11 for ; Tue, 12 Apr 2022 03:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=Su5g0cBvl9sY0aYek3V0UtXX6OK7gdGZs1KvKvdoxx4=; b=JRDhmRj0Dvc3mNu5gqwT/E+HxqWXPLS8qE6ivqT1mYZ5yQVzEWA5R3zOlal1x5qHob 8OpHq8PtWLskUn8kchmWn6rMqMfrizJW8vcT6MNSBvAfvlEz4R5TiC4RVv7J+hlivL9l ZK4IUXGKpGjxDJc5WsrLeJYl323+rSVvZdg8c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version; bh=Su5g0cBvl9sY0aYek3V0UtXX6OK7gdGZs1KvKvdoxx4=; b=f9PQUfGnt6gu7k+XG1bm26j/AEiJd8J41Ombjo+QWrKHILivKoNQg6HVe3CJQ1bv4D +rFdmo7DCvDWQ0HJBaYxKqD//j6e54TyPGF7Hz2mORxcq3LujOpc0e3bkfqOKq946rnQ cXh6Q2iEuB5z9gh/qsbN8EtitunLbC+phOS8iz2yqfcRhDqY7Q5U0rkmlaSFD06gZMIz ht3uc06uks0ooj4Qlk3pgT4zMoZz4kODscBXChPahCxZuHkUR4LaSgKHy37RhbGlEGXF yq8Ch18DmeMshuo+KVpg2JwQmVDCDoYnKVTk/UUUrshs4WLlyg44NahvMqkmBDLAACfD afKg== X-Gm-Message-State: AOAM532xxIO73Tm2lhZWO7DJu1oB7fUC/dQEuVTVT79dyE7hCgmguw9O C68TrEg3gkrrG91xRLyP2ruf+1uOUiiUXCmTGjKnlFN6ooelewBEy8cHGrqW+fnXeJWyKAHdr6V 0JtcQuGC6S8sZkxbKwAgV0tWfucJ29hGRZQSE45VYu100nfJ+CDa7u1nVHSNdtjTwAAPrzvbIym fniTziNuFY+g== X-Google-Smtp-Source: ABdhPJwRikj4gacRtvBjJ22X3h+gKCJPqoWJiJNXkGbMmwdGO5t/+lXYtIjBhqttX16dJxtDQj8TGQ== X-Received: by 2002:a63:f24c:0:b0:383:c279:e662 with SMTP id d12-20020a63f24c000000b00383c279e662mr30137507pgk.303.1649757842504; Tue, 12 Apr 2022 03:04:02 -0700 (PDT) Received: from localhost.localdomain ([192.19.250.250]) by smtp.gmail.com with ESMTPSA id n24-20020aa79058000000b00505686a982asm17357087pfo.125.2022.04.12.03.03.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 03:04:02 -0700 (PDT) From: Boris Sukholitko To: netdev@vger.kernel.org, "David S . Miller" , Jakub Kicinski , Jamal Hadi Salim , Cong Wang , Jiri Pirko , "Gustavo A . R . Silva" , Vladimir Oltean , Eric Dumazet , zhang kai , Yoshiki Komachi Cc: Ilya Lifshits , Boris Sukholitko Subject: [PATCH iproute2-next v2 1/2] f_flower: Add num of vlans parameter Date: Tue, 12 Apr 2022 13:03:42 +0300 Message-Id: <20220412100343.27387-2-boris.sukholitko@broadcom.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20220412100343.27387-1-boris.sukholitko@broadcom.com> References: <20220412100343.27387-1-boris.sukholitko@broadcom.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: dsahern@gmail.com Our customers in the fiber telecom world have network configurations where they would like to control their traffic according to the number of tags appearing in the packet. For example, TR247 GPON conformance test suite specification mostly talks about untagged, single, double tagged packets and gives lax guidelines on the vlan protocol vs. number of vlan tags. This is different from the common IT networks where 802.1Q and 802.1ad protocols are usually describe single and double tagged packet. GPON configurations that we work with have arbitrary mix the above protocols and number of vlan tags in the packet. This patch adds num_of_vlans flower key and associated print and parse routines. The following command becomes possible: tc filter add dev eth1 ingress flower num_of_vlans 1 action drop Signed-off-by: Boris Sukholitko --- include/uapi/linux/pkt_cls.h | 2 ++ tc/f_flower.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/uapi/linux/pkt_cls.h b/include/uapi/linux/pkt_cls.h index 404f97fb..c3d3b5f0 100644 --- a/include/uapi/linux/pkt_cls.h +++ b/include/uapi/linux/pkt_cls.h @@ -587,6 +587,8 @@ enum { TCA_FLOWER_KEY_HASH, /* u32 */ TCA_FLOWER_KEY_HASH_MASK, /* u32 */ + TCA_FLOWER_KEY_NUM_OF_VLANS, /* u8 */ + __TCA_FLOWER_MAX, }; diff --git a/tc/f_flower.c b/tc/f_flower.c index 686cf121..25ffd295 100644 --- a/tc/f_flower.c +++ b/tc/f_flower.c @@ -48,6 +48,7 @@ static void explain(void) "\n" "Where: MATCH-LIST := [ MATCH-LIST ] MATCH\n" " MATCH := { indev DEV-NAME |\n" + " num_of_vlans VLANS_COUNT |\n" " vlan_id VID |\n" " vlan_prio PRIORITY |\n" " vlan_ethtype [ ipv4 | ipv6 | ETH-TYPE ] |\n" @@ -1525,6 +1526,17 @@ static int flower_parse_opt(struct filter_util *qu, char *handle, if (check_ifname(*argv)) invarg("\"indev\" not a valid ifname", *argv); addattrstrz(n, MAX_MSG, TCA_FLOWER_INDEV, *argv); + } else if (matches(*argv, "num_of_vlans") == 0) { + __u8 num_of_vlans; + + NEXT_ARG(); + ret = get_u8(&num_of_vlans, *argv, 10); + if (ret < 0) { + fprintf(stderr, "Illegal \"num_of_vlans\"\n"); + return -1; + } + addattr8(n, MAX_MSG, + TCA_FLOWER_KEY_NUM_OF_VLANS, num_of_vlans); } else if (matches(*argv, "vlan_id") == 0) { __u16 vid; @@ -2694,6 +2706,14 @@ static int flower_print_opt(struct filter_util *qu, FILE *f, open_json_object("keys"); + if (tb[TCA_FLOWER_KEY_NUM_OF_VLANS]) { + struct rtattr *attr = tb[TCA_FLOWER_KEY_NUM_OF_VLANS]; + + print_nl(); + print_uint(PRINT_ANY, "num_of_vlans", " num_of_vlans %d", + rta_getattr_u8(attr)); + } + if (tb[TCA_FLOWER_KEY_VLAN_ID]) { struct rtattr *attr = tb[TCA_FLOWER_KEY_VLAN_ID];