On 6/23/25 6:23 PM, Frode Nordahl wrote:
> Hello, All,
> 

Hi Frode,

> Apologies for being late to the discussion, but just wanted to document
> our interest in this as mentioned in the last IRC meeting and just now
> in the A/V meeting.
> 
> 
> On 19.06.2025 16:18, Dumitru Ceara via dev wrote:
>> Hi Numan,
>>
>> On 6/18/25 11:38 PM, Numan Siddique wrote:
>>> On Wed, Jun 18, 2025 at 5:00 PM Dumitru Ceara <dce...@redhat.com> wrote:
>>>>
>>>> Hi Han,
>>>>
>>>> On 6/18/25 7:40 PM, Han Zhou wrote:
>>>>> Thanks Numan for the proposal.
>>>>>
>>>>> On Wed, Jun 18, 2025 at 4:27 AM Dumitru Ceara <dce...@redhat.com>
>>>>> wrote:
>>>>>>
>>>>>> Hi Numan, Ales,
>>>>>>
>>>>>> On 6/10/25 4:24 PM, Numan Siddique wrote:
>>>>>>> On Tue, Jun 10, 2025 at 2:04 AM Ales Musil <amu...@redhat.com>
>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Jun 5, 2025 at 9:44 PM Numan Siddique <num...@ovn.org>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> On Thu, Jun 5, 2025 at 11:33 AM Dumitru Ceara <dce...@redhat.com>
>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>> On 6/4/25 6:24 PM, Numan Siddique wrote:
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Hi Numan,
>>>>>>>>
>>>>>>>>
>>>>>>>> Hi Dumitru and Numan,
>>>>>>>>
>>>>>>>> I think the project might be a good idea in general, just adding
>>>>>>>> my opinion on some parts below.
>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> There's a need to configure the provider bridge with specific
>>>>> OpenFlow
>>>>>>>>>>> rules after packets leave the OVN pipeline and enter via the
>>>>>>>>>>> patch
>>>>>>>>>>> port.
>>>>>>>>>>>
>>>>>>>>>>> To simplify this for CMS, I propose utilizing OVN logical flows.
>>>>> This
>>>>>>>>>>> would eliminate the need for CMS to manage direct OpenFlow
>>>>> connections
>>>>>>>>>>> and programming.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> This seems very interesting!
>>>>>>>>>>
>>>>>>>>>>> To achieve this, I've developed a new service within OVN called
>>>>>>>>>>> `ovn-pr-controller` (pr = provider). Here's a high-level
>>>>>>>>>>> overview:
>>>>>>>>>>>
>>>>>>>>>>> A new database, `OVN_Provider`, is created with two main tables:
>>>>>>>>>>> `PR_Bridge` and `Logical_Flow`.
>>>>>>>>>>>
>>>>>>>>>>> `ovn-pr-controller` connects to this database, translates
>>>>>>>>>>> logical
>>>>>>>>>>> flows to OpenFlow rules, and programs the bridges.
>>>>>>>>>>>
>>>>>>>>>>> CMS adds logical flows for managed provider bridges by
>>>>>>>>>>> connecting to
>>>>>>>>>>> the `OVN_Provider` database.
>>>>>>>>>>>
>>>>>>>>>>> CMS can define the pipeline as needed.
>>>>>>>>>>>
>>>>>>>>>>> An `ovn-prctl` utility (similar to `ovn-nbctl`) is used to
>>>>>>>>>>> program
>>>>>>>>>>> logical flows.
>>>>>>>>>>>
>>>>>>>>>>> Example Usage:
>>>>>>>>>>>
>>>>>>>>>>> # Add a provider bridge
>>>>>>>>>>> `ovn-prctl add-br br-ext`
>>>>>>>>>>>
>>>>>>>>>>> # Add logical flows
>>>>>>>>>>> `ovn-prctl add-flow br-ext 0 100 "inport == \\"patch-port\\""
>>>>>>>>>>> "ct_snat_zone = 1000; next;"`
>>>>>>>>>>> `ovn-prctl add-flow br-ext 0 0     "1”  "next;"`
>>>>>>>>>>>
>>>>>>>>>>> `ovn-prctl add-flow br-ext 1 1000 "ip4" "ct_snat;"`
>>>>>>>>>>>
>>>>>>>>>>> `ovn-prctl add-flow br-ext 2 1000 "ip4 && ct.new && ct.trk &&
>>>>> ip4.src
>>>>>>>>>>> == 10.0.0.11" "ct_snat(100.64.0.11); next;"`
>>>>>>>>>>>
>>>>>>>>>>> `ovn-prctl add-flow br-ext 2 0 "ip4" "next;"`
>>>>>>>>>>>
>>>>>>>>>>> `ovn-prctl add-flow br-ext 3 100  "ip4 && ip4.dst ==
>>>>>>>>>>> 52.92.128.0/17"
>>>>>>>>>>> "tun.id = 1000; tun_ip4.dst = 10.100.100.1; eth.dst =
>>>>>>>>>>> 4c:96:14:14:01:b0; outport = \\"vxlan0\\"; output;"`
>>>>>>>>>>>
>>>>>>>>>>> `ovn-prctl add-flow br-ext 3 0 “1” “output;”`
>>>>>>>>>>>
>>>>>>>>>>> I'd like to get the community's feedback on whether this service
>>>>> would
>>>>>>>>>>> be a valuable addition to OVN.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I wonder if we need these to be separate databases/processes.
>>>>> Wouldn't
>>>>>>>>>> it make sense to expose this in the NB database directly?
>>>>>>>>>>
>>>>>>>>>> With your proposal, these new ovn-pr-controllers would have to
>>>>> connect
>>>>>>>>>> to the central OVN_Provider database from all chassis.  But we
>>>>> already
>>>>>>>>>> have the ovn-controller connection to the Southbound.  Could we
>>>>> reuse that?
>>>>>>>>>
>>>>>>>>> I forgot to mention that the OVN provider ovsdb-server and the
>>>>>>>>> ovn-pr-controller needs
>>>>>>>>> to be run on each chassis.
>>>>>>>>>
>>>>>>
>>>>>> I see.  However, I think it gives even more flexibility if the OVN
>>>>>> provider database is centralized.  Then the CMS central component
>>>>>> (e.g.,
>>>>>> neutron for OpenStack) could just write "logical flows" there and
>>>>>> rely
>>>>>> on per-chassis ovn-pr-controllers to translate that to OpenFlow.
>>>>>>
>>>>> While it brings flexibility, we should also keep in mind that the
>>>>> central
>>>>> approach could introduce another choke point for scale. Even if we
>>>>> reuse SB
>>>>> DB as the central component, the new ovn-pr-controllers process would
>>>>> require new connections to the SB DB.
>>>>>
>>>>
>>>> True, but I was not really thinking of using the SB DB as the central
>>>> component for ovn-pr-controllers but rather a new database server.  And
>>>> I really hope it wouldn't require storing as many logical flows (and
>>>> data in general) as we store in the SB today.
>>>>
>>>
>>> Thanks for the comments and the discussion.
>>>
>>> Just FYI - I  thought we are in favour of having a separate project.
>>> So I reworked a bit and renamed the project to - ovnbr controller (ovn
>>> bridge controller)
>>> -  https://github.com/numansiddique/ovnbr/tree/initial_commits
>>>
>>> But I can move back the code to ovn project. So not a problem.
>>>
>>>
>>>
>>>>> Supporting both central and distributed may be an overkill at least
>>>>> as a
>>>>> start, if we could decide which one is more practical from a CMS
>>>>> point of
>>>>> view.
>>>>>
>>>>
>>>> Maybe, but the "distributed" case would probably mean more work for the
>>>> CMS on the node side (a per chassis CMS component is definitely
>>>> required
>>>> then to provision the per chassis database).
>>>>
>>>> I do understand however that we'd need a way to abstract
>>>> chassis-specific resources (e.g., OVS ports) in the other,
>>>> "centralized", case.  And that might be a significant disadvantage.
>>>>
>>>>>> On second thought, if designed properly, there's probably no need
>>>>>> to add
>>>>>> a restriction to colocate the new database and ovn-pr-controller.  We
>>>>>> could just support both types of deployments:
>>>
>>> @Dumitru Ceara   If I understand correctly,  what you're suggesting
>>> is that
>>> CMS can decide to run ovnbr database either central or locally - for
>>> each chassis.
>>>
>>
>> Yes, that's what I was thinking of.
> 
> fwiw; We would be interested in the distributed database for the PR
> controller.
> 
> Our interest surfaced after a discussion with Jakub Libosvar on how to
> approach downstream OpenStack Neutron consumption of OVN native BGP
> support, where he raised the following use case:
> * Single NIC chassis.
> * Said NIC is operated by OVS, for simplicity and purpose of discussion,
> let's say the user space data path.
> 
> 
> Now let's mix this with OVN native BGP features such as:
> * Learning the default gateway through route exchange.
> * Routing IPv4 prefixes over IPv6 next hop (aka. BGP Unnumbered).
> * BGP protocol redirect to ensure BGP next hop address is the link-local
> address of a OVN LR on the integration bridge (which may be required for
> this to work with older versions of FRR on some ToR equipment due to
> lack of support for 3rd party link-local next hop).
> 
> 
> With a centralized Southbound database, which a CMS such as OpenStack
> deploys, we would have a chicken and egg problem, because flows are
> needed in the integration bridge for the ovn-controller to connect to
> the Southbound database, and ... you get the picture.
> 
> I imagine we could make parts of this work better with a distributed
> database for a OVN Provider Controller.
> 
> I guess we could even task this distributed controller with "priming"
> the integration bridge with a simple set of "static flows" enough to get
> it bootstrapped in such topologies (or could this specific task even be
> a feature of the regular controller?).
> 

