Introduce infrastructure for plugging 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 processsing 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. Previous discussion: - RFC1: https://patchwork.ozlabs.org/project/ovn/patch/[email protected]/ - RFC2: https://patchwork.ozlabs.org/project/ovn/cover/[email protected]/ Frode Nordahl (9): ovn-sb: Add requested_chassis column to Port_Binding. tests: Stop using non-existent requested-chassis controller: Make use of Port_Binding:requested_chassis controller: Move OVS port functions to new module. patch: Consume ovsport functions. lib: Add infrastructure for plugging providers. ovn-controller: Prepare plugging infrastructure. binding: Consider plugging of ports on CMS request. plug_providers: Introduce representor plugin. Documentation/automake.mk | 2 + Documentation/topics/index.rst | 1 + Documentation/topics/plug_providers/index.rst | 33 + .../topics/plug_providers/plug-providers.rst | 204 ++++++ .../plug_providers/plug-representor.rst | 45 ++ acinclude.m4 | 49 ++ build-aux/initial-tab-whitelist | 1 + configure.ac | 4 + controller/automake.mk | 4 +- controller/binding.c | 272 +++++++- controller/binding.h | 1 + controller/ovn-controller.c | 29 + controller/ovsport.c | 256 +++++++ controller/ovsport.h | 60 ++ controller/patch.c | 39 +- controller/physical.c | 7 +- include/automake.mk | 4 + include/linux/automake.mk | 2 + include/linux/devlink.h | 625 ++++++++++++++++++ lib/automake.mk | 23 +- lib/chassis-index.c | 24 + lib/chassis-index.h | 3 + lib/inc-proc-eng.h | 7 + lib/plug-dummy.c | 123 ++++ lib/plug-dummy.h | 33 + lib/plug-provider.h | 102 +++ lib/plug.c | 256 +++++++ lib/plug.h | 107 +++ .../representor/netlink-devlink.c | 499 ++++++++++++++ .../representor/netlink-devlink.h | 115 ++++ .../representor/plug-representor.c | 307 +++++++++ lib/test-plug.c | 72 ++ m4/ovn.m4 | 26 + northd/ovn-northd.c | 55 +- northd/ovn_northd.dl | 124 +++- ovn-architecture.7.xml | 35 +- ovn-nb.xml | 33 +- ovn-sb.ovsschema | 10 +- ovn-sb.xml | 37 +- tests/automake.mk | 4 +- tests/ovn-controller.at | 31 + tests/ovn-macros.at | 2 +- tests/ovn-northd.at | 45 ++ tests/ovn-plug.at | 8 + tests/ovn.at | 13 +- 45 files changed, 3629 insertions(+), 103 deletions(-) create mode 100644 Documentation/topics/plug_providers/index.rst create mode 100644 Documentation/topics/plug_providers/plug-providers.rst create mode 100644 Documentation/topics/plug_providers/plug-representor.rst create mode 100644 controller/ovsport.c create mode 100644 controller/ovsport.h create mode 100644 include/linux/automake.mk create mode 100644 include/linux/devlink.h create mode 100644 lib/plug-dummy.c create mode 100644 lib/plug-dummy.h create mode 100644 lib/plug-provider.h create mode 100644 lib/plug.c create mode 100644 lib/plug.h create mode 100644 lib/plug_providers/representor/netlink-devlink.c create mode 100644 lib/plug_providers/representor/netlink-devlink.h create mode 100644 lib/plug_providers/representor/plug-representor.c create mode 100644 lib/test-plug.c create mode 100644 tests/ovn-plug.at -- 2.32.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
