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