From patchwork Thu Sep 24 13:06:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Bianconi X-Patchwork-Id: 1370669 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.136; helo=silver.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: 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=aQpfMa3b; dkim-atps=neutral Received: from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4BxwLV0q4gz9sS8 for ; Thu, 24 Sep 2020 23:07:13 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by silver.osuosl.org (Postfix) with ESMTP id 435162E11A; Thu, 24 Sep 2020 13:07:12 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from silver.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wGk4V2FI1KcE; Thu, 24 Sep 2020 13:07:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by silver.osuosl.org (Postfix) with ESMTP id 651352040B; Thu, 24 Sep 2020 13:07:08 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5A3F7C0889; Thu, 24 Sep 2020 13:07:08 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4F9A2C0051 for ; Thu, 24 Sep 2020 13:07:07 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 3EE4E86FED for ; Thu, 24 Sep 2020 13:07:07 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id WLYB4puG5j2m for ; Thu, 24 Sep 2020 13:07:06 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by hemlock.osuosl.org (Postfix) with ESMTPS id 2A332874E1 for ; Thu, 24 Sep 2020 13:07:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1600952824; 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=n/XXjdotPafd7yAK9KCD3bC1Vn/eLHfdqpcqaQTj2+w=; b=aQpfMa3bASlw1RcnCNgoOJvjd49Y9wi1NBPVgh96XqDMLsaa+EUX197ji85y69EfH1h4/Z zwF+3aMRPeNgp08ubaiuyA0ZrgNDIGECuJRSkzdxQfxMRfW8cakf0wvBhP64xuYNv2p3IG T5x4Tqg3HoRZdq7xDfIFeDityAxa1+M= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-515-2zQjEK_HNtqWK9bG2sU91Q-1; Thu, 24 Sep 2020 09:07:03 -0400 X-MC-Unique: 2zQjEK_HNtqWK9bG2sU91Q-1 Received: by mail-wr1-f69.google.com with SMTP id y3so1199497wrl.21 for ; Thu, 24 Sep 2020 06:07:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=n/XXjdotPafd7yAK9KCD3bC1Vn/eLHfdqpcqaQTj2+w=; b=XTK6mlEeMxyXTrguxrJv7SUTB3WkCcJAe5mdA5sqTHhJPNV/Zooo/OS3iqePQUKn/B w6cRn4eso9e9jI+CG3ZHKlnF3jhCl4GQGLnJibC6Okhc/rygApMC/udk9og90s4TUo+V HroP3oRxv3/qaImRKu5ONtNfn+y4rlOQufGFyCu+AdRlcNyiWv5tGvoh1bB6ykRnHTh1 cQrSXx5MgI3z5yGBVbClliNnB3LOkAyPrY12caVWk4xSYmiux48iiN3iXy34foMDqt/u R7h93cvk3qQRNus4ukmEKu+G2qzVFFUh0rG13GjnxMty0a6DwCtgBE3D0QAz9pnNJEeh GpOA== X-Gm-Message-State: AOAM530+sGai1U/ucdT9ldCYj+xakGt2Hwrg48gHj9na2mOtnaA80xoF 0GViXNjgRTXyPlu0M6VQHkDhkfF5uIBo01R3rei0fCA9MotcItNtPpdD7hZW3mMOua3IaiFGQYq kR28IoBN6BHUdur0u3w== X-Received: by 2002:a1c:9ad0:: with SMTP id c199mr4736859wme.54.1600952818850; Thu, 24 Sep 2020 06:06:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzeOgJEL03d6J4HUhY25WnIbSBeUKF8vFMwUjoKDIpk02WcbNyTtAHB1XNZQWGzbBFul3mNow== X-Received: by 2002:a1c:9ad0:: with SMTP id c199mr4736833wme.54.1600952818555; Thu, 24 Sep 2020 06:06:58 -0700 (PDT) Received: from lore-desk.redhat.com ([151.66.98.27]) by smtp.gmail.com with ESMTPSA id t4sm3604791wrr.26.2020.09.24.06.06.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 24 Sep 2020 06:06:57 -0700 (PDT) From: Lorenzo Bianconi To: ovs-dev@openvswitch.org Date: Thu, 24 Sep 2020 15:06:54 +0200 Message-Id: <268f4ca004c2a79add59ffe80f02a53060e3dc10.1600952243.git.lorenzo.bianconi@redhat.com> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lorenzo.bianconi@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: hzhou@ovn.org Subject: [ovs-dev] [PATCH v4 ovn] binding: fix localnet QoS configuration after I-P 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" After the I-P has been introduced in commit 354bdba51a ("ovn-controller: I-P for SB port binding and OVS interface in runtime_data"), the QoS on localnet ports is not properly configured if the ovs interface is marked with "ovn-egress-iface" flag after the related record in the logical_switch_port table is set. The issue can be triggered with the following reproducer: $ovn-nbctl set Logical_Switch_Port ln-public options:qos_burst=1000 $ovs-vsctl set interface eth0 external-ids:ovn-egress-iface=true Fix the issue triggering a recomputation after qos is configured for ovs interface Fixes: 354bdba51abf ("ovn-controller: I-P for SB port binding and OVS interface in runtime_data") Signed-off-by: Lorenzo Bianconi --- Changes since v3: - rely on OVS_WAIT_UNTIL in system-ovn.at - move external_ids check before iface_id one Changes since v2: - drop patch 1/3 - patch 2/3 has been applied - simplify full recomputation check Changes since v1: - move qos_map fix in a separated patch - add ovn-egress-iface info to binding I-P engine relying on shash for local_iface_ids --- controller/binding.c | 6 ++++ tests/ovn-performance.at | 13 +++++++++ tests/system-ovn.at | 60 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 79 insertions(+) diff --git a/controller/binding.c b/controller/binding.c index 36fd35009..eb92679ad 100644 --- a/controller/binding.c +++ b/controller/binding.c @@ -1856,6 +1856,12 @@ binding_handle_ovs_interface_changes(struct binding_ctx_in *b_ctx_in, break; } + if (smap_get(&iface_rec->external_ids, "ovn-egress-iface") || + sset_contains(b_ctx_out->egress_ifaces, iface_rec->name)) { + handled = false; + break; + } + const char *iface_id = smap_get(&iface_rec->external_ids, "iface-id"); const char *old_iface_id = smap_get(b_ctx_out->local_iface_ids, iface_rec->name); diff --git a/tests/ovn-performance.at b/tests/ovn-performance.at index 3010860d5..6cc5b2174 100644 --- a/tests/ovn-performance.at +++ b/tests/ovn-performance.at @@ -247,6 +247,8 @@ for i in 1 2 3; do ovs-vsctl set open . external_ids:ovn-bridge-mappings="public:br-ex" j=$((i + 2)) ovn_attach n1 br-phys 192.168.0.$j + ip link add vgw$i type dummy + ovs-vsctl add-port br-ex vgw$i done # Wait for the tunnel ports to be created and up. @@ -477,6 +479,17 @@ OVN_CONTROLLER_EXPECT_HIT( [ovn-nbctl --wait=hv lrp-set-gateway-chassis lr1-public gw3 10 && ovn-nbctl --wait=hv sync] ) +# create QoS rule +OVN_CONTROLLER_EXPECT_NO_HIT( + [hv1 hv2 gw1 gw2 gw3], [lflow_run], + [ovn-nbctl --wait=hv set Logical_Switch_Port ln-public options:qos_burst=1000] +) + +OVN_CONTROLLER_EXPECT_HIT( + [gw1], [lflow_run], + [as gw1 ovs-vsctl set interface vgw1 external-ids:ovn-egress-iface=true] +) + # Make gw2 master. There is remote possibility that full recompute # triggers for gw2 after it becomes master. Most of the time # there will be no recompute. diff --git a/tests/system-ovn.at b/tests/system-ovn.at index 4f72754c6..420610f89 100644 --- a/tests/system-ovn.at +++ b/tests/system-ovn.at @@ -5397,3 +5397,63 @@ as OVS_TRAFFIC_VSWITCHD_STOP(["/.*error receiving.*/d /.*terminating with signal 15.*/d"]) AT_CLEANUP + +AT_SETUP([ovn -- egress qos]) +AT_KEYWORDS([ovn-egress-qos]) + +ovn_start +OVS_TRAFFIC_VSWITCHD_START() + +ADD_BR([br-int]) +ADD_BR([br-ext]) + +ovs-ofctl add-flow br-ext action=normal +# Set external-ids in br-int needed for ovn-controller +ovs-vsctl \ + -- set Open_vSwitch . external-ids:system-id=hv1 \ + -- set Open_vSwitch . external-ids:ovn-remote=unix:$ovs_base/ovn-sb/ovn-sb.sock \ + -- 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 + +ovn-nbctl ls-add sw0 + +ADD_NAMESPACES(sw01) +ADD_VETH(sw01, sw01, br-int, "192.168.1.2/24", "f0:00:00:01:02:03") +ovn-nbctl lsp-add sw0 sw01 \ + -- lsp-set-addresses sw01 "f0:00:00:01:02:03 192.168.1.2" + +ADD_NAMESPACES(public) +ADD_VETH(public, public, br-ext, "192.168.2.2/24", "f0:00:00:01:02:05") + +AT_CHECK([ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=phynet:br-ext]) +ovn-nbctl lsp-add sw0 public \ + -- lsp-set-addresses public unknown \ + -- lsp-set-type public localnet \ + -- lsp-set-options public network_name=phynet + +AT_CHECK([ovn-nbctl set Logical_Switch_Port public options:qos_burst=1000]) +AT_CHECK([ovs-vsctl set interface ovs-public external-ids:ovn-egress-iface=true]) +OVS_WAIT_UNTIL([tc qdisc show | grep -q 'htb 1: dev ovs-public']) + +AT_CHECK([ovn-nbctl remove Logical_Switch_Port public options qos_burst=1000]) +OVS_WAIT_UNTIL([test "$(tc qdisc show | grep 'htb 1: dev ovs-public')" == ""]) + +kill $(pidof 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(["/.*error receiving.*/d +/.*terminating with signal 15.*/d"]) +AT_CLEANUP