[ovs-dev] OVS / OVN split - post 2.12

Numan Siddique nusiddiq at redhat.com
Fri Jul 26 14:36:09 UTC 2019


On Fri, Jul 26, 2019 at 8:04 PM Mark Michelson <mmichels at redhat.com> wrote:

> On 7/26/19 8:52 AM, Numan Siddique wrote:
> > On Fri, Jul 26, 2019 at 5:51 PM Numan Siddique <nusiddiq at redhat.com>
> wrote:
> >
> >>
> >>
> >> On Fri, Jul 26, 2019 at 5:19 PM Damijan Skvarc <damjan.skvarc at gmail.com
> >
> >> wrote:
> >>
> >>> Dumitru,
> >>> your issue was fixed in
> >>>
> https://github.com/openvswitch/ovs/commit/6f6d19db05ca743d6f294618d2c36b6d0b15e2e2
> >>> as removed warning. However fix is not merged yet on
> >>> https://github.com/ovn-org/ovn.git. Unfortunatelly even merging this
> fix
> >>> to ovn-org/ovn.git will not help, since (saying from memory) by this
> fix
> >>> about 1700 warning were removed while there still remained about 70
> >>> warnings of the same kind at different locations. I would suggest for a
> >>> while not to consider warnings as errors.
> >>>
> >>
> >> Hi Damijan,
> >>
> >> With the OVS/OVN split branch here -
> >> https://github.com/ovn-org/ovn/commits/ovs_ovn_split, your fix is
> >> available -
> >>
> https://github.com/ovn-org/ovn/blob/ovs_ovn_split/ovs/include/openvswitch/nsh.h#L372
> >>
> >> After applying Ilya's patch and manually compiling sparse after
> reverting
> >> the commit, I am still seeing the below errors
> >>
> >> Do you think we can ignore these errors for now ?
> >>
> >>
> > Found the issue. The acinclude.m4 file in ovn-org/ovn repo is a bit out
> of
> > date. The OVS_ENABLE_SPARSE and other SPARSE related macros needs to be
> > updated. After fixing it, compilation
> > was successful.
> >
> > Thanks
> > Numan
>
> Hi Numan,
>
> I just attempted this. I did a fresh clone of the ovn repo, checked out
> the up-to-date ovs_ovn_split branch, and then compiled with
> --enable-sparse and --enable-Werror.
>
> I see the following errors:
>
> libtool: compile:  env REAL_CC=gcc "CHECK=sparse -Wsparse-error -I
> ./include/sparse -m64 -I /usr/local/include  " cgcc -target=x86_64
> -target=host_os_specs -D__MMX__=1 -D__SSE2_MATH__=1 -D__SSE_MATH__=1
> -D__SSE2__=1 -D__SSE__=1 -DHAVE_CONFIG_H -I. -I ./include -I ./include
> -I ./lib -I ./lib -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare
> -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum
> -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes
> -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers
> -fno-strict-aliasing -Wswitch-bool -Wlogical-not-parentheses
> -Wsizeof-array-argument -Wbool-compare -Wshift-negative-value
> -Wduplicated-cond -Wshadow -Werror -Werror -g -O2 -MT lib/rconn.lo -MD
> -MP -MF lib/.deps/rconn.Tpo -c lib/rconn.c -o lib/rconn.o
> lib/sat-math.h:46:14: error: undefined identifier
> '__builtin_saddll_overflow'
> lib/sat-math.h:46:39: error: not a function <noident>
> lib/sat-math.h:46:39: error: not a function <noident>
> lib/sat-math.h:102:14: error: undefined identifier
> '__builtin_smulll_overflow'
> lib/sat-math.h:102:39: error: not a function <noident>
> lib/sat-math.h:46:39: error: not a function <noident>
> lib/sat-math.h:102:39: error: not a function <noident>
> lib/sat-math.h:46:39: error: not a function <noident>
> lib/sat-math.h:72:14: error: undefined identifier
> '__builtin_ssubll_overflow'
> lib/sat-math.h:102:39: error: not a function <noident>
> lib/sat-math.h:46:39: error: not a function <noident>
> lib/sat-math.h:102:39: error: call with no type!
> lib/sat-math.h:72:39: error: call with no type!
> lib/sat-math.h:46:39: error: call with no type!
> make[4]: *** [Makefile:5359: lib/rconn.lo] Error 1
>
> I also see this with the OVS repo. So it likely should be addressed
> there instead, and it shouldn't delay our work of splitting the OVN code
> out.
>
>
I agree.

But I don't see these errors. I suspect its to do with sparse version ? Not
sure :).

Without sparse, hopefully it went fine for you.

Thanks
Numan


> >
> >
> >> Thank
> >> Numan
> >>
> >> *******
> >>   -Wold-style-definition -Wmissing-prototypes
> -Wmissing-field-initializers
> >> -fno-strict-aliasing -Wswitch-bool -Wlogical-not-parentheses
> >> -Wsizeof-array-argument -Wbool-compare -Wshift-negative-value
> >> -Wduplicated-cond -Wshadow -Wmultistatement-macros -Wcast-align=strict
> >> -Werror -Werror   -g -O2 -MT lib/acl-log.lo -MD -MP -MF $depbase.Tpo -c
> -o
> >> lib/acl-log.lo ../lib/acl-log.c &&\
> >> mv -f $depbase.Tpo $depbase.Plo
> >> ../ovs/lib/util.h:449:12: error: incorrect type in return expression
> >> (different base types)
> >> ../ovs/lib/util.h:449:12:    expected restricted ovs_be32
> >> ../ovs/lib/util.h:449:12:    got unsigned int
> >> ../utilities/ovn-nbctl.c:3426:34: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3426:34:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3426:34:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3426:34: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3426:34:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3426:34:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3426:34: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3426:34:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3426:34:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3426:34: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3426:34:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3426:34:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3428:39: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3428:39:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3428:39:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3428:39: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3428:39:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3428:39:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3428:39: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3428:39:    expected unsigned int [usertype]
> __bsx
> >> ../utilities/ovn-nbctl.c:3428:39:    got restricted ovs_be32 [usertype]
> >> network
> >> ../utilities/ovn-nbctl.c:3428:39: error: incorrect type in argument 1
> >> (different base types)
> >> ../utilities/ovn-nbctl.c:3428:39:    expected unsigned int [usertype]
> __bsx
> >> ...
> >> ...
> >> make[2]: *** Waiting for unfinished jobs....
> >> libtool: compile:  env REAL_CC=gcc "CHECK=sparse -Wsparse-error -I
> >> ../include/sparse -m64 -I /usr/local/include  " cgcc -target=x86_64
> >> -DHAVE_CONFIG_H -I. -I.. -I ../ovs/include -I ./ovs/include -I
> ../ovs/lib
> >> -I ./ovs/lib -I ../ovs -I ./ovs -I ../lib -I ./lib -Wstrict-prototypes
> >> -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat
> -Wformat-security
> >> -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align
> >> -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
> >> -Wmissing-field-initializers -fno-strict-aliasing -Wswitch-bool
> >> -Wlogical-not-parentheses -Wsizeof-array-argument -Wbool-compare
> >> -Wshift-negative-value -Wduplicated-cond -Wshadow
> -Wmultistatement-macros
> >> -Wcast-align=strict -Werror -Werror -g -O2 -MT lib/acl-log.lo -MD -MP
> -MF
> >> lib/.deps/acl-log.Tpo -c ../lib/acl-log.c -o lib/acl-log.o
> >> libtool: compile:  env REAL_CC=gcc "CHECK=sparse -Wsparse-error -I
> >> ../include/sparse -m64 -I /usr/local/include  " cgcc -target=x86_64
> >> -DHAVE_CONFIG_H -I. -I.. -I ../ovs/include -I ./ovs/include -I
> ../ovs/lib
> >> -I ./ovs/lib -I ../ovs -I ./ovs -I ../lib -I ./lib -Wstrict-prototypes
> >> -Wall -Wextra -Wno-sign-compare -Wpointer-arith -Wformat
> -Wformat-security
> >> -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align
> >> -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
> >> -Wmissing-field-initializers -fno-strict-aliasing -Wswitch-bool
> >> -Wlogical-not-parentheses -Wsizeof-array-argument -Wbool-compare
> >> -Wshift-negative-value -Wduplicated-cond -Wshadow
> -Wmultistatement-macros
> >> -Wcast-align=strict -Werror -Werror -g -O2 -MT lib/actions.lo -MD -MP
> -MF
> >> lib/.deps/actions.Tpo -c ../lib/actions.c -o lib/actions.o
> >> ../lib/actions.c:723:32: error: incorrect type in initializer (different
> >> base types)
> >> ../lib/actions.c:723:32:    expected restricted ovs_be32 const
> [usertype]
> >> value
> >> ../lib/actions.c:723:32:    got unsigned int
> >> ../lib/actions.c:724:31: error: incorrect type in initializer (different
> >> base types)
> >> ../lib/actions.c:724:31:    expected restricted ovs_be32 const
> [usertype]
> >> mask
> >> ../lib/actions.c:724:31:    got unsigned int
> >> ../lib/actions.c:976:42: error: incorrect type in argument 1 (different
> >> base types)
> >> ../lib/actions.c:976:42:    expected unsigned int [usertype] __bsx
> >> ../lib/actions.c:976:42:    got restricted ovs_be32 const [usertype]
> ipv4
> >> ../lib/actions.c:976:42: error: incorrect type in argument 1 (different
> >> base types)
> >> ../lib/actions.c:976:42:    expected unsigned int [usertype] __bsx
> >> ../lib/actions.c:976:42:    got restricted ovs_be32 const [usertype]
> ipv4
> >> ../lib/actions.c:976:42: error: incorrect type in argument 1 (different
> >> base types)
> >> ../lib/actions.c:976:42:    expected unsigned int [usertype] __bsx
> >> ../lib/actions.c:976:42:    got restricted ovs_be32 const [usertype]
> ipv4
> >> ../lib/actions.c:976:42: error: incorrect type in argument 1 (different
> >> base types)
> >> ../lib/actions.c:976:42:    expected unsigned int [usertype] __bsx
> >> ../lib/actions.c:976:42:    got restricted ovs_be32 const [usertype]
> ipv4
> >> ../lib/actions.c:1970:20: error: incorrect type in initializer
> (different
> >> base types)
> >> ../lib/actions.c:1970:20:    expected restricted ovs_be32 [usertype] ofs
> >> ../lib/actions.c:1970:20:    got unsigned int
> >> *********
> >>
> >>
> >>
> >>>
> >>> br,Damijan
> >>>
> >>> On Fri, Jul 26, 2019 at 10:30 AM Dumitru Ceara <dceara at redhat.com>
> wrote:
> >>>
> >>>> On Fri, Jul 26, 2019 at 8:21 AM Numan Siddique <nusiddiq at redhat.com>
> >>>> wrote:
> >>>>>
> >>>>> Hello All,
> >>>>>
> >>>>> The split work is almost done and we have pushed it to the ovn repo
> >>>> branch
> >>>>> for now - https://github.com/ovn-org/ovn/commits/ovs_ovn_split
> >>>>> If some one is interested, please try it out and let us know any
> >>>> comments
> >>>>> or issues.
> >>>>
> >>>> Hi Numan,
> >>>>
> >>>> It looks like the ovs_ovn_split branch doesn't build:
> >>>>
> >>>> # git clone https://github.com/ovn-org/ovn.git ovn
> >>>> # cd ovn
> >>>> # ./boot.sh
> >>>> # ./configure --enable-Werror --enable-sparse
> >>>> # make
> >>>> make  all-recursive
> >>>> make[1]: Entering directory `/root/ovn'
> >>>> Making all in ovs
> >>>> make[2]: Entering directory `/root/ovn/ovs'
> >>>> make  all-recursive
> >>>> make[3]: Entering directory `/root/ovn/ovs'
> >>>> Making all in datapath
> >>>> make[4]: Entering directory `/root/ovn/ovs/datapath'
> >>>> make[5]: Entering directory `/root/ovn/ovs/datapath'
> >>>> make[5]: Leaving directory `/root/ovn/ovs/datapath'
> >>>> make[4]: Leaving directory `/root/ovn/ovs/datapath'
> >>>> make[4]: Entering directory `/root/ovn/ovs'
> >>>> make[4]: Leaving directory `/root/ovn/ovs'
> >>>> make[3]: Leaving directory `/root/ovn/ovs'
> >>>> make[2]: Leaving directory `/root/ovn/ovs'
> >>>> make[2]: Entering directory `/root/ovn'
> >>>> depbase=`echo lib/acl-log.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||'`;\
> >>>> /bin/sh ./libtool  --tag=CC   --mode=compile env REAL_CC="gcc
> >>>> -std=gnu99" CHECK="sparse -Wsparse-error -I ./include/sparse -m64 -I
> >>>> /usr/local/include  " cgcc -target=x86_64 -DHAVE_CONFIG_H -I.    -I
> >>>> ./ovs/include -I ./ovs/include -I ./ovs/lib -I ./ovs/lib -I ./ovs -I
> >>>> ./ovs -I ./lib -I ./lib    -Wstrict-prototypes -Wall -Wextra
> >>>> -Wno-sign-compare -Wpointer-arith -Wformat -Wformat-security
> >>>> -Wswitch-enum -Wunused-parameter -Wbad-function-cast -Wcast-align
> >>>> -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes
> >>>> -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror
> >>>> -Werror   -g -O2 -MT lib/acl-log.lo -MD -MP -MF $depbase.Tpo -c -o
> >>>> lib/acl-log.lo lib/acl-log.c &&\
> >>>> mv -f $depbase.Tpo $depbase.Plo
> >>>> libtool: compile:  env "REAL_CC=gcc -std=gnu99" "CHECK=sparse
> >>>> -Wsparse-error -I ./include/sparse -m64 -I /usr/local/include  " cgcc
> >>>> -target=x86_64 -DHAVE_CONFIG_H -I. -I ./ovs/include -I ./ovs/include
> >>>> -I ./ovs/lib -I ./ovs/lib -I ./ovs -I ./ovs -I ./lib -I ./lib
> >>>> -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare -Wpointer-arith
> >>>> -Wformat -Wformat-security -Wswitch-enum -Wunused-parameter
> >>>> -Wbad-function-cast -Wcast-align -Wstrict-prototypes
> >>>> -Wold-style-definition -Wmissing-prototypes
> >>>> -Wmissing-field-initializers -fno-strict-aliasing -Wshadow -Werror
> >>>> -Werror -g -O2 -MT lib/acl-log.lo -MD -MP -MF lib/.deps/acl-log.Tpo -c
> >>>> lib/acl-log.c -o lib/acl-log.o
> >>>> ./ovs/include/openvswitch/nsh.h:372:11: error: symbol '__v' shadows an
> >>>> earlier one
> >>>> ./ovs/include/openvswitch/nsh.h:372:11: originally declared here
> >>>> ./ovs/include/openvswitch/nsh.h:372:11: error: symbol '__x' shadows an
> >>>> earlier one
> >>>> ./ovs/include/openvswitch/nsh.h:372:11: originally declared here
> >>>> ./ovs/include/openvswitch/nsh.h:383:11: error: symbol '__v' shadows an
> >>>> earlier one
> >>>> ./ovs/include/openvswitch/nsh.h:383:11: originally declared here
> >>>> ./ovs/include/openvswitch/nsh.h:383:11: error: symbol '__x' shadows an
> >>>> earlier one
> >>>> ./ovs/include/openvswitch/nsh.h:383:11: originally declared here
> >>>> make[2]: *** [lib/acl-log.lo] Error 1
> >>>>
> >>>> Building ovs master works fine for me:
> >>>>
> >>>> # git clone https://github.com/openvswitch/ovs.git ovs
> >>>> # cd ovs
> >>>> # ./boot.sh
> >>>> # ./configure --enable-Werror --enable-sparse
> >>>> # make
> >>>> <snip>
> >>>> mv tests/system-afxdp-testsuite.tmp tests/system-afxdp-testsuite
> >>>> mv tests/system-kmod-testsuite.tmp tests/system-kmod-testsuite
> >>>> mv tests/system-userspace-testsuite.tmp
> tests/system-userspace-testsuite
> >>>> touch -c manpage-check
> >>>> mv tests/testsuite.tmp tests/testsuite
> >>>> make[2]: Leaving directory `/root/ovs'
> >>>> make[1]: Leaving directory `/root/ovs'
> >>>>
> >>>> Regards,
> >>>> Dumitru
> >>>>
> >>>>>
> >>>>> We are planning to push the changes to the master branch hopefully
> >>>> Friday
> >>>>> if everything goes fine.
> >>>>>
> >>>>> Thanks
> >>>>> Numan
> >>>>>
> >>>>>
> >>>>> On Fri, Jul 26, 2019 at 12:05 AM Mark Michelson <mmichels at redhat.com
> >
> >>>> wrote:
> >>>>>
> >>>>>> On 7/25/19 12:37 PM, Ilya Maximets wrote:
> >>>>>>> Hi.
> >>>>>>>
> >>>>>>> I have a question regarding the split.
> >>>>>>> Sorry if it's obvious from the RFC splitting code which I didn't
> >>>> look at.
> >>>>>>>
> >>>>>>> The question is:
> >>>>>>> How the patches for the common data structures (lists, hash maps)
> >>>> will be
> >>>>>>> applied to OVN? Will we need to post same patch for both
> >>>> repositories in
> >>>>>> the
> >>>>>>> future if it changes/fixes common libraries? Or all this code will
> >>>> be
> >>>>>> hosted
> >>>>>>> only in OVS repo and will be included like a submodule or
> >>>> something like
> >>>>>> that?
> >>>>>>>
> >>>>>>> Best regards, Ilya Maximets.
> >>>>>>
> >>>>>> Hi Ilya,
> >>>>>>
> >>>>>> OVN will be a separate repo from OVS. Initially, OVS will be a
> >>>> subtree
> >>>>>> of OVN, but soon, we will want to be able to build OVN while having
> a
> >>>>>> completely separate OVS on the system. When all is said and done, it
> >>>>>> should be possible to build OVN as long as you have, say, an
> >>>> ovs-devel
> >>>>>> package installed on your system.
> >>>>>>
> >>>>>> I think the answer to your question is that as an OVS developer, if
> >>>> you
> >>>>>> make a change to a core component, you only need to post the change
> >>>> to
> >>>>>> the OVS repo.
> >>>>>>
> >>>>>>   From an OVN developer's perspective, if an OVN feature/bugfix
> >>>> requires
> >>>>>> a parallel change to be made to a core OVS library, then the OVN
> >>>>>> developer will need to post the library change to OVS as well as the
> >>>>>> usage of that change to OVN. As long as OVS is a subtree of OVN,
> it's
> >>>>>> just a matter of ensuring the subtree is kept up to date. However,
> >>>> once
> >>>>>> OVS is built separately, then configure-time checks of OVS features
> >>>> or
> >>>>>> minimum version checks will need to be added to OVN to ensure that
> >>>> the
> >>>>>> code can build properly.
> >>>>>>
> >>>>>> This approach should place most of the burden of OVN compatibility
> >>>> with
> >>>>>> OVS on OVN developers rather than OVS developers.
> >>>>>>>
> >>>>>>>> Numan and I have discussed this, and we're planning to perform
> >>>> the split
> >>>>>>>> tomorrow July 25. Numan will be applying the commits he
> >>>> referenced below
> >>>>>>>> to the ovn-org branch to get it up to date. I will be submitting a
> >>>>>>>> review for OVS to remove all of the OVN code, documentation, etc.
> >>>> from
> >>>>>> it.
> >>>>>>>>
> >>>>>>>> If there are any reasons why we should hold off on this, please
> >>>> mention
> >>>>>>>> them as soon as possible.
> >>>>>>>>
> >>>>>>>> Thanks
> >>>>>>>>
> >>>>>>>> On 7/22/19 2:35 PM, Numan Siddique wrote:
> >>>>>>>>> Hi Ben, Mark and All,
> >>>>>>>>>
> >>>>>>>>> Now that branch 2.12 is created, shall we proceed with the
> >>>> OVS/OVN
> >>>>>> split ?
> >>>>>>>>>
> >>>>>>>>> In order to do the split we need to do the below tasks
> >>>>>>>>>
> >>>>>>>>> In ovn-org/ovn repo
> >>>>>>>>> Step 1. Sync the ovs subtree to the latest (from the OVS repo).
> >>>>>>>>> 2. Delete all the ovn related code from the root dir. Right now
> >>>> there
> >>>>>> is
> >>>>>>>>> no history for the OVN files in the ovn-org/ovn repo
> >>>>>>>>> 3. Copy OVN files from openvswitch/ovs repo using
> >>>> git-filter-branch.
> >>>>>>>>> This will preserver the history.
> >>>>>>>>> 4. Sync the test files from ovs subtree so that tests pass.
> >>>>>>>>>
> >>>>>>>>> During this period its better to freeze merging OVN related
> >>>> patches in
> >>>>>>>>> the OVS repo.
> >>>>>>>>> And finally delete the OVN related code from the OVS repo.
> >>>>>>>>>
> >>>>>>>>> I have done a PoC here -
> >>>>>>>>>
> >>>> https://github.com/numansiddique/ovn/commits/ovn_sync_from_ovs_v3/p4
> >>>>>>>>> All the relates commits can be found here.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Does these steps seem fine ? Any concerns ?
> >>>>>>>>> If this seems fine, can we choose a date to start this process ?
> >>>>>>>>>
> >>>>>>>>> Thanks
> >>>>>>>>> Numan
> >>>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>> _______________________________________________
> >>>>> dev mailing list
> >>>>> dev at openvswitch.org
> >>>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >>>> _______________________________________________
> >>>> dev mailing list
> >>>> dev at openvswitch.org
> >>>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >>>>
> >>>
> > _______________________________________________
> > dev mailing list
> > dev at openvswitch.org
> > https://mail.openvswitch.org/mailman/listinfo/ovs-dev
> >
>
>


More information about the dev mailing list