From patchwork Sun Oct 23 04:58:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: miter X-Patchwork-Id: 1693466 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::136; helo=smtp3.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256 header.s=selector1 header.b=mrbm3IJE; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (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 4Mw5br5MMsz20S2 for ; Sun, 23 Oct 2022 15:59:52 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 4DAE060BD3; Sun, 23 Oct 2022 04:59:50 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 4DAE060BD3 Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256 header.s=selector1 header.b=mrbm3IJE 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 GVc-H0pI-bDN; Sun, 23 Oct 2022 04:59:49 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 549E260BC4; Sun, 23 Oct 2022 04:59:48 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 549E260BC4 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2D261C002D; Sun, 23 Oct 2022 04:59:48 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 590AFC0033 for ; Sun, 23 Oct 2022 04:59:47 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 1F23481BB2 for ; Sun, 23 Oct 2022 04:59:47 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 1F23481BB2 Authentication-Results: smtp1.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=outlook.com header.i=@outlook.com header.a=rsa-sha256 header.s=selector1 header.b=mrbm3IJE 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 Jvu6r3m_XFwP for ; Sun, 23 Oct 2022 04:59:46 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 30F4981BA8 Received: from AUS01-SY4-obe.outbound.protection.outlook.com (mail-sy4aus01olkn2141.outbound.protection.outlook.com [40.92.62.141]) by smtp1.osuosl.org (Postfix) with ESMTPS id 30F4981BA8 for ; Sun, 23 Oct 2022 04:59:46 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UoIKchHGPX0R7qSJ8t4wgyUd3Scefe2FSjBiUJw/ZRepohQ6OOESrWHtVhHu+FgpXNz2QvnHoKJtMeFxVdzS0TE641UrPzIbnc6OxCu4riH18YJo2VcT/hNxLLcA2a1rNmZNawvEbjlGxWmhhfKMvAiAqnw3B1MoqF91Rq/6YNjH31M1bf+dxwV+0lUo3z60z4vnaD68gcs2vALJkKXSqbbkLi46Q4E0Q0vKad/Ht3tNAO9BG9Uccmf+8sg3Zg8xiEb8vNmNpVhvg2BO9f3FufON0XJrDzwvdITzfWNWfyum8AiSTR6OMHYhuRPxs5dkCywPKZSxpo9X0//dx034kg== 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=zgcb9jM0xAUQbfQuF5LH846GoKqc0H33tr1OCIhsk1E=; b=bic+wuTsQYZzMdpImdD1lG9RRONWC3bx0jLMPVK5uhEKF5kJliwD2PeVeamp4umJDZa8nhgqCQWTSRw13zoqjPvIQfhquN53D7gFHKRtHmYLMDDAvTD6BcZe63Q87jPT15XULhT/Xa1lqGo9Z/Mrv+b3LCwBxyOQIvNYaBFNtUav0sgbBub8x8wnDpnZm6/B5lwnMUJtHhr/hwb2nhFhF8E7e8zkLAHVlCdo3WANTU+U7brXdW06t+Gp02Yua4xz0tKAXeEHK9H7LfIOyG42vofjktTAw3F4sjfv/B/tt3njowW2mTDZIytPpLH2j1CFmsNWPaDxj4YT/StkmTOHlw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=zgcb9jM0xAUQbfQuF5LH846GoKqc0H33tr1OCIhsk1E=; b=mrbm3IJEs0Z4KoFmBVoxX+0QMn4wLAwJesM5kmnvfzdjqCr0YHd5p9R6KCl3jFSu6fq5eZu+cJWBrAZMeZKw9wvHvH3h0mtWB3Z61z4szAqUEkU4P5KVpyvtakGuFHsQOdjsak8JzKnk7RW5UGc4JtoQeMhtsJqwLh/ENAcZsCAHMMc/mIUHuvK8CFf+IOw2e3Zh1g1nR07zuGqrWBfiug3CMWlfK+MVWjuwrcLovs+IBZBTO8DmZCeiwk1Uc3ac1JgXX4zrBIMRCWgKnNkjEoAnGvhYygh6HU4EJbBd8I2F8T0T4kfrOTR4W5udDyjyWZxNCzv1Mjy/4b8xAAHOoA== Received: from SY4PR01MB8438.ausprd01.prod.outlook.com (2603:10c6:10:19e::10) by SY4PR01MB8534.ausprd01.prod.outlook.com (2603:10c6:10:1cf::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5746.21; Sun, 23 Oct 2022 04:59:40 +0000 Received: from SY4PR01MB8438.ausprd01.prod.outlook.com ([fe80::9d94:5d2f:f213:8e5a]) by SY4PR01MB8438.ausprd01.prod.outlook.com ([fe80::9d94:5d2f:f213:8e5a%6]) with mapi id 15.20.5746.021; Sun, 23 Oct 2022 04:59:40 +0000 From: miterv@outlook.com To: ovs-dev@openvswitch.org, echaudro@redhat.com, i.maximets@ovn.org Date: Sun, 23 Oct 2022 12:58:55 +0800 Message-ID: X-Mailer: git-send-email 2.37.1.windows.1 In-Reply-To: <20221023045855.2191-1-miterv@outlook.com> References: <20221023045855.2191-1-miterv@outlook.com> X-TMN: [1uZRcRo2v3llVIygjUw3BiztYnvaH7TBT9jyzSODdu8BJoNZkIQsUsHkLHOzQAEi] X-ClientProxiedBy: TYAPR01CA0171.jpnprd01.prod.outlook.com (2603:1096:404:ba::15) To SY4PR01MB8438.ausprd01.prod.outlook.com (2603:10c6:10:19e::10) X-Microsoft-Original-Message-ID: <20221023045855.2191-2-miterv@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SY4PR01MB8438:EE_|SY4PR01MB8534:EE_ X-MS-Office365-Filtering-Correlation-Id: f690e41d-a0cb-42a9-062c-08dab4b36431 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 5v938eFjPNztlMLwnwYQxXIhcn5NeRUzcsy7dPrne+nBYzCnxMyYyHIJqohzH/qt1IkgJ7u6OGCF55AWGw4lYtjG8oDOudGakVRkmu8YLcbY10r1Z5qct+YMK2mcMByGXPUKkRgosb0sSz5aCJAXA6gF0y0u07IEB83+KE/5s1g8lNOaWHZCo1Ft+NAZKNS7u4XAfJ4EngnOp0xnbUZZ8AVWeIOAvP3Nn120EH+aNdmnLiqI+ah2cJeIPiBBGv/Z6kNYVc5A0eh7BIETu5C/fqqobHxSNvOm02+pmhOcISNldWwPmPwDa/qYT4xYSkmj0i5IDtLYn4KGcg78jlhTji19bX4pwSnK2tijRJVnjSC0XxkfaaUNzUtaTqhpIlBgXCEy2C+LYpHQr2PfXpAAcdecTSN1Y+zr4/ZSKxqZtuk8UH90KBzyi0upV6CvpFYn3vy2LbfilQMd2DM5BiBIKxZVvrWjEPvT6f3r+8Ry6HnKtMsIWkzDmM42gA3iur1fmlCLveOre4I/Kj3Qq0qyWNyBa3mYF1umAsrJeRwlEnjJk50UCrf7LGjvHBQgKRNwWKoLhKn03w+dt6FvRHVI1qEx5RFxvlu4gGxa0vJMjqg+DUrAn2bV1aZZGEXXblmjebrA2Q1EAC1I1P3SNfJM9Q== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: cY/ciFMl5LNzXPlc5n3ejzDLlFDceTDf+jZQAKinINzFQX8A5r6AZ4IeoGm1UZdT9NRN/jounq6y1HlnOWw2ID/daLMh4Zir5+JGftxaKUVYZeApy/n3fuABo3+PSeAzMaXMAgynKgxesVh3YGoLmHXdqaLYwKppxNzyBdK62htlvF2XNoslrWjgX4WHtDdqT6IQTQ/XJb4i9yDZARPW+r6gq/ERKhjl/u4wPy1EiE0yFOQhoN/mr1E/v32sEEui8cLqYl8Y6e8Y9CZJ2ZPMRGDiFdbyQEMUL0doZ/rhwOqD9JcI9reqIOsRasnX5dtgPbubStSaMigC890eG+8j//L52mndk+rR1YAw4dgGbQRaTCxZFSciQT7CqlAC5LfKzRzosn5iSZ4qmDWeq2w5eYisZMTK4Y5e5gAKsO6KKcjueEmiHE2/Wn2VB6rbLkcOH/PrW/T6OmWrJGgFW/GIpGeKabYhn611JqoaR6ffPn0CBHhgsuh8LbPWr5WPQK1/Swmhf0+Uz+oAz/3DoVu2LW7JtuAyLPJK2YjNuflCiLlxEgE8HYNzWeiE+LUeMNI9M6UNlErwrTbwFFIrwDfvQFwPmIZwBlMEhPR2H64B3XUZ3KFqPPUe55OcNKEQ7WipTiAMzHpjXIzBJYjfOt7JdOCp6tUL3i+Sr8SD0V8ASxjAnmLYQ+DRFDJuAiHH2wDlmH/ZzDTjbNbksuJTRz+lLxQPTpItlJnQZsoIgTZKuWARKCTjskto1KVhocOmNJigUTMKIe/OfnF5MY44be9Ycgzc7Co3UwP4F+w3nOs6uJjoowcDFfpKTl4Dz+je/A8ciOY0ICiQciJx62i3KSn5Q6JRTkeF06zKyHpBqIay4oLhmplVpKfyvVsBOWwB5V3MBhObJXd3WPWTSZI24lh911KyDP4nrUlEDivze/cEjCR1GcdRgE5CZ4+1b1TcInEKYvesOl6LvIfPGt+vccTFf6lGTodQ8mVVu8ccZagKT2rpQVaKkfTyMHbSzgMoBa3AZmRaryVgWUWX/ZNwC3Drga8ZpeZ6I8JDY11ovzNc8QVvcBak6OfTXo1ew++RNfex9zVUtxjkGJR40xCFjAYMPV4G0uexvwWPjpBBAjeZ3zr+x4WG1AFgMq7Y9nnBKU7fpwjqIc1vhQdQzwsUC8YRMdv+TrSj+FUHSzyTAEERvXb3JpUj8P8kpn9lP8JOy9kAmIMV4DNfCiiPfvIFNkK0TdQ8n44+RODDhqvg70JNCBy6OpRkQtyo9Fp2yrKxb6vBU/T7KGDM3KYZIVDzII+5Tf1/lP7DzTTOI5ee2rJfUMhDrsH+0bBPUes1zcf7E4wRX2t+FfwPhDIG4jMGw87DJg== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f690e41d-a0cb-42a9-062c-08dab4b36431 X-MS-Exchange-CrossTenant-AuthSource: SY4PR01MB8438.ausprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Oct 2022 04:59:40.2238 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SY4PR01MB8534 Cc: Lin Huang , Zhang Yuhuang Subject: [ovs-dev] [PATCH v2 1/1] mac-learning: Fix learned fdb entries not age out issue. 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: Lin Huang After user add a static fdb entry, the get_lru() function will always return the static fdb entry. That's normal fdb entries will not age out through mac_learning_run(). Fix the issue by modify the get_lru() function to check the entry->expires field and not return the entry which entry->expires is MAC_ENTRY_AGE_STATIC_ENTRY. Adding a unit test for this. Fixes: ccc24fc88d59 ("ofproto-dpif: APIs and CLI option to add/delete static fdb entry.") Tested-by: Zhang Yuhuang Signed-off-by: Lin Huang Acked-by: Eelco Chaudron --- lib/mac-learning.c | 37 ++++++++++++++----------------------- tests/ofproto-dpif.at | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 23 deletions(-) diff --git a/lib/mac-learning.c b/lib/mac-learning.c index a60794fb2..5932e2709 100644 --- a/lib/mac-learning.c +++ b/lib/mac-learning.c @@ -176,12 +176,18 @@ get_lru(struct mac_learning *ml, struct mac_entry **e) OVS_REQ_RDLOCK(ml->rwlock) { if (!ovs_list_is_empty(&ml->lrus)) { - *e = mac_entry_from_lru_node(ml->lrus.next); - return true; - } else { - *e = NULL; - return false; + struct mac_entry *entry; + + LIST_FOR_EACH (entry, lru_node, &ml->lrus) { + if (entry->expires != MAC_ENTRY_AGE_STATIC_ENTRY) { + *e = entry; + return true; + } + } } + + *e = NULL; + return false; } static unsigned int @@ -618,25 +624,10 @@ mac_learning_expire(struct mac_learning *ml, struct mac_entry *e) void mac_learning_flush(struct mac_learning *ml) { - struct mac_entry *e, *first_static_mac = NULL; - - while (get_lru(ml, &e) && (e != first_static_mac)) { - - /* Static mac should not be evicted. */ - if (MAC_ENTRY_AGE_STATIC_ENTRY == e->expires) { - - /* Make note of first static-mac encountered, so that this while - * loop will break on visting this mac again via get_lru(). */ - if (!first_static_mac) { - first_static_mac = e; - } + struct mac_entry *e; - /* Remove from lru head and append it to tail. */ - ovs_list_remove(&e->lru_node); - ovs_list_push_back(&ml->lrus, &e->lru_node); - } else { - mac_learning_expire(ml, e); - } + while (get_lru(ml, &e)) { + mac_learning_expire(ml, e); } hmap_shrink(&ml->table); } diff --git a/tests/ofproto-dpif.at b/tests/ofproto-dpif.at index 8e993c585..eb4cd1896 100644 --- a/tests/ofproto-dpif.at +++ b/tests/ofproto-dpif.at @@ -7287,6 +7287,29 @@ AT_CHECK([ovs-appctl coverage/read-counter mac_learning_static_none_move], [0], OVS_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([ofproto-dpif - static-mac learned mac age out]) +OVS_VSWITCHD_START([set bridge br0 fail-mode=standalone -- set bridge br0 other_config:mac-aging-time=5]) +add_of_ports br0 1 2 + +dnl Add some static mac entries. +AT_CHECK([ovs-appctl fdb/add br0 p1 0 50:54:00:00:01:01]) +AT_CHECK([ovs-appctl fdb/add br0 p2 0 50:54:00:00:02:02]) + +dnl Generate some dynamic fdb entries on some ports. +OFPROTO_TRACE([ovs-dummy], [in_port(1),eth(src=60:54:00:00:00:01)], [-generate], [100,2]) +OFPROTO_TRACE([ovs-dummy], [in_port(2),eth(src=60:54:00:00:00:02)], [-generate], [100,1]) + +dnl Waiting for aging out. +ovs-appctl time/warp 20000 + +dnl Count number of static entries remaining. +AT_CHECK_UNQUOTED([ovs-appctl fdb/stats-show br0 | grep expired], [0], [dnl + Total number of expired MAC entries : 2 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([ofproto-dpif - basic truncate action]) OVS_VSWITCHD_START add_of_ports br0 1 2 3 4 5