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. >> >> 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. >> 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. 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 > >> > > >> > >> > 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. >> >> 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 _______________________________________________ dev mailing list d...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-dev