From patchwork Thu Apr 7 09:16:02 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jianbo Liu X-Patchwork-Id: 1614371 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=unVHanjw; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KYwk54fHhz9sGg for ; Thu, 7 Apr 2022 19:16:45 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id B477461222; Thu, 7 Apr 2022 09:16:43 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kwohyD6SglKS; Thu, 7 Apr 2022 09:16:41 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 142E661216; Thu, 7 Apr 2022 09:16:38 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id C3C70C002C; Thu, 7 Apr 2022 09:16:38 +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 18864C002C for ; Thu, 7 Apr 2022 09:16:37 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 7C81E83F69 for ; Thu, 7 Apr 2022 09:16:31 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp1.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=nvidia.com 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 wioowgPUvdtf for ; Thu, 7 Apr 2022 09:16:27 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on20613.outbound.protection.outlook.com [IPv6:2a01:111:f400:7eab::613]) by smtp1.osuosl.org (Postfix) with ESMTPS id 60EC083F5D for ; Thu, 7 Apr 2022 09:16:27 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JlcHUov+TOnTH8XCSFYzomyMB114DkO5ODZ6f5GjB4OwSIC2UJyFuUEFNEWQ5tGZQHnUwsJzD0fiWWb8kmC8/6dk4yDu6WHidg/7f/5l4nG87vtTvGyYBSrbV0HDmBrmWwXy1mqEp6dc8/F0f7HBdypUntAFTqGwFcI9MRSP6+bj79raL77b8x1Uw2Z9NLifvQe+vhhvMkzHXHrsUiwvQoR74YNPF6M+GX6JZnG1TQWVT+mCjB7rit86tQfmyISC4wr7wfkkHoHB74sJr9DqzF+5SnFoZwEhx6XCBUES5uV0TEfxKrW64wr4fu7hgU8bh/jcjznNLSTG9os1KaGxyw== 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=k37CPyExGU0Vln0KhX2C82VlvphdrKWdv4EjcvaOdIU=; b=P36AjshQ/4Nt5kKlXlUZ8NwBQDCsr7KSMjVlFidfh2wFCMKYDBZ4srFsvhL7ifoHm5/WeczyQbumNwioeHNmECIrbgompCf3H9DDHAGhit3Ncg2qjFA8KWYZ9TUdvBaAUjRCFsUd/EUKM7GmJrkqk3Zu1j/mX0Zbq6hAKMMYj92I8BmTjjVQpQUaAOzy0RAvat+agUPFgSBnGaLBCFa/xTSVJqyMIsIvvo89ajET3nYYB802qqqwzpvwdn+xW2YQB1/eGghnkDphkK8rYWqIKUHoJWA/I4WFiOxEVcWbcVlla7R6KB2X5a6HCz4d7Mlj+pjgvuiXCXF2VuoRNbQ2iQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.236) smtp.rcpttodomain=corigine.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=k37CPyExGU0Vln0KhX2C82VlvphdrKWdv4EjcvaOdIU=; b=unVHanjwoBCnNyJUoqdkV2Vx9cLXXQ7AzeSfXGnQhFbOSkpLIGtgxhO8yXXfSVzx5RTuzts2vTJHNnBzkHtXiTGhp2MT5nDdXHDyYiE2NoKLeiczcRcQYMJYGWr2vfKoRCpFJ8L619IDRAFVSAQoRrgGZ4ZotLDX5ORZ5EZ6X1Gr6qiZTQww+UPHWMM/zdgDDaT0GZGsEbx9LdMH41C83lERh6cRa6uRodU+MPInVfwE2dLR7sXN+CvG7SQIsleT8gGGupY4vDNc3w9m9QPdtmZJwjH/VpoAkBkActc1j3bZz5eEQv21EMWjuH5D6wHEGduRjwDQ2EyoHsp/jBkxDA== Received: from BN9PR03CA0281.namprd03.prod.outlook.com (2603:10b6:408:f5::16) by DM5PR12MB1515.namprd12.prod.outlook.com (2603:10b6:4:6::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.22; Thu, 7 Apr 2022 09:16:25 +0000 Received: from BN8NAM11FT026.eop-nam11.prod.protection.outlook.com (2603:10b6:408:f5:cafe::44) by BN9PR03CA0281.outlook.office365.com (2603:10b6:408:f5::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.21 via Frontend Transport; Thu, 7 Apr 2022 09:16:24 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.236) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.236 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.236; helo=mail.nvidia.com; Received: from mail.nvidia.com (12.22.5.236) by BN8NAM11FT026.mail.protection.outlook.com (10.13.177.51) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5144.20 via Frontend Transport; Thu, 7 Apr 2022 09:16:24 +0000 Received: from rnnvmail205.nvidia.com (10.129.68.10) by DRHQMAIL109.nvidia.com (10.27.9.19) with Microsoft SMTP Server (TLS) id 15.0.1497.32; Thu, 7 Apr 2022 09:16:23 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail205.nvidia.com (10.129.68.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 7 Apr 2022 02:16:23 -0700 Received: from vdi.nvidia.com (10.127.8.14) by mail.nvidia.com (10.129.68.9) with Microsoft SMTP Server id 15.2.986.22 via Frontend Transport; Thu, 7 Apr 2022 02:16:21 -0700 To: , , , Date: Thu, 7 Apr 2022 09:16:02 +0000 Message-ID: <20220407091603.31995-8-jianbol@nvidia.com> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20220407091603.31995-1-jianbol@nvidia.com> References: <20220407091603.31995-1-jianbol@nvidia.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 82a437fd-631b-4535-ee95-08da187749d9 X-MS-TrafficTypeDiagnostic: DM5PR12MB1515:EE_ X-Microsoft-Antispam-PRVS: X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PsilLfidll9TRymUvD9Ng3BEbJ+s2Gkjd12JsaQygqT9QfrYUoyjFhDMzpASFGyhOERISyIdUMZvwFPXXC2s6x4lPtH2Tkh4PLr4xIKJHXwoGRFwun9722BjE8894gkt+Lqt0B1ZdMNVVq7fuEj6vA+jqewDwSRX9Ov/tcSpaUY+fM52YSO+3ltskiX6JJxI4V4f5PSQtJB2fFigVBXvWIyLpsU9pG/iKKoY8uotl0MOjLPXvSpH4YdjY8H+FotFMXG0Jzc5nOg9kHcCBEkbv/hUE1bONxDupm5+FJr/LphBUxs8rfL+m6rKcR3661LkWIPthMVe5xdExcP6mLrx7E13Q2+RB/OZqOz8zNfp6l9OKBxMw2mrJI6gP7S/U0j2oOCCjMaF+lOk2ltN7YSGgeLfgx+JWMWONHWQqSDh1fOFHUjHXb/b7p1ktLLfbpqr9CPAae7h2pJVyXkucDoRkCbI/+nFIvjT2GxCWmn9ouEJ33xMiBdI4Cr2RoSnqqo2tvam7frsneCGrUfg4bzBOTBPvtCSa8C5wgcB2UqAvy+Y3CnJlOrEOgDypJ1XtjP3YamZcq2dDGbpiImpGmT7tjIXBGUimR+XXYdWgIZLoQqd/0k+KYEqUaXsNMzooY6d79Pxj0uKR6JXbPkTl6LmB9X2pNMMdBaYzsqbbP8lhcpMTDgCiUMyzA4G5GCbfNG3ddaK4Ao6NoAStTgSClO8/g== X-Forefront-Antispam-Report: CIP:12.22.5.236; CTRY:US; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM; H:mail.nvidia.com; PTR:InfoNoRecords; CAT:NONE; SFS:(13230001)(4636009)(40470700004)(36840700001)(46966006)(186003)(36756003)(107886003)(508600001)(1076003)(82310400005)(8936002)(6666004)(5660300002)(26005)(2616005)(2906002)(47076005)(4326008)(8676002)(426003)(336012)(70206006)(7696005)(316002)(356005)(40460700003)(81166007)(36860700001)(70586007)(86362001)(110136005)(83380400001)(36900700001); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Apr 2022 09:16:24.3978 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 82a437fd-631b-4535-ee95-08da187749d9 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[12.22.5.236]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT026.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1515 Cc: Jianbo Liu Subject: [ovs-dev] [ovs-dev, v3, 7/8] netdev-offload-tc: Offloading rules with police actions 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: , X-Patchwork-Original-From: Jianbo Liu via dev From: Jianbo Liu Reply-To: Jianbo Liu Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When offloading rule, tc should be filled with police index, instead of meter id. As meter is mapped to police action, and the mapping is inserted into meter_id_to_police_idx hmap, this hmap is used to find the police index. Besides, an action cookie is added to save meter id on rule creation, so meter id can be retrieved from the cookie, and pass to dpif while dumping rules. Signed-off-by: Jianbo Liu --- lib/netdev-offload-tc.c | 16 +++++++++++++++- lib/tc.c | 25 ++++++++++++++++++++++++- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index d6ef5159c..afe566800 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -150,6 +150,8 @@ static struct netlink_field set_flower_map[][4] = { }, }; +static int meter_id_lookup(uint32_t meter_id, uint32_t *police_idx); + static struct ovs_mutex ufid_lock = OVS_MUTEX_INITIALIZER; /** @@ -1019,7 +1021,8 @@ parse_tc_flower_to_match(struct tc_flower *flower, } break; case TC_ACT_POLICE: { - /* Not supported yet */ + nl_msg_put_u32(buf, OVS_ACTION_ATTR_METER, + action->police.meter_id); } break; } @@ -1936,6 +1939,17 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, action->type = TC_ACT_GOTO; action->chain = 0; /* 0 is reserved and not used by recirc. */ flower.action_count++; + } else if (nl_attr_type(nla) == OVS_ACTION_ATTR_METER) { + uint32_t police_index; + + action->type = TC_ACT_POLICE; + action->police.meter_id = nl_attr_get_u32(nla); + if (meter_id_lookup(action->police.meter_id, &police_index)) { + return EOPNOTSUPP; + } + + action->police.index = police_index; + flower.action_count++; } else { VLOG_DBG_RL(&rl, "unsupported put action type: %d", nl_attr_type(nla)); diff --git a/lib/tc.c b/lib/tc.c index 16d4ae3da..ecdcb676d 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -2421,6 +2421,22 @@ nl_msg_put_act_gact(struct ofpbuf *request, uint32_t chain) nl_msg_end_nested(request, offset); } +static void +nl_msg_put_act_police_index(struct ofpbuf *request, uint32_t police_idx) +{ + struct tc_police police; + size_t offset; + + memset(&police, 0, sizeof police); + police.index = police_idx; + + nl_msg_put_string(request, TCA_ACT_KIND, "police"); + offset = nl_msg_start_nested(request, TCA_ACT_OPTIONS); + nl_msg_put_unspec(request, TCA_POLICE_TBF, &police, sizeof police); + nl_msg_put_u32(request, TCA_POLICE_RESULT, TC_ACT_PIPE); + nl_msg_end_nested(request, offset); +} + static void nl_msg_put_act_ct(struct ofpbuf *request, struct tc_action *action) { @@ -2911,7 +2927,14 @@ nl_msg_put_flower_acts(struct ofpbuf *request, struct tc_flower *flower) } break; case TC_ACT_POLICE: { - /* Not supported yet */ + struct tc_cookie act_cookie; + + act_offset = nl_msg_start_nested(request, act_index++); + nl_msg_put_act_police_index(request, action->police.index); + act_cookie.data = &action->police.meter_id; + act_cookie.len = sizeof(action->police.meter_id); + nl_msg_put_act_cookie(request, &act_cookie); + nl_msg_end_nested(request, act_offset); } break; }