Hi Numan, I have not done an in-depth look through all the patches, but I did skim them, and I understand what's being done here. As the cover letter states, this provides a way to program OVS bridges using OVN logical flow language instead.

It's clear looking at the code that ovn-bridge-controller is expected to be deployed on the same hypervisor where the OVS bridge is. When you picture this being deployed, do you see a single centralized ovn-br database that many ovn-br-controllers connect to, or are you picturing this more like each ovn-br-controller will have an independent instance of the ovn-br database that it interacts with? I think that an addition to the ovn-architecture document is useful with this series, since it will make it more clear how these pieces are meant to fit into the overall OVN picture.

Other than that, I like what I'm seeing. The code lives as a separate application from existing OVN applications, so there is very little risk adding this to the code base. It also duplicates code as little as possible (I think patches 6 and 9 are the biggest places where I see duplication of code already in ovn-controller). I think what you've presented here introduces the feature in a complete way and also leaves room for future optimizations/improvements.

I'll give this a more in-depth review in the upcoming days and provide critiques on the individual patches.

On 8/11/25 6:09 AM, num...@ovn.org wrote:
From: Numan Siddique <num...@ovn.org>

This patch series adds a new service OVN Bridge Controller
(ovn-br-controller) which can be used to program OpenFlow rules to
OVS bridges using OVN logical flows.

The syntax and symantics of the logical flows is similar to the logical
flows generated by ovn-northd.

Rational for adding this service:
     There's a need to configure the provider bridges with specific OpenFlow
     rules after packets leave the OVN pipeline and enters these provider
     bridges  via the patch ports.  Since OVN has a very good abstraction
     of the OpenFlow rules using OVN logical flows, we can leverage the same
     here so that CMS doesn't have to deal with the specifics of OpenFlow
     protocol.  Also if the CMS is written in golang or other languages,
     CMS has to mostly rely on ovs-vsctl/ovs-ofctl to program the flows.
     Adding this support in OVN avoids the CMS to exec these utils to
     add/delete and dump the existing OpenFlow rules.
A user can also use this new service to program and manage any OVS
     bridge without using OVN and hence this service is named as
     "ovn-br-controller."

Numan Siddique (12):
   Add initial schema and skeleton for OVN bridge controller.
   ovn-br-controller: Connect to OVS database and define engine nodes.
   ovn-br-controller: Build en_bridge_data engine node.
   ovn-br-controller: Add bridge flow table manager.
   Move lflow-conj-ids module to lib.
   ovn-br-controller: Process logical flows.
   ovn-br-controller: Add en_pflow_output engine.
   Move ofctrl-seqno module to lib.
   ovn-br-controller: Program the openflows to the bridges.
   ovn-br-controller: Extend the symbol table to add new fields.
   ovn-ctl: Add commands to start OVN bridge controller services.
   rhel: Add ovn-br-controller sub package.

  Makefile.am                                   |    5 +-
  automake.mk                                   |   36 +
  br-controller/automake.mk                     |   18 +
  br-controller/br-flow-mgr.c                   | 1302 +++++++++++++++++
  br-controller/br-flow-mgr.h                   |   65 +
  br-controller/br-ofctrl.c                     |  731 +++++++++
  br-controller/br-ofctrl.h                     |   33 +
  br-controller/en-bridge-data.c                |  199 +++
  br-controller/en-bridge-data.h                |   43 +
  br-controller/en-lflow.c                      |  364 +++++
  br-controller/en-lflow.h                      |   25 +
  br-controller/en-pflow.c                      |  192 +++
  br-controller/en-pflow.h                      |   16 +
  br-controller/ovn-br-controller.8.xml         |    5 +
  br-controller/ovn-br-controller.c             |  560 +++++++
  controller/automake.mk                        |    4 -
  controller/if-status.c                        |    2 +-
  controller/lflow.h                            |    2 +-
  controller/ovn-controller.c                   |    4 +-
  lib/automake.mk                               |   21 +-
  lib/inc-proc-eng.h                            |   11 +
  {controller => lib}/lflow-conj-ids.c          |    0
  {controller => lib}/lflow-conj-ids.h          |    2 +-
  {controller => lib}/ofctrl-seqno.c            |    0
  {controller => lib}/ofctrl-seqno.h            |    0
  lib/ovn-br-idl.ann                            |    9 +
  lib/ovn-util.c                                |   13 +
  lib/ovn-util.h                                |    1 +
  {controller => lib}/test-lflow-conj-ids.c     |    0
  {controller => lib}/test-ofctrl-seqno.c       |    0
  ovn-br.ovsschema                              |   94 ++
  ovn-br.xml                                    |  452 ++++++
  rhel/automake.mk                              |    4 +-
  rhel/ovn-fedora.spec.in                       |   22 +-
  ...b_systemd_system_ovn-br-controller.service |   35 +
  rhel/usr_lib_systemd_system_ovn-br-db.service |   32 +
  tests/automake.mk                             |   11 +-
  tests/ovn-br-controller.at                    |  355 +++++
  tests/testsuite.at                            |    1 +
  tutorial/ovn-sandbox                          |   24 +-
  utilities/automake.mk                         |    8 +
  utilities/ovn-brctl.c                         |  585 ++++++++
  utilities/ovn-ctl                             |  163 +++
  utilities/ovn-ctl.8.xml                       |   36 +
  44 files changed, 5465 insertions(+), 20 deletions(-)
  create mode 100644 br-controller/automake.mk
  create mode 100644 br-controller/br-flow-mgr.c
  create mode 100644 br-controller/br-flow-mgr.h
  create mode 100644 br-controller/br-ofctrl.c
  create mode 100644 br-controller/br-ofctrl.h
  create mode 100644 br-controller/en-bridge-data.c
  create mode 100644 br-controller/en-bridge-data.h
  create mode 100644 br-controller/en-lflow.c
  create mode 100644 br-controller/en-lflow.h
  create mode 100644 br-controller/en-pflow.c
  create mode 100644 br-controller/en-pflow.h
  create mode 100644 br-controller/ovn-br-controller.8.xml
  create mode 100644 br-controller/ovn-br-controller.c
  rename {controller => lib}/lflow-conj-ids.c (100%)
  rename {controller => lib}/lflow-conj-ids.h (98%)
  rename {controller => lib}/ofctrl-seqno.c (100%)
  rename {controller => lib}/ofctrl-seqno.h (100%)
  create mode 100644 lib/ovn-br-idl.ann
  rename {controller => lib}/test-lflow-conj-ids.c (100%)
  rename {controller => lib}/test-ofctrl-seqno.c (100%)
  create mode 100644 ovn-br.ovsschema
  create mode 100644 ovn-br.xml
  create mode 100644 rhel/usr_lib_systemd_system_ovn-br-controller.service
  create mode 100644 rhel/usr_lib_systemd_system_ovn-br-db.service
  create mode 100644 tests/ovn-br-controller.at
  create mode 100644 utilities/ovn-brctl.c


_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to