> On Dec 20, 2018, at 5:48 PM, Stephen Hemminger <step...@networkplumber.org> 
> wrote:
> 
> On Thu, 20 Dec 2018 21:59:37 +0000
> Ferruh Yigit <ferruh.yi...@intel.com> wrote:
> 
>> On 10/24/2018 9:18 AM, olivier.matz at 6wind.com (Olivier Matz) wrote:
>>> This RFC targets 19.02.
>>> 
>>> The rte_net headers conflict with the libc headers, because
>>> some definitions are duplicated, sometimes with few differences.
>>> This was discussed in [1], and more recently at the techboard.
>>> 
>>> Before sending the deprecation notice (target for this is 18.11),
>>> here is a draft that can be discussed.
>>> 
>>> This RFC adds the rte_ (or RTE_) prefix to all structures, functions
>>> and defines in rte_net library. This is a big changeset, that will
>>> break the API of many functions, but not the ABI.
>>> 
>>> One question I'm asking is how can we manage the transition.
>>> Initially, I hoped it was possible to have a compat layer during
>>> one release (supporting both prefixed and unprefixed names), but
>>> now that the patch is done, it seems the impact is too big, and
>>> impacts too many libraries.
>>> 
>>> Few examples:
>>>  - rte_eth_macaddr_get/add/remove() use a (struct rte_ether_addr *)
>>>  - many rte_flow structures use the rte_ prefixed net structures
>>>  - the mac field of virtio_net structure is rte_ether_addr
>>>  - the first arg of rte_thash_load_v6_addrs is (struct rte_ipv6_hdr *)
>>>  ...
>>> 
>>> Therefore, it is clear that doing this would break the compilation
>>> of many external applications.
>>> 
>>> Another drawback we need to take in account: it will make the
>>> backport of patches more difficult, although this is something
>>> that could be tempered by a script.
>>> 
>>> While it is obviously better to have a good namespace convention, 
>>> we need to identify the issues we have today before deciding it's
>>> worth doing the change.
>>> 
>>> Comments?  
>> 
>> Is there an consensus about the patchset? There was a decision on techboard 
>> to
>> go with this change (adding rte_ prefix) [1].
>> 
>> 
>> This is something that will affect DPDK consumers. Since many APIs are 
>> changing
>> most probably will break API compatibility for many libraries.
>> 
>> Meanwhile the conflict with the libc headers mentioned a few times in the 
>> past,
>> this is something we need to fix.
>> 
>> There are a few comments reluctant to this big modification, but what I
>> understand from Olivier's response both using BSD defines or having
>> compatibility headers in DPDK won't solve the problem completely.
>> 
>> And assuming we will continue with this solution, another question is do we
>> still want to push in 19.02 scope? (And from process point of view I think a
>> deprecation notice is not merged for this change in 18.11 scope.)
>> 
>> With the prediction of 19.05 will be big and already break API/ABI for some
>> libraries, can we push this into 19.05 as an early merge into repo?
>> 
>> And I think this patch will affect LTS releases and will break auto 
>> backporting
>> for many fixes because it touches many places, so pushing this change even to
>> next LTS (19.11) can be an option.
>> 
>> 
>> Olivier, Thomas,
>> 
>> What do you think about postponing this to 19.05 or even 19.11 ?
>> 
>> 
>> 
>> [1]
>> https://mails.dpdk.org/archives/dev/2018-October/116695.html
>> 
>>> 
>>> 
>>> Things that are missing in RFC:
>>> - test with FreeBSD
>>> - manually fix some indentation issues
>>> 
>>> 
>>> Olivier Matz (14):
>>>  net: add rte prefix to arp structures
>>>  net: add rte prefix to arp defines
>>>  net: add rte prefix to ether structures
>>>  net: add rte prefix to ether functions
>>>  net: add rte prefix to ether defines
>>>  net: add rte prefix to esp structure
>>>  net: add rte prefix to gre structure
>>>  net: add rte prefix to icmp structure
>>>  net: add rte prefix to icmp defines
>>>  net: add rte prefix to ip structure
>>>  net: add rte prefix to ip defines
>>>  net: add rte prefix to sctp structure
>>>  net: add rte prefix to tcp structure
>>>  net: add rte prefix to udp structure  
>> 
>> 
> 
> Sigh. Another case where DPDK has to reinvent something because
> we can't figure out how to do dependent libraries correctly.
> I would have rather just using the existing Linux, BSD definitions
> and fixing the DPDK code.
> 
> It is probably the only viable compromise, but it adds to long
> term maintenance, and breaks DPDK applications. Neither of which
> is a good thing.
> 
> Should this be done by marking the old structure deprecated
> first? Ideally, spread over three releases: first, tell the users
> in the documentation it is coming; second, mark the old structures
> as deprecated causing compiler warnings; third, remove the old
> definitions.  Doing at once is introducing user pain for no gain.

+1

Regards,
Keith

Reply via email to