From patchwork Tue Sep 28 12:56:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frode Nordahl X-Patchwork-Id: 1533881 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=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=fDOLK5sz; dkim-atps=neutral Authentication-Results: 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=) 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 RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4HJffz0rtqz9sXS for ; Tue, 28 Sep 2021 22:57:31 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 4005560BDC; Tue, 28 Sep 2021 12:57:28 +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 a0Ptoagwae54; Tue, 28 Sep 2021 12:57:26 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 5EF6460B10; Tue, 28 Sep 2021 12:57:21 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 0EC12C0048; Tue, 28 Sep 2021 12:57:13 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 8CD8DC002B for ; Tue, 28 Sep 2021 12:57:03 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 082C4403B1 for ; Tue, 28 Sep 2021 12:57:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=canonical.com Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id AmWv7WPsXFxI for ; Tue, 28 Sep 2021 12:56:58 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from smtp-relay-canonical-0.canonical.com (smtp-relay-canonical-0.canonical.com [185.125.188.120]) by smtp4.osuosl.org (Postfix) with ESMTPS id B407D4036D for ; Tue, 28 Sep 2021 12:56:58 +0000 (UTC) Received: from frode-threadripper.. (ti0189a330-1161.bb.online.no [88.88.219.141]) (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 smtp-relay-canonical-0.canonical.com (Postfix) with ESMTPSA id 2E16F3F042; Tue, 28 Sep 2021 12:56:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1632833815; bh=LOcVzSSeNjfyXUWzp/bAJqD+D/iSzH4luUGxbR9hOVA=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=fDOLK5sz+Rp1SC3SoYMEeLduQDuG/xoO1mb/iMlmleDgHEQYxeG/jioqN98OeZsa+ YFpi+fQdtkTc6Lg21+CnsoachgDsT1xb+AwoJF34By+KogC6Zi9Rt/Rp02M9eWhIQI Nt0stfVYrugcoUBUsbxDgMkmHbdnw5VN2qWAr1Kv9vcD9whX8ttynl2sRfR+b+bd0E t8UFpjQrZsSR6pJ+JRJooco1FydgVsM7kye9bXaLkgfcXzZxda5WLfoUmTB6RotNAd bPMsyRz4e1O2WxzsEi3K7QjSjf1Nj0nNjkg7cbsH7wJqw3BN0j8cy74wQmBkQ1gwbd FuNQOeFSoHnZA== From: Frode Nordahl To: dev@openvswitch.org Date: Tue, 28 Sep 2021 14:56:41 +0200 Message-Id: <20210928125653.7329-1-frode.nordahl@canonical.com> X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 Subject: [ovs-dev] [PATCH ovn v5 00/12] Introduce infrastructure for plug providers 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" Introduce infrastructure for plug providers and add feature to ovn-controller to add and remove ports on the integration bridge as directed by CMS through Logical_Switch_Port options. Traditionally it has been the CMSs responsibility to create Virtual Interfaces (VIFs) as part of instance (Container, Pod, Virtual Machine etc.) life cycle, and subsequently manage plug/unplug operations on the Open vSwitch integration bridge. With the advent of NICs connected to multiple distinct CPUs we can have a topology where the instance runs on one host and Open vSwitch and OVN runs on a different host, the smartnic control plane CPU. The host facing interfaces will be visible to Open vSwitch and OVN as representor ports. The actions necessary for plugging and unplugging the representor port in Open vSwitch running on the smartnic control plane CPU would be the same for every CMS. Hardware or platform specific details for initialization and lookup of representor ports is provided by an plugging provider hosted inside or outside the core OVN repository, and linked at OVN build time. RFC1 -> RFC2: - Introduce the plug-provider interface, remove hardware/platform dependent code. - Add ovsport module. - Integrate with binding module. - Split into multiple patches. RFC2 -> v1: - Extend build system, `--with-plug-provider`. - Check for required data in b_ctx_in and lbinding data structures. - Split consider_plug_lport into update and create processing functions. - Consider unplug on release where relevant. - Add ovn-controller `--enable-dummy-plug` option for testing. - Consistent function naming and move ovsport module to controller/. - Rename plug-test.c -> plug-dummy.c. - Add functional- and unit- tests. v1 -> v2: - Move update to controller/binding.h from patch 6 -> patch 5. - Fix lint problems reported by 0-day Robot. v2 -> v3: - Fix build system extension for plug provider. - Implement DDlog version of northd change. - Rebase on tip. v3 -> v4: - sb:Port_Binding:plugged_by -> sb:Port_Binding:requested_chassis. - Move documentation of plugin specific options to plugin implementation. - ovn-northd-ddlog: squash changes into same patch as C version, rework the DDlog implementation. - controller: Use requested_chassis column instead of parsing options. - plug-provider: Remove the extra class instantiation layer and refcounting. Add documentation and various tweaks. - controller: Add engine node for plug provider so that a plugin run function can run at an appropriate time and also allow feeding back information about changes that can not be handled incrementally. - binding: Fix return values for plug functions so they adhere to the incremental processing engine contract. - Add support for building in-tree plug providers. v4 -> v5: - binding: Make some data structures and functions public to allow other modules to make use of its local binding tracking data structures. - Add separate incremental processing engine nodes for the plug provider. - Do change handling in the controller/plug module rather than piggy backing on the binding module. - Deal with asynchronous notification to plug provider class and subsequent freeing of data structures when the transaction commits. - Drop the representor plugin as in-tree plugin to address concerns about it being Linux-only and having netlink/kernel dependencies. Will upstream to ovn-org/ovn-vif instead. Previous discussion: - RFC1: https://patchwork.ozlabs.org/project/ovn/patch/20210509140305.1910796-1-frode.nordahl@canonical.com/ - RFC2: https://patchwork.ozlabs.org/project/ovn/cover/20210805145013.3033919-1-frode.nordahl@gmail.com/ Frode Nordahl (12): ovn-sb: Add requested_chassis column to Port_Binding. test: Fix options:requested-chassis with hostname controller: Make use of Port_Binding:requested_chassis controller: Move OVS port functions to new module. patch: Consume ovsport functions. binding: Move can_bind helper to lport module binding: Make local_binding data structure public ovn-controller: Move shared functions to ovn-util tests: Use built objects for unit test deps lib: Add infrastructure for plug providers. ovn-controller: Prepare plug provider infrastructure. controller: Consider plugging of ports on CMS request. Documentation/automake.mk | 2 + Documentation/topics/index.rst | 1 + Documentation/topics/plug_providers/index.rst | 32 + .../topics/plug_providers/plug-providers.rst | 196 ++++++ acinclude.m4 | 49 ++ configure.ac | 2 + controller/automake.mk | 6 +- controller/binding.c | 67 +- controller/binding.h | 34 + controller/local_data.h | 11 +- controller/lport.c | 14 + controller/lport.h | 3 + controller/ovn-controller.c | 241 ++++++- controller/ovn-controller.h | 5 - controller/ovsport.c | 266 ++++++++ controller/ovsport.h | 60 ++ controller/patch.c | 39 +- controller/physical.c | 12 +- controller/plug.c | 636 ++++++++++++++++++ controller/plug.h | 80 +++ controller/test-plug.c | 70 ++ lib/automake.mk | 10 +- lib/chassis-index.c | 24 + lib/chassis-index.h | 3 + lib/ovn-util.c | 27 + lib/ovn-util.h | 18 +- lib/plug-provider.c | 204 ++++++ lib/plug-provider.h | 164 +++++ lib/plug_providers/dummy/plug-dummy.c | 121 ++++ northd/northd.c | 45 +- northd/northd.h | 1 + northd/ovn-northd.c | 9 +- northd/ovn_northd.dl | 123 +++- ovn-architecture.7.xml | 35 +- ovn-nb.xml | 21 + ovn-sb.ovsschema | 10 +- ovn-sb.xml | 21 + tests/automake.mk | 26 +- tests/ovn-controller.at | 85 +++ tests/ovn-macros.at | 2 +- tests/ovn-northd.at | 45 ++ tests/ovn-plug.at | 8 + tests/ovn.at | 4 +- 43 files changed, 2658 insertions(+), 174 deletions(-) create mode 100644 Documentation/topics/plug_providers/index.rst create mode 100644 Documentation/topics/plug_providers/plug-providers.rst create mode 100644 controller/ovsport.c create mode 100644 controller/ovsport.h create mode 100644 controller/plug.c create mode 100644 controller/plug.h create mode 100644 controller/test-plug.c create mode 100644 lib/plug-provider.c create mode 100644 lib/plug-provider.h create mode 100644 lib/plug_providers/dummy/plug-dummy.c create mode 100644 tests/ovn-plug.at