On Tue, Oct 19, 2021 at 6:15 AM Frode Nordahl
<[email protected]> wrote:
>
> 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.
>
> v5 -> v6:
>  - Fix 0-day Robot documentation lexer warning treated as error:
>     
> https://mail.openvswitch.org/pipermail/ovs-build/2021-September/017538.html
>
> v6 -> v7:
>  - lport: Fall back to strcmp when requested-chassis option is set
>           but Port_Binding->requested_chassis is not filled yet.
>  - physical: Make use of common lport_can_bind_on_this_chassis helper
>              instead of duplicating the inverse check in the code.
>  - tests: Add test cases to cover currently uncovered requested-chassis
>           functionality.
>  - plug: Make smaps struct members instead of pointers.
>  - plug: Don't use is_deleted function when not iterating over tracked
>          records.  Avoid adding multiple delete or update iface requests
>          to the same transaction.
>  - plug: For full recompute, don't process until northd has populated
>          Port_Binding->requested_chassis to avoid thrashing on startup.
>          Also fix order of processing.
>  - plug: Handle failed transactions appropriately.
>  - tests: Clean up and extend plug test case.
>
> Previous discussion:
>  - RFC1: 
> https://patchwork.ozlabs.org/project/ovn/patch/[email protected]/
>  - RFC2: 
> https://patchwork.ozlabs.org/project/ovn/cover/[email protected]/
>
> Frode Nordahl (12):
>   ovn-sb: Add requested_chassis column to Port_Binding.
>   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.
>   physical: Make use of common can bind helper.
>   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                            |  25 +
>  controller/lport.h                            |   3 +
>  controller/ovn-controller.c                   | 268 ++++++-
>  controller/ovsport.c                          | 266 +++++++
>  controller/ovsport.h                          |  60 ++
>  controller/patch.c                            |  39 +-
>  controller/physical.c                         |   6 +-
>  controller/plug.c                             | 670 ++++++++++++++++++
>  controller/plug.h                             |  83 +++
>  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         | 119 ++++
>  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                       |   1 -
>  tests/ovn-macros.at                           |   2 +-
>  tests/ovn-northd.at                           |  45 ++
>  tests/ovn-plug.at                             |   8 +
>  tests/ovn.at                                  | 220 ++++++
>  42 files changed, 2856 insertions(+), 170 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


Hi Frode,

Thanks for working on this feature.

I went ahead and applied the patches 1-9 to the main branch.

For the remaining patches - 10-12 :

Acked-by: Numan Siddique <[email protected]>

Since these remaining patches add the main functionality I'd prefer if
it goes through
a review from other reviewers.

@Han Zhou   It would be great if you plan to take a look at these patches.

Thanks
Numan

>
> --
> 2.32.0
>
> _______________________________________________
> dev mailing list
> [email protected]
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to