From patchwork Tue Dec 6 15:21:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ales Musil X-Patchwork-Id: 1712865 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" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ASGI1apy; 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 4NRPK75JcLz23p3 for ; Wed, 7 Dec 2022 02:21:47 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id E74BB6101D; Tue, 6 Dec 2022 15:21:45 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org E74BB6101D Authentication-Results: smtp3.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=ASGI1apy 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 jlH0Fulfaa4v; Tue, 6 Dec 2022 15:21:45 +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 157E060E02; Tue, 6 Dec 2022 15:21:44 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 157E060E02 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id D0682C0032; Tue, 6 Dec 2022 15:21:43 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2AEEDC002D for ; Tue, 6 Dec 2022 15:21:42 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id E732760F86 for ; Tue, 6 Dec 2022 15:21:41 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org E732760F86 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 nTm4YRx2xZg0 for ; Tue, 6 Dec 2022 15:21:41 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org B8B0760E02 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by smtp3.osuosl.org (Postfix) with ESMTPS id B8B0760E02 for ; Tue, 6 Dec 2022 15:21:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1670340099; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=KTBpW51J6WtWtzWj8S728ewcL/p8nxaHvzKgLjTAaBU=; b=ASGI1apyMu625Uy8+KwizYdC9Rqk7zK+AIKrCdn8CKuMc8oIN6EbP6NIKMrLlLGCEwBYjC c58PwiX3ZDI8JoyrgJcXIgyBJyxty4guzUC0d+q72K8/pFxdbEq8xsyba5iApax6sodOdi GkemRMOBcSxlYM6DEO2J1XgCB4jUDBM= Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-583-LQPul_s6NqO6FaAgix47Fg-1; Tue, 06 Dec 2022 10:21:38 -0500 X-MC-Unique: LQPul_s6NqO6FaAgix47Fg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id D838F3817A6B; Tue, 6 Dec 2022 15:21:37 +0000 (UTC) Received: from amusil.redhat.com (ovpn-192-130.brq.redhat.com [10.40.192.130]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0F8922166B26; Tue, 6 Dec 2022 15:21:36 +0000 (UTC) From: Ales Musil To: dev@openvswitch.org Date: Tue, 6 Dec 2022 16:21:36 +0100 Message-Id: <20221206152136.6531-1-amusil@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.6 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: dceara@redhat.com Subject: [ovs-dev] [PATCH ovn v3] controller: Check if MAC binding table has timestamp column 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" In order to keep backward compatibility with northd we need to check if MAC binding table actually has the timestamp column. Reported-at: https://bugzilla.redhat.com/2151066 Signed-off-by: Ales Musil Acked-by: Numan Siddique --- v2: Address comments from Dumitru. v3: Address comments from Dumitru. --- controller/ovn-controller.c | 1 + controller/pinctrl.c | 38 ++++++++++++++++++++++++++++++------- controller/pinctrl.h | 4 +++- 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/controller/ovn-controller.c b/controller/ovn-controller.c index d6251afb8..f0fd24820 100644 --- a/controller/ovn-controller.c +++ b/controller/ovn-controller.c @@ -4615,6 +4615,7 @@ main(int argc, char *argv[]) } stopwatch_start(PINCTRL_RUN_STOPWATCH_NAME, time_msec()); + pinctrl_update(ovnsb_idl_loop.idl, br_int->name); pinctrl_run(ovnsb_idl_txn, sbrec_datapath_binding_by_key, sbrec_port_binding_by_datapath, diff --git a/controller/pinctrl.c b/controller/pinctrl.c index f44775c7e..82da6ae73 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -173,6 +173,7 @@ struct pinctrl { pthread_t pinctrl_thread; /* Latch to destroy the 'pinctrl_thread' */ struct latch pinctrl_thread_exit; + bool mac_binding_can_timestamp; }; static struct pinctrl pinctrl; @@ -544,6 +545,7 @@ pinctrl_init(void) bfd_monitor_init(); init_fdb_entries(); pinctrl.br_int_name = NULL; + pinctrl.mac_binding_can_timestamp = false; pinctrl_handler_seq = seq_create(); pinctrl_main_seq = seq_create(); @@ -3519,7 +3521,7 @@ pinctrl_handler(void *arg_) } static void -pinctrl_set_br_int_name_(char *br_int_name) +pinctrl_set_br_int_name_(const char *br_int_name) OVS_REQUIRES(pinctrl_mutex) { if (br_int_name && (!pinctrl.br_int_name || strcmp(pinctrl.br_int_name, @@ -3533,13 +3535,31 @@ pinctrl_set_br_int_name_(char *br_int_name) } void -pinctrl_set_br_int_name(char *br_int_name) +pinctrl_set_br_int_name(const char *br_int_name) { ovs_mutex_lock(&pinctrl_mutex); pinctrl_set_br_int_name_(br_int_name); ovs_mutex_unlock(&pinctrl_mutex); } +void +pinctrl_update(const struct ovsdb_idl *idl, const char *br_int_name) +{ + ovs_mutex_lock(&pinctrl_mutex); + pinctrl_set_br_int_name_(br_int_name); + + bool can_timestamp = sbrec_server_has_mac_binding_table_col_timestamp(idl); + if (can_timestamp != pinctrl.mac_binding_can_timestamp) { + pinctrl.mac_binding_can_timestamp = can_timestamp; + + /* Notify pinctrl_handler that mac binding timestamp column + * availability has changed. */ + notify_pinctrl_handler(); + } + + ovs_mutex_unlock(&pinctrl_mutex); +} + /* Called by ovn-controller. */ void pinctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn, @@ -3563,7 +3583,6 @@ pinctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn, const struct shash *local_active_ports_ras) { ovs_mutex_lock(&pinctrl_mutex); - pinctrl_set_br_int_name_(br_int->name); run_put_mac_bindings(ovnsb_idl_txn, sbrec_datapath_binding_by_key, sbrec_port_binding_by_key, sbrec_mac_binding_by_lport_ip); @@ -4245,12 +4264,17 @@ mac_binding_add_to_sb(struct ovsdb_idl_txn *ovnsb_idl_txn, b = sbrec_mac_binding_insert(ovnsb_idl_txn); sbrec_mac_binding_set_logical_port(b, logical_port); sbrec_mac_binding_set_ip(b, ip); - sbrec_mac_binding_set_mac(b, mac_string); sbrec_mac_binding_set_datapath(b, dp); - sbrec_mac_binding_set_timestamp(b, time_wall_msec()); - } else if (strcmp(b->mac, mac_string)) { + } + + if (strcmp(b->mac, mac_string)) { sbrec_mac_binding_set_mac(b, mac_string); - sbrec_mac_binding_set_timestamp(b, time_wall_msec()); + + /* For backward compatibility check if timestamp column is available + * in SB DB. */ + if (pinctrl.mac_binding_can_timestamp) { + sbrec_mac_binding_set_timestamp(b, time_wall_msec()); + } } } diff --git a/controller/pinctrl.h b/controller/pinctrl.h index d4f52e94d..cfece04da 100644 --- a/controller/pinctrl.h +++ b/controller/pinctrl.h @@ -26,6 +26,7 @@ struct hmap; struct shash; struct lport_index; +struct ovsdb_idl; struct ovsdb_idl_index; struct ovsdb_idl_txn; struct ovsrec_bridge; @@ -57,7 +58,8 @@ void pinctrl_run(struct ovsdb_idl_txn *ovnsb_idl_txn, const struct shash *local_active_ports_ras); void pinctrl_wait(struct ovsdb_idl_txn *ovnsb_idl_txn); void pinctrl_destroy(void); -void pinctrl_set_br_int_name(char *br_int_name); +void pinctrl_set_br_int_name(const char *br_int_name); +void pinctrl_update(const struct ovsdb_idl *idl, const char *br_int_name); struct activated_port { uint32_t dp_key;