I'm just trying to make sure I understood this last part correctly.  By
"regular controller" do you mean "ovn-controller" or some other (CMS)
node-specific component?

>>> I think that would work too.  Only disadvantage is that CMS has to
>>> ensure that the bridge names and physical interface names
>>> have to be the same.  Although we can definitely find a way to handle
>>> this.
>>>
>>> The present proposal schema -
>>> https://github.com/numansiddique/ovnbr/blob/initial_commits/ovn-
>>> br.ovsschema#L66
>>> has only a Bridge table and no ports defined.  In the present proposal
>>> CMS can add
>>> logical flows like - "inport == eth1 && ....."  and ovnbr-controller
>>> expects an OVS interface - eth1 in the OVS bridge.
>>>
>>
>> Right, we'd need a way to represent chassis specific information if we
>> support a central ovnbr database.  Probably at least: OVS ports,
>> conntrack zones, provider bridge names.
>>
>>>
>>>
>>>
>>>>>> - ovn-pr-controller & database on the same chassis
>>>>>> - (multiple) ovn-pr-controller connecting to a database on a
>>>>>> different
>>>>>> node (e.g., colocated with the Southbound)
>>>>>>
>>>>>>>>> This is basically to allow a CMS agent running on each chassis
>>>>>>>>> to use
>>>>>>>>> logical flows
>>>>>>>>> and program them in the OVN provider database, instead of talking
>>>>>>>>> OpenFlow directly.
>>>>>>>>>
>>>>>>>>> OVN has a very nice way of abstracting OpenFlows using logical
>>>>>>>>> flows
>>>>>>>>> and my idea is to leverage it.
>>>>>>>>>
>>>>>>>>> ovnkube-node, as you know,  programs the OpenFlow rules to the
>>>>>>>>> provider bridge directly by execing
>>>>>>>>> "ovs-ofctl".  The OVN kubernetes community could possibly use OVN
>>>>>>>>> provider controller.
>>>>>>
>>>>>> Another thing the CMS node component (ovnkube-node in the example
>>>>>> above)
>>>>>> needs to do is reconcile flows on the "provider" bridge on restart.
>>>>>>
>>>>>> This new OVN provider controller would also remove the need for
>>>>>> the CMS
>>>>>> to do that, which is an advantage.
>>>>>>
>>>>>
>>>>> It is definitely valuable, and no objection from me. But I think it is
>>>>> better to ask opinion from CMS component maintainers if the OVS
>>>>> pipeline
>>>>> for the provider bridge is complex enough to justify this. Also,
>>>>> how much
>>>>> would it help by managing logical flows through an OVSDB versus
>>>>> managing
>>>>> open-flow rules though ovs-ofctl. Keep in mind that the abstraction
>>>>> here is
>>>>> not at the level of the NB DB which focuses on logical topologies -
>>>>> here
>>>>> the abstraction is logical-flows (something at the SB level), so
>>>>> the CMS
>>>>> still needs to manage the pipeline rather than just logical topology.
>>>
>>> That's correct.  Expectation is that CMS knows what it is doing,
>>> And we have the requirement to add flows in the provider bridges and
>>> hence thought
>>> of this abstraction to
>>>    - leverage the OVN logical flows
>>>    - and to leverage the openflow handling of ovn-controller.
>>>
>>>
>>> My personal preference is also to have it part of OVN so that it is
>>> easier to manage.
>>>
>>> But as Ales mentioned,  we have many logical actions like -
>>> put_dhcp_opts etc (which use controller action)
>>> which will not work with the ovn-bridge-controller.  Probably
>>> ovn-bridge-controller can maintain its own symbol table.
>>>
>>>
>>> Thanks
>>> Numan
>>>
>>>
>>>>>
>>>>> Adding @Tim Rozet <tro...@redhat.com>  @Girish Moodalbail
>>>>> <gmoodalb...@gmail.com> from ovn-k8s to comment.
>>>>>
>>>>
>>>> Adding Jakub Libosvar too, from the neutron side, as we briefly touched
>>>> on the content of this proposal in a discussion while trying to onboard
>>>> the OVN BGP support in neutron.  IMO a centralized "provider network
>>>> database" might fit that specific use case quite well because the open
>>>> flow rules that needed to be added to the provider bridge were quite
>>>> generic.
>>>>
>>>
>>>
>>>
>>>
>>>>>>>>> I'm not suggesting this, but just giving an example or a potential
>>>>> user.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> I believe it could be useful, but I'm unsure if it should be
>>>>>>>>>>> integrated into OVN directly or be a separate project within
>>>>>>>>>>> `ovn-org`.
>>>>>>>>
>>>>>>>>
>>>>>>>> In my opinion it would be better as a standalone project within
>>>>>>>> ovn-org. There is couple of reasons why:
>>>>>>>>
>>>>>>>> 1) Separation between ovn actions and the new ones. I suppose the
>>>>>>>> ovn-pr-controller won't support like put_arp etc. in other words
>>>>>>>> actions that require userspace handling.
>>>>>>>>
>>>>>>>> 2) There are certain expectations about parameters, mostly ct
>>>>>>>> actions
>>>>>>>> and it feels a little strange to populate a specific register in
>>>>>>>> order
>>>>>>>> to get the action working.
>>>>>>>>
>>>>>>>> 3) Maintenance cost to some extent, standalone project might be
>>>>>>>> easier to maintain, it can be written in different language if it
>>>>>>>> would be better fit.
>>>>>>>>
>>>>>>>> 4) The abstraction can be generated automatically to some extent
>>>>>>>> so most of the code might be actually a way to generate the parsing
>>>>>>>> etc.
>>>>>>>>
>>>>>>>> I'm fully aware that this would require some duplication. With that
>>>>>>>> said, this just my opinion and I won't block any other decision.
>>>>>>>
>>>>>>>
>>>>>>> Hi Ales,
>>>>>>>
>>>>>>> Thanks for the replies.  I agree with your points.  I think it makes
>>>>>>> sense to have
>>>>>>> a separate project even if the code is duplicated.
>>>>>>>
>>>>>>
>>>>>> I'm not sure I see anything blocking the ovn-pr-controller (or
>>>>>> whatever
>>>>>> we decide to call it) code from being part of the ovn-org/ovn
>>>>>> project.
>>>>>>
>>>>>> It can be a standalone daemon (similar to controller/ovn-
>>>>>> controller or
>>>>>> controller-vtep/ovn-controller-vtep).
>>>>>>
>>>>>> It can even be written in a different language (e.g., rust) if we
>>>>>> wish.
>>>>>>
>>>>>> Keeping it in the same project actually reduces maintenance cost
>>>>>> because
>>>>>> we can just reuse the expr parsing library from OVN directly.  We can
>>>>>> also reuse all the build/test infra (if we wish).
>>>>>>
>>>>>> It would also mean we wouldn't have to come up with different release
>>>>>> strategies, contribution guidelines, etc.
>>>>>>
>>>>>> Also, with downstream in mind, it might be (slightly) easier for
>>>>>> distros
>>>>>> to package this new binary if its code lived in ovn-org/ovn.
>>>>>>
>>>>>
>>>>> In my option it is really not good to duplicate components in
>>>>> different
>>>>> repos. Unless we find ways to expose logical flow translation as a
>>>>> library
>>>>> and share between the projects, I am inclined to use OVN repo
>>>>> directly.
>>>>>
>>>>> Thanks,
>>>>> Han
>>>>>
>>>>>>> Implementing in a different language would be nice but I think it
>>>>>>> will
>>>>>>> take a lot
>>>>>>> of effort to implement expr parsing and openflow encoding.
>>>>>>>
>>>>>>> Thanks
>>>>>>> Numan
>>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Dumitru
>>>>>>
>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> I guess it depends a bit on the approach chosen for
>>>>>>>>>> implementation
>>>>> but
>>>>>>>>>> at a first glance this seems as a good candidate for ovn-org
>>>>>>>>>> to me.
>>>>>>>>>>
>>>>>>>>>>> Three possible options are:
>>>>>>>>>>>
>>>>>>>>>>>   - Integrate the `OVN provider controller` into `ovn-org/ovn`.
>>>>>>>>>>>
>>>>>>>>>>>   - Create a separate project within `ovn-org` (which would
>>>>>>>>>>> require
>>>>>>>>>>> duplicating some files like `lib/actions.c`).
>>>>>>>>>>>
>>>>>>>>>>>   - Do not pursue this.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Listing it here because it's on the "con" side of things. :)  I
>>>>> wonder
>>>>>>>>>> if we'll end up duplicating all OVS actions into OVN logical flow
>>>>> actions.
>>>>>>>>>
>>>>>>>>> Actually that's my goal.  Instead of using OpenFlow rules
>>>>>>>>> directly, a
>>>>>>>>> user can express
>>>>>>>>> their pipeline as logical flows and not worry about the
>>>>>>>>> intricacies of
>>>>>>>>> openflow syntax.
>>>>>>>>> It does add another layer of abstraction for sure.
> 
> 
> With maintenance cost in mind, we definitively prefer hosting this in
> the main repository, and I think it fits nicely in there.
> 
> -- 
> Frode Nordahl
> 
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> Numan
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> I welcome your thoughts and would like to know if other OVN
>>>>>>>>>>> users
>>>>> have
>>>>>>>>>>> similar requirements.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> A proof-of-concept is available here:
>>>>>>>>>>>
>>>>> https://github.com/numansiddique/ovn/tree/provider_controller_support.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> If there is a consensus in pursuing this further,  I'll work on
>>>>>>>>>>> refining the patches and submit them as RFC to start with.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> In general I have no objections to an RFC. (CC the rest of the
>>>>> maintainers).
>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Numan
>>>>>>>>>>
>>>>>>>>>> Regards,
>>>>>>>>>> Dumitru
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Ales
>>>>>>>
>>>>>
>>>>

Thanks,
Dumitru

_______________________________________________
discuss mailing list
disc...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-discuss

Reply via email to