Unfortunately, this change has broken the build for SPDK on Windows.
To use the DPDK libraries, an application needs to include the rte_*
header, which includes rte_os.h via rte_common.h. The definition of
ETOOMANYREFS clashes with the value used when building the SPDK on Windows.
The fundamental issue here is how to support missing POSIX/Linux
functionality. If I understand correctly, the EAL should be responsible
for providing all such functionality. The support should be private to
the EAL and only exported through rte_* definitions.
This means that rte_os.h should not include POSIX/Linux definitions to
avoid clashes such as the one seen with this change. It's clearly not
sustainable if applications have to be modified every time we add more
Windows support to the DPDK.
Note that this is not an isolated issue - most of the definitions in
rte_os.h (redefining close, unlink, strdup etc) should not be present if
other layers (application, other libraries, etc) are to be able to
implement their own POSIX/Linux support.
Please can we back this change out until we have a strategy that allows
us to make these definitions available for 'internal' use, but prevent
them being visible outside of the DPDK tree. If we can't wrap them with
rte_* yet, perhaps the short term solution could be as simple as setting
RTE_DEFINE_POSIX when building DPDK code and hiding them if it is not set?
Apologies that I didn't spot the issue earlier.
Thanks,
Nick
On 15/11/2020 23:10, Thomas Monjalon wrote:
15/11/2020 00:13, Dmitry Kozlyuk:
On Sun, 15 Nov 2020 00:21:29 +0200, Tal Shnaiderman wrote:
The ETOOMANYREFS errno is missing from the Windows build.
it is used in initialization of flow error structures.
The commit will define it with the same error code used by
WSAETOOMANYREFS.
Signed-off-by: Tal Shnaiderman <tal...@nvidia.com>
---
v2: log message fix, apply errno to both Windows builds
and remove dependency on winsock2.h [DmitryK]
Acked-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com>
Applied, thanks