From patchwork Tue Mar 26 11:55:24 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xavier Simonart X-Patchwork-Id: 1916078 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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=gI0stC2r; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4V3pCd3YyCz1yY2 for ; Tue, 26 Mar 2024 22:55:41 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 3BB26414C5; Tue, 26 Mar 2024 11:55:36 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id eLR3vNzmzSgJ; Tue, 26 Mar 2024 11:55:33 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 2DF2D40359 Authentication-Results: smtp2.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=gI0stC2r Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 2DF2D40359; Tue, 26 Mar 2024 11:55:33 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id F1B09C0DCF; Tue, 26 Mar 2024 11:55:32 +0000 (UTC) X-Original-To: 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 490E5C0037 for ; Tue, 26 Mar 2024 11:55:30 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2B98981E47 for ; Tue, 26 Mar 2024 11:55:30 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id W8yTsv1zQl6r for ; Tue, 26 Mar 2024 11:55:29 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=170.10.133.124; helo=us-smtp-delivery-124.mimecast.com; envelope-from=xsimonar@redhat.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp1.osuosl.org 37E8981CA5 Authentication-Results: smtp1.osuosl.org; dmarc=pass (p=none dis=none) header.from=redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 37E8981CA5 Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=gI0stC2r Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by smtp1.osuosl.org (Postfix) with ESMTPS id 37E8981CA5 for ; Tue, 26 Mar 2024 11:55:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1711454127; 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: in-reply-to:in-reply-to:references:references; bh=rrS3ZvVBK+1lita9qCADfIU+SqoHvSyJ88jFQqIcLRk=; b=gI0stC2rk0REczfYQs6HRD3WdMndhhOuGsWlsI7P4KuFcYa3oH21LATIgAKJ/qQGiX9vDt fVWzziw344Ivt2rW1RNcie48nXImyBsd7o1Rfao6G1A/oPHzzBI7fjCj6qE3td04gS/5un hCMEZgZrTZf61SHUFYVRkJTk5uzGsUg= Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-394-P1UNxU1SMfGNSxmNZ_pygg-1; Tue, 26 Mar 2024 07:55:26 -0400 X-MC-Unique: P1UNxU1SMfGNSxmNZ_pygg-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3532D89C56D for ; Tue, 26 Mar 2024 11:55:26 +0000 (UTC) Received: from wsfd-netdev90.ntdv.lab.eng.bos.redhat.com (wsfd-netdev90.anl.eng.rdu2.dc.redhat.com [10.6.38.135]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2B1A8C04123; Tue, 26 Mar 2024 11:55:26 +0000 (UTC) From: Xavier Simonart To: xsimonar@redhat.com, dev@openvswitch.org Date: Tue, 26 Mar 2024 12:55:24 +0100 Message-Id: <20240326115525.3433113-2-xsimonar@redhat.com> In-Reply-To: <20240326115525.3433113-1-xsimonar@redhat.com> References: <20240320071226.2754893-1-xsimonar@redhat.com> <20240326115525.3433113-1-xsimonar@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Subject: [ovs-dev] [PATCH ovn v2 2/3] pinctrl: Fix missing MAC_Bindings. 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" Pinctrl is responsible of creating MAC_Bindings on peer router datapaths. However, when sb was read-only, this did not happen. This caused the test "neighbor update on same HV" to fail in a flaky way. Signed-off-by: Xavier Simonart Acked-by: Ales Musil --- v2: - Fix userspace tests - Replace iptables by nftables based on Ales's feedback. - Move stop/restart_ovsdb_controller_updates to ovn-macros. - Rebase on origin/main. --- controller/pinctrl.c | 2 +- tests/system-ovn.at | 114 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 115 insertions(+), 1 deletion(-) diff --git a/controller/pinctrl.c b/controller/pinctrl.c index 2d3595cd2..f75b04696 100644 --- a/controller/pinctrl.c +++ b/controller/pinctrl.c @@ -4711,7 +4711,7 @@ send_garp_rarp_update(struct ovsdb_idl_txn *ovnsb_idl_txn, garp_rarp->announce_time = time_msec() + 1000; garp_rarp->backoff = 1000; /* msec. */ } - } else { + } else if (ovnsb_idl_txn) { add_garp_rarp(name, laddrs->ea, laddrs->ipv4_addrs[i].addr, binding_rec->datapath->tunnel_key, diff --git a/tests/system-ovn.at b/tests/system-ovn.at index 54d913c0b..26bb331b6 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -12208,3 +12208,117 @@ OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d /connection dropped.*/d"]) AT_CLEANUP ]) + +OVN_FOR_EACH_NORTHD([ +AT_SETUP([MAC_Bindings updates on read-only sb]) +ovn_start --use-tcp-to-sb +OVS_TRAFFIC_VSWITCHD_START() +ADD_BR([br-int]) + +PARSE_LISTENING_PORT([$ovs_base/ovn-sb/ovsdb-server.log], [TCP_PORT]) + +# Use tcp to connect to sb +ovs-vsctl \ + -- set Open_vSwitch . external-ids:system-id=hv1 \ + -- set Open_vSwitch . external-ids:ovn-remote=tcp:127.0.0.1:$TCP_PORT \ + -- set Open_vSwitch . external-ids:ovn-encap-type=geneve \ + -- set Open_vSwitch . external-ids:ovn-encap-ip=169.0.0.1 \ + -- set bridge br-int fail-mode=secure other-config:disable-in-band=true + +# Start ovn-controller +start_daemon ovn-controller + +# Logical network: +# A public switch (pub) with a localnet port connected to two LRs (lr0 and lr1) +# each with a distributed gateway port. +# Two VMs: lp0 on sw0 connected to lr0 +# lp1 on sw1 connected to lr1 +# +# This test adds a floating IP on one VM and checks the MAC_Binding entries to be updated properly. + +# Create logical switches +check ovn-nbctl ls-add sw0 +check ovn-nbctl ls-add sw1 +check ovn-nbctl ls-add pub + +# Created localnet port on public switch +check ovn-nbctl lsp-add pub ln-pub +check ovn-nbctl lsp-set-type ln-pub localnet +check ovn-nbctl lsp-set-addresses ln-pub unknown +check ovn-nbctl lsp-set-options ln-pub network_name=phys + +# Create logical routers and connect them to public switch +AT_CHECK([(ovn-nbctl create Logical_Router name=lr0; + ovn-nbctl create Logical_Router name=lr1) | uuidfilt], [0], [<0> +<1> +]) +check ovn-nbctl lrp-add lr0 lr0-pub f0:00:00:00:00:01 172.24.4.220/24 +check ovn-nbctl lsp-add pub pub-lr0 -- set Logical_Switch_Port pub-lr0 \ + type=router options:router-port=lr0-pub options:nat-addresses="router" addresses="router" +check ovn-nbctl lrp-add lr1 lr1-pub f0:00:00:00:01:01 172.24.4.221/24 +check ovn-nbctl lsp-add pub pub-lr1 -- set Logical_Switch_Port pub-lr1 \ + type=router options:router-port=lr1-pub options:nat-addresses="router" addresses="router" + +check ovn-nbctl lrp-set-gateway-chassis lr0-pub hv1 10 +check ovn-nbctl lrp-set-gateway-chassis lr1-pub hv1 10 + +# Connect sw0 and sw1 to lr0 and lr1 +check ovn-nbctl lrp-add lr0 lr0-sw0 00:00:00:00:ff:01 10.0.0.254/24 +check ovn-nbctl lsp-add sw0 sw0-lr0 -- set Logical_Switch_Port sw0-lr0 type=router \ + options:router-port=lr0-sw0 addresses="router" +check ovn-nbctl lrp-add lr1 lr1-sw1 00:00:00:00:ff:02 20.0.0.254/24 +check ovn-nbctl lsp-add sw1 sw1-lr1 -- set Logical_Switch_Port sw1-lr1 type=router \ + options:router-port=lr1-sw1 addresses="router" + +ADD_BR([br-phys]) +check ovs-vsctl set open . external-ids:ovn-bridge-mappings=phys:br-phys + +check ovs-vsctl add-port br-int vif0 \ + -- set Interface vif0 external-ids:iface-id=lp0 \ + -- set Interface vif0 type=internal + +check ovn-nbctl lsp-add sw0 lp0 +check ovn-nbctl lsp-add sw1 lp1 +check ovn-nbctl lsp-set-addresses lp0 "50:54:00:00:00:01 10.0.0.10" +check ovn-nbctl lsp-set-addresses lp1 "50:54:00:00:00:02 20.0.0.10" + +OVS_WAIT_UNTIL([test x`ovn-nbctl lsp-get-up lp0` = xup]) +ovn-nbctl --wait=hv sync + +# Stopping updates to sb +# By stopping temporarily updates from controller to sb, we are making sb read-only. +# We can't just pause sb to make it read-only, as we expect sb to still handle northd changes. +stop_ovsdb_controller_updates $TCP_PORT + +# Adding lp1 : this will make sb read-only +check ovs-vsctl add-port br-int vif1 \ + -- set Interface vif1 external-ids:iface-id=lp1 \ + -- set Interface vif1 type=internal + +# Make sure ovn-controller handled vif1 addition. So, at this point ovn-controller did try to update sb +OVS_WAIT_UNTIL([test x`ovs-vsctl get Interface vif1 external_ids:ovn-installed` = x'"true"']) + +# Create floating IP. SB should be read-only, so we should be enable to update MAC_Bindings now. +check ovn-nbctl --wait=sb lr-nat-add lr0 dnat_and_snat 172.24.4.100 10.0.0.10 + +# Restarting updates. +restart_ovsdb_controller_updates $TCP_PORT +# Check that the MAC_Binding entries have been properly created as SB is now writable. +wait_row_count MAC_Binding 1 logical_port=lr1-pub ip=172.24.4.100 + +OVS_APP_EXIT_AND_WAIT([ovn-controller]) + +as ovn-sb +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) + +as ovn-nb +OVS_APP_EXIT_AND_WAIT([ovsdb-server]) + +as northd +OVS_APP_EXIT_AND_WAIT([ovn-northd]) + +as +OVS_TRAFFIC_VSWITCHD_STOP(["/failed to query port patch-.*/d +/connection dropped.*/d"]) +AT_CLEANUP +])