On 3/11/26 2:01 PM, Aaron Conole wrote:
> Ilya Maximets <[email protected]> writes:
> 
>> On 3/10/26 10:15 AM, David Marchand wrote:
>>> Hello Aaron,
>>>
>>> On Mon, 9 Mar 2026 at 17:19, Aaron Conole via dev
>>> <[email protected]> wrote:
>>>>
>>>> Timothy Redaelli notes that, for example, when building with DPDK - EVERY
>>>> binary object is linked to DPDK libraries - which includes things like
>>>> ovs-appctl, ovs-vsctl, etc.
>>>>
>>>> This is a first cut at improving things.  Create a separate libovscommon
>>>> library that for example, the ovsdb-* suite, and some ovs-* utilities can
>>>> use rather than linking to the large libopenvswitch library.  This improves
>>>> the situation somewhat:
>>>>
>>>>  pre-series binary file usage: 279.37 MB
>>>>  post-series binary file usage: 185.47 MB
>>>>
>>>> There is additional work we can do, but I spent enough time ripping apart
>>>> dependencies to save almost 100M on disk (on my fedora 43 x86_64 system).
>>>> There are additional areas that could be refactored, for instance the
>>>> vconn and ofpbuf code could be extracted to shrink ovs-ofctl/ovs-vsctl
>>>> to see additional savings.
>>>>
>>>> The patch is split up so that all the beginning work is mostly about moving
>>>> code around, and the final patch introduces what I'm calling the
>>>> libovscommon library.  I've updated the NEWS file since this is API/ABI
>>>> breaking changes.
>>>>
>>>> Aaron Conole (5):
>>>>   lib/net-proto: Create a new net-proto module for handling generic
>>>>     network protocols.
>>>>   lib/ct-state: Move ct-state macros to their own header.
>>>>   lib/packets: Remove flow_tnl_equal.
>>>>   lib/dp-packet: Fold the 'packets' module into dp-packets.
>>>>   libs: Introduce libovscommon to isolate common routines.
>>>
>>> Thanks for this cleanup, I like the direction this series takes.
>>> Some quick comments/nits.
>>>
>>> - I would put the flow_tnl_equal removal (kind of a fix) early in the 
>>> series.
>>>
>>> - The renames and internal movement of code is hard to follow in patch 2.
>>> For example, two more renames were missed in the commitlog:
>>> * packet_set_ipv6_flow_label => ip_set_ipv6_flow_label
>>> * packet_set_ipv6_tc => ip_set_ipv6_tc
>>> I would add a (exhaustive) note in NEWS about the renames.
>>>
>>> Because of those renames, indent can be fixed (the renamed functions
>>> have now a shorter prefix).
>>>
>>> If possible, have those renames in a preparation patch before moving
>>> all code around (and avoid moving helpers between them during this
>>> move).
>>> This is just to ease review, this could be squashed when applying, no
>>> strong opinion.
>>
>> I'm also a little unsure if we even need to rename the packet_* functions,
>> as I'm not sure if we need to move them.  They are moved to a new net-proto,
>> but the packets module is deleted.  I don't see a big difference between
>> the net-proto and the packets naming, so I'm not sure why this move is done.
>> We could just keep the functions in the packets.c.  Or am I missing 
>> something?
> 
> I started by just doing that, but it became a bit strange to read for me
> as packets.h/.c in lib had nothing to do with 'packets' and much to do
> with net/inet protocol work.
> 
>> Also there is the include/openvswitch/packets.h public counterpart to
>> packets.[ch].  It has to be taken into account and renamed as well if we're
>> going to rename the internal module.
> 
> It makes sense to me.  The 'naming' of include/openvswitch/packets.h
> seems too generic for what is there.
> 
>>>
>>> - In patch 4, flow_tnl_(src|dst) should probably move to lib/flow.c
>>> rather than lib/dp-packet.c
>>>
>>> - In patch 4, I would prefix functions moved to dp-packet.c with
>>> dp_packet_ (but that's a huge rename... so not a strong opinion).
>>>
>>> - You probably noticed that FreeBSD compilation is broken, some header
>>> inclusion is missing/broken.
>>>
>>> - I prefer libopenvswitchutils.a (or -utils.a) but I can live with
>>> your libovscommon.a :-).
>>>
>>> Isolating dp-packet is one important step.
>>> You listed vconn and ofpbuf,
>>
>> ofpbuf and vconn are used by the tools and a lot of other code, I'm not sure
>> if we need to move them to a separate library.  A lot of things rely on them.
> 
> You would prefer them to be in this common library instead?

What we could do if to put all the OpenFlow handling modules like all the
lib/ofp* code and rconn/vconn into something like libopenflow.  But I'm
not really sure if we'll gain anything from doing that, as it will depend
on the libovscommon.  And by itself will unlikley to be large enough to
be important to split up from the libovscommon.  We could do that anyway
for the internal separation, but it's definitely a low priority thing.

The other way around might be to have libopenflow to only include the
lib/ofp* stuff, and actually export this one, as all that is a public API
anyways.  This way external applications could use all the OpenFlow
functions from this library without needing the libovscommon.  But then
libovscommon will need to link libopenflow.  This is also an interesting
way forward, but for entirely different reasons.  And we'll have to make
sure that all the OpenFlow functions actually produce messages with correct
length fields in this case, as users will not be able to rely on vconn
fixing them.

> 
>>> I think that the netdev* stuff also does
>>> not have to be in the common library.
>>
>> Note: FWIW, on a brief look at what is being separated, OVN will have to
>> link both libraries anyway as it uses dp-packet and netlink notifiers.
> 
> Yes.  The idea is to reduce that surface.  This is a first step towards
> that goal, though.
> 
>> Best regards, Ilya Maximets.
> 

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to