From patchwork Fri Oct 21 09:10:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Horman X-Patchwork-Id: 1692990 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=IMspqE6I; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4MtzGh5CQ9z1ygT for ; Fri, 21 Oct 2022 20:11:07 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id BC15441187; Fri, 21 Oct 2022 09:11:04 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org BC15441187 Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=IMspqE6I X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qDlhJ_r31dE5; Fri, 21 Oct 2022 09:11:03 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp2.osuosl.org (Postfix) with ESMTPS id 86F1E408EA; Fri, 21 Oct 2022 09:11:02 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 86F1E408EA Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0F1AFC0032; Fri, 21 Oct 2022 09:11:02 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id E8F17C002D for ; Fri, 21 Oct 2022 09:11:00 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id BB9EC8305A for ; Fri, 21 Oct 2022 09:11:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org BB9EC8305A Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key) header.d=corigine.onmicrosoft.com header.i=@corigine.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-corigine-onmicrosoft-com header.b=IMspqE6I X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id M5EoxKgQl0f4 for ; Fri, 21 Oct 2022 09:10:59 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 990DB82FAE Received: from NAM10-DM6-obe.outbound.protection.outlook.com (mail-dm6nam10on2116.outbound.protection.outlook.com [40.107.93.116]) by smtp1.osuosl.org (Postfix) with ESMTPS id 990DB82FAE for ; Fri, 21 Oct 2022 09:10:59 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cX1+hJgBNpYoer+q80E8Zjsbs//yIiLbb7SZZ1eWo3B2+zWU9MbC2EaluPvDvMfcJTczRq+D/ljg89G+jJcuI7uVnJIwRxA2n9X4JC8x2hw61UngvL5XSjyKfQdK5u+IHaEQIjzQ7xtO/5V5dGJmgHyoU9jJRmcOuRJD4Eucl7hGIZSUJoHbNpPYcT25ywvz9Yq/ODySkzuM6aqOyEcu8G37gptrBHGGw94k7I97svRnq7Qh9xGhcqPokPceKRa19/2/V4l8N7W/5xnrRdAagzQW8TPdSFS+Ii1mndBYQiQhFIH3WUpZ3pFB0u95n0l5b7hb5BOcKxwQKKwXIizLTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=x8fUcOyU1ZqajS1X/Hays8zZdFzq7cMAEMmlQuQVBqA=; b=Gdq2dyVxb7QfHxMlSlBAN6Dje4wfRnz5RxyyYj0jfq7uPzQVgqpqt86YENVBkMzy0Ly31WXp56K7+D1QffRXAaxCuZjpNtLCvop8ZQQSifL7ryjePz4iSocDSm6D7KHL9QKx7yVaQU40mq1Oa1FBH97vAtGIsGnn/8PnLy5BUe42jluHGxwqCZtIjtNUaSCSwmzjfpv2W+oHexThQs1FXubPSuxU3Yj9vB+T8H1BhSE/JL5b/P4D8ujgI3O1rZDen4S6wpZfNZa+sQ4Jv7pw5r39uYmdv9cuqWC/4Q1XCkKX8yZbAnhjm9CtjPevcJNDeABk+LqlcmUwsMu9y9sHvQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com; dkim=pass header.d=corigine.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=x8fUcOyU1ZqajS1X/Hays8zZdFzq7cMAEMmlQuQVBqA=; b=IMspqE6IAeFV0zYSqfrB/JtcByw2ieR6luXXr5lEJHybadc6L/3pF5kC/T8kba7TWN9Wv6GliOu0LrgQvXkwW8H0OXLODAhWRuz2jKf6jyrd5ESNdoTlZgpNr+oGBP2RoPkRD124BQJepCgAiFivwuALDWqwtTsvAeU6vmXzmXI= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=corigine.com; Received: from PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) by SA1PR13MB4848.namprd13.prod.outlook.com (2603:10b6:806:1a5::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.17; Fri, 21 Oct 2022 09:10:55 +0000 Received: from PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::3a35:112e:34eb:6161]) by PH0PR13MB4842.namprd13.prod.outlook.com ([fe80::3a35:112e:34eb:6161%6]) with mapi id 15.20.5746.016; Fri, 21 Oct 2022 09:10:55 +0000 From: Simon Horman To: dev@openvswitch.org Date: Fri, 21 Oct 2022 11:10:31 +0200 Message-Id: <20221021091031.52856-1-simon.horman@corigine.com> X-Mailer: git-send-email 2.30.2 X-ClientProxiedBy: AM4PR0701CA0018.eurprd07.prod.outlook.com (2603:10a6:200:42::28) To PH0PR13MB4842.namprd13.prod.outlook.com (2603:10b6:510:78::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PH0PR13MB4842:EE_|SA1PR13MB4848:EE_ X-MS-Office365-Filtering-Correlation-Id: 5611afc5-f465-4a8a-009c-08dab3442903 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SzUFCS44ascoqwhvMNNLAXwia4alpVynxbq19SlOXQHC1P+jJmHG5GAROMS0LGnBUcCJdcUlSEHNtJ2qIqDyZXE0c4+gDD19QfKKW+qusVxR5K5HutGACX8ASeB9c3W89HZvKZnhXeXPE+dRoFQokgAiIfGmX1cutcIBmLeYZ/S1kzMi+QQOHhVtDR+eVC5lRp+zWMPaPtY38VFdTvgW7VyGefvEFR0H1u+ml25YCMGJ+K9Ta0KWjJKrJ9b/wr2z6Fj68RPhXlSHNS+pzp4QUCeUNk4uJk+VyLvbTueiii67AiHrH0jbvA5Kb2ojOuNtcFp5g2jQNUuBbrUjhMW00jmFYUytdnaL+hVUgVGWQF4OO5JuI0cYEOoPNdEZ4ksI7hboCWjCh/uluqSBXfIYMplME70nDbJb59+dp8dFVAc7IN6PISrWQwpWoXoOHSjHVdgiN/eY31pfRo82L9aVwBfR9VGwn6v99v7vFlqM3/ZVGaTL5qZHWxQ9bysli8uP3PYkgEsXO3n3T5me05qd9s9h97qEo+XGQEh9UG8Lidqe6e3MpGK+K3CbhoOMKTp+D3+PDSP5wnLHQpbLK8r3/Kre2yunBTMYlNnRJSrB8Q3Saf6ZyB16sMxDQ/PgrekH23ddrk/QpiVU7YjU8KSL3WF69/DT/Ad2gCT/O1dFyXVEdW8r2LHurLCSnyLWU0wM/xIKeVO1V0fASp9phyxbZg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR13MB4842.namprd13.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230022)(4636009)(376002)(136003)(39830400003)(396003)(366004)(346002)(451199015)(2616005)(1076003)(478600001)(107886003)(6666004)(6486002)(6506007)(52116002)(44832011)(8936002)(5660300002)(36756003)(6512007)(8676002)(6916009)(2906002)(54906003)(316002)(4326008)(86362001)(38100700002)(66556008)(66476007)(66946007)(41300700001)(83380400001)(186003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: L0zaINEyOUZLnpS1m9hIgYEzSCp9RsFDdXeyjZsReup7NkxfDcYGNDvhMnl3rqps/m72o2I1yHjsHsRPnMJ4QmTkSgJojfVKbjhebeTpxWphW0C9BjMhawO54PGEG5GBULdOOj0gTVsa0O0nBtL2IgoaUKAr7HdOqevhFuyoGRhzYgxNFD2OcbyWkKiGTxiEz8LXy28Hq6ntxjHdMIxFLvXz343DxFeGMgn7KmsSdLDHZtwYa7Ak3GQqzfIMRNs6USCUc0ByftbjDZsiMWYXL2jv5mrBM81nKXf0MJ4rXA1MpLTQMnrH14iaBeVB/ct7S7bnmTVQgfDNj2j8tCBA90f5F3g/UlDXA8+4R7ShEqbD2DB6S9JKjhc529HgUXZWgVGuQQ40BG7HuSPi+bJbK+PiJGo8nSfxuNmBJeL1brQczw4ZeaiMJuvIW3J7DxzbZRl8q9MsKNPUEQ/E1HofenPjeI+xj+0PctihP8HDPF+PqtC8Q6ZFyleih16CECIo4VWHO1t2DkigwSTAEzTobXdEqlPT0ZR6ULkzcMDTA31zHbkGoDFeN23cSK9WJ5Alo2FwQ3/zcmzjZOUMjND3mv49VKQbY1JpUOGnq/VD4Gu5G7nB5EAecqW7f0MxoN0Qs5g24AnwSeiR7BgSZLr7KLWWfY7JXL+lUfC5+XrUZ3RF3Onnh4buxX7cvN8dzafbZvRI782zM02VE4sfVVkNztSoK8EzQaB2DSY9ZhIJhKWWtPn2gm1TaX4Nec8HYowWRlN4RmXHNsts2GYAU/ZlkyqxcoVCYuexIBdwh8TsdVRCMuTW+afdOcwfaM3HyNqOe9IRYBcYawomWmOjaJDumNlpCU4LTlBYbRAfDNudfiRo9pZfqcqBgc1hlw3+Q534dOLI3q7iayBcOYvCvIjwrYC59bEk1KskUoT+JW32pRRTI/U5dS7TuPW2xXgYiOXl99cb1SCYjHFwcthXYY6uEDDbnEegyf6mY9dGjDJGySGH7OE5Ta1dKaF+8z9AbMryrs2rr1mU1o+HUdrok2hbhS0X5yvyBdviEDzwIUi1+JsPS44E/VYmeiPbKuZA34wF0SNxbKyfcw2QheKuPW/EewNQHTKQM1sTKZNDU9lQBYVctMfyOdkZE6pQ3u0Cfits7GWlMCl4m527iyLqNscdtY+048WmsATPYUhhle8c9EmBxYQKK9w4TLjH7tUKrLS12S2/nN9Ugi80FOKrEI/we+LUXby5yxFmuO1i3JhqB85AHW+I4kQgeqWC0l9QUyuAN40zwrP5v3+eNy9tQuGUPYYbNO8pkCU42kH35FZsa45WSPYCjorzdI0fOA6ksVW7Wiplcgh3QXIeeXRkivfnghbdtvSJCyRRTJtuZKvxfDZe/iJCU1fbpcJsUpCfznt6AaBdWdUp/S+d8hYGyvwVah1IvQ9Ct6mPSFxnKkj/UVTHjzkYS+vW2RzLZcbIaDI5f/jNj6JGLiXOofi1xWm3ezrSwgg7VEQe7UPnSic4cb1V107InJx0NLeRQNo5oEtJqG4QiOrmKSL1yygUuHQjRe6KIF3V8inrreZMFiEzQuBp13UpzVUaorG3ADq9E3iPKAaWQpGBpfc52nYMKjWluUCP6H+0Gm4kmWf5nKXXbr5jbOXvLQhY1t5nDOgR2pQ9udmCE9WNAdzIX6LzmKn3fw== X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5611afc5-f465-4a8a-009c-08dab3442903 X-MS-Exchange-CrossTenant-AuthSource: PH0PR13MB4842.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2022 09:10:55.6212 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: fe128f2c-073b-4c20-818e-7246a585940c X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: v9LRThlPzcHd4n5IVOi58UxbrVx+miDO6LqBqlqo3Wu+PsUhKlqnSmFi6EVPw7tdd99/r6KNjBgBGzLKe9xlWvD3kILq4ukXFy+owb8FH5s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR13MB4848 Cc: Simon Horman , oss-drivers@corigine.com, Baowen Zheng , Ilya Maximets Subject: [ovs-dev] [PATCH v2] netdev-linux: Allow meter to work in tc software datapath when tc-policy is specified X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" From: Baowen Zheng Add tc action flags when adding police action to offload meter table. There is a restriction that the flag of skip_sw/skip_hw should be same for filter rule and the independent created tc actions the rule uses. In this case, if we configure the tc-policy as skip_hw, filter rule will be created with skip_hw flag and the police action according to meter table will have no action flag, then flower rule will fail to add to tc kernel system. To fix this issue, we will add tc action flag when adding police action to offload a meter table, so it will allow meter table to work in tc software datapath. Fixes: 5c039ddc64ff ("netdev-linux: Add functions to manipulate tc police action") Signed-off-by: Baowen Zheng Signed-off-by: Simon Horman Acked-by: Ilya Maximets --- acinclude.m4 | 6 +++--- include/linux/pkt_cls.h | 11 +++++++---- lib/netdev-linux.c | 20 ++++++++++++++------ lib/tc.c | 21 +++++++++++++++++++++ lib/tc.h | 2 ++ 5 files changed, 47 insertions(+), 13 deletions(-) v2: * Address review of v1 - Update patch description: problem depends on setting tc-policy - Correct typo in comment: "independently" - Reformat nl_msg_put_tc_action_flag() declaration - Rename helper as nl_msg_put_act_tc_policy_flag() and correct line wrapping of declaration. diff --git a/acinclude.m4 b/acinclude.m4 index ad07989ac29c..aa9af55062f0 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -163,10 +163,10 @@ dnl Configure Linux tc compat. AC_DEFUN([OVS_CHECK_LINUX_TC], [ AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([#include ], [ - int x = TCA_POLICE_PKTRATE64; + int x = TCA_ACT_FLAGS_SKIP_HW; ])], - [AC_DEFINE([HAVE_TCA_POLICE_PKTRATE64], [1], - [Define to 1 if TCA_POLICE_PKTRATE64 is available.])]) + [AC_DEFINE([HAVE_TCA_ACT_FLAGS_SKIP_HW], [1], + [Define to 1 if TCA_ACT_FLAGS_SKIP_HW is available.])]) AC_CHECK_MEMBERS([struct tcf_t.firstuse], [], [], [#include ]) diff --git a/include/linux/pkt_cls.h b/include/linux/pkt_cls.h index ba82e690eba9..a8cd8db5bf88 100644 --- a/include/linux/pkt_cls.h +++ b/include/linux/pkt_cls.h @@ -1,7 +1,7 @@ #ifndef __LINUX_PKT_CLS_WRAPPER_H #define __LINUX_PKT_CLS_WRAPPER_H 1 -#if defined(__KERNEL__) || defined(HAVE_TCA_POLICE_PKTRATE64) +#if defined(__KERNEL__) || defined(HAVE_TCA_ACT_FLAGS_SKIP_HW) #include_next #else @@ -21,9 +21,12 @@ enum { __TCA_ACT_MAX }; -#define TCA_ACT_FLAGS_NO_PERCPU_STATS 1 /* Don't use percpu allocator for - * actions stats. - */ +/* See other TCA_ACT_FLAGS_ * flags in include/net/act_api.h. */ +#define TCA_ACT_FLAGS_NO_PERCPU_STATS (1 << 0) /* Don't use percpu allocator for + * actions stats. + */ +#define TCA_ACT_FLAGS_SKIP_HW (1 << 1) /* don't offload action to HW */ +#define TCA_ACT_FLAGS_SKIP_SW (1 << 2) /* don't use action in SW */ #define TCA_ACT_MAX __TCA_ACT_MAX #define TCA_OLD_COMPAT (TCA_ACT_MAX+1) diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index cdc66246ced3..7ea4070c23ab 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -2623,10 +2623,17 @@ tc_matchall_fill_police(uint32_t kbits_rate, uint32_t kbits_burst) static void nl_msg_act_police_start_nest(struct ofpbuf *request, uint32_t prio, - size_t *offset, size_t *act_offset) + size_t *offset, size_t *act_offset, + bool single_action) { *act_offset = nl_msg_start_nested(request, prio); nl_msg_put_string(request, TCA_ACT_KIND, "police"); + + /* If police action is added independently from filter, we need to + * add action flag according to tc-policy. */ + if (single_action) { + nl_msg_put_act_tc_policy_flag(request); + } *offset = nl_msg_start_nested(request, TCA_ACT_OPTIONS); } @@ -2642,7 +2649,7 @@ nl_msg_act_police_end_nest(struct ofpbuf *request, size_t offset, static void nl_msg_put_act_police(struct ofpbuf *request, struct tc_police *police, uint64_t pkts_rate, uint64_t pkts_burst, - uint32_t notexceed_act) + uint32_t notexceed_act, bool single_action) { size_t offset, act_offset; uint32_t prio = 0; @@ -2651,7 +2658,8 @@ nl_msg_put_act_police(struct ofpbuf *request, struct tc_police *police, return; } - nl_msg_act_police_start_nest(request, ++prio, &offset, &act_offset); + nl_msg_act_police_start_nest(request, ++prio, &offset, &act_offset, + single_action); if (police->rate.rate) { tc_put_rtab(request, TCA_POLICE_RATE, &police->rate); } @@ -2698,7 +2706,7 @@ tc_add_matchall_policer(struct netdev *netdev, uint32_t kbits_rate, basic_offset = nl_msg_start_nested(&request, TCA_OPTIONS); action_offset = nl_msg_start_nested(&request, TCA_MATCHALL_ACT); nl_msg_put_act_police(&request, &pol_act, kpkts_rate * 1000, - kpkts_burst * 1000, TC_ACT_UNSPEC); + kpkts_burst * 1000, TC_ACT_UNSPEC, false); nl_msg_end_nested(&request, action_offset); nl_msg_end_nested(&request, basic_offset); @@ -5667,7 +5675,7 @@ tc_add_policer(struct netdev *netdev, uint32_t kbits_rate, police_offset = nl_msg_start_nested(&request, TCA_BASIC_ACT); tc_policer_init(&tc_police, kbits_rate, kbits_burst); nl_msg_put_act_police(&request, &tc_police, kpkts_rate * 1000ULL, - kpkts_burst * 1000ULL, TC_ACT_UNSPEC); + kpkts_burst * 1000ULL, TC_ACT_UNSPEC, false); nl_msg_end_nested(&request, police_offset); nl_msg_end_nested(&request, basic_offset); @@ -5702,7 +5710,7 @@ tc_add_policer_action(uint32_t index, uint32_t kbits_rate, offset = nl_msg_start_nested(&request, TCA_ACT_TAB); nl_msg_put_act_police(&request, &tc_police, pkts_rate, pkts_burst, - TC_ACT_PIPE); + TC_ACT_PIPE, true); nl_msg_end_nested(&request, offset); error = tc_transact(&request, NULL); diff --git a/lib/tc.c b/lib/tc.c index 94044cde6060..66dc4208888c 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -3808,3 +3808,24 @@ tc_set_policy(const char *policy) VLOG_INFO("tc: Using policy '%s'", policy); } + +void +nl_msg_put_act_tc_policy_flag(struct ofpbuf *request) +{ + int flag = 0; + + if (!request) { + return; + } + + if (tc_policy == TC_POLICY_SKIP_HW) { + flag = TCA_ACT_FLAGS_SKIP_HW; + } else if (tc_policy == TC_POLICY_SKIP_SW) { + flag = TCA_ACT_FLAGS_SKIP_SW; + } + + if (flag) { + struct nla_bitfield32 flags = { flag, flag }; + nl_msg_put_unspec(request, TCA_ACT_FLAGS, &flags, sizeof flags); + } +} diff --git a/lib/tc.h b/lib/tc.h index 2e64ad372592..161f438124b0 100644 --- a/lib/tc.h +++ b/lib/tc.h @@ -399,4 +399,6 @@ int tc_parse_action_stats(struct nlattr *action, int tc_dump_tc_action_start(char *name, struct nl_dump *dump); int parse_netlink_to_tc_policer(struct ofpbuf *reply, uint32_t police_idx[]); +void nl_msg_put_act_tc_policy_flag(struct ofpbuf *request); + #endif /* tc.h */