| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
This transport is based on uhd-dpdk, and it includes a global context
that must be initialized prior to creating any dpdk_zero_copy objects.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds an internal wait queue API to uhd-dpdk. Socket configuration
requests had their blocking calls re-implemented on top of this API, and
it is also used to service requests to wait on RX packets (w/ timeout).
The wait API involves a multi-producer, single-consumer queue per I/O
thread (waiter_ring), with a condition variable used for sleeping. The
data structure is shared between user thread and I/O thread, and because
timeouts make resource release time non-deterministic, we use reference
counting on the shared resource.
One reference is generated by the user thread and passed to the I/O
thread to consume. A user thread that still needs the data after waking
must get() another reference, to postpone the destruction of the
resource until it is done.
Timeouts are based on CLOCK_MONOTONIC. For recv, a timeout of 0
indicates blocking indefinitely, and a negative timeout indicates no
timeout is desired.
Also drop timeout for closing sockets in uhd-dpdk.
The timeout would allow a user thread to pre-empt the I/O thread's
cleanup process. The user thread would free data structures the I/O
thread still needed to function. Since this timeout is superfluous
anyway, let's just get rid of it.
Also add some more input checking and error reporting.
|
|
|
|
|
|
|
|
|
|
|
|
| |
Set MTU of Ethernet ports:
Some NICs (like the Mellanox ones) require this to work.
Add ARP responder to uhd-dpdk.
Clean up pending ARP request list when done:
Threads waiting for an ARP request to complete would be woken up when
the request completed, but they wouldn't get removed from the list of
pending requests. This fixes the issue.
|
| |
|
|
|
|
| |
This fixes a C4267 which pops up a lot when compiling UHD with MSVC.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also updates our coding style file.
Ancient CMake versions required upper-case commands. Later command
names became case-insensitive. Now the preferred style is lower-case.
Run the following shell code (with GNU compliant sed):
cmake --help-command-list | grep -v "cmake version" | while read c; do
echo 's/\b'"$(echo $c | tr '[:lower:]' '[:upper:]')"'\(\s*\)(/'"$c"'\1(/g'
done > convert.sed \
&& git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' \
'*CMakeLists.txt' | xargs -0 gsed -i -f convert.sed && rm convert.sed
(Make sure the backslashes don't get mangled!)
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This library makes available a userspace network stack with a
socket-like interface for applications (except the sockets pass around
pointers to buffers and use the buffers directly--It's sockets + a
put/get for buffer management). Supported services are ARP and UDP.
Destinations can be unicast or broadcast. Multicast is not currently
supported.
The implementation has two driver layers. The upper layer runs within
the caller's context. The caller will make requests through lockless
ring buffers (including socket creation and packet transmission), and
the lower layer will implement the requests and provide a response.
Currently, the lower layer runs in a separate I/O thread, and the caller
will block until it receives a response.
The I/O thread's main body is in src/uhd_dpdk_driver.c. You'll find that
all I/O thread functions are prefixed by an underscore, and user thread
functions do not.
src/uhd_dpdk.c is used to initialize uhd-dpdk and bring up the network
interfaces.
src/uhd_dpdk_fops.c and src/uhd_dpdk_udp.c are for network services.
The test is a benchmark of a flow control loop using a certain made-up
protocol with credits and sequence number tracking.
|
|
|
|
|
|
|
|
| |
By default, Boost.ASIO uses 'address_configured' mode for UDP endpoint
resolution, which "only return[s] IPv4 addresses if a non-loopback
IPv4 address is configured for the system". This changes the resolver
to use 'all_matching', which instead returns "all matching IPv6 and
IPv4 addresses".
|
|
|
|
|
|
| |
This is a common message that will always occur during device init when
there is no RIO device available. Because it looks like an error, it
confuses people and was thus reduced to TRACE.
|
|
|
|
|
|
|
| |
Ethernet buffering is now done so that most of the buffering is done in
the socket buffers and multiple frames are only used to support the
receive side offload of the socket I/O. Eliminates dropped packets at
high full duplex rates.
|
|
|
|
|
| |
This is to allow for num_recv_frames=1 and reduce conversions from ticks
to time_spec_t to improve critical path performance.
|
| |
|
| |
|
|
|
|
| |
Replace with std::this_thread::sleep_for().
|
| |
|
|
|
|
|
| |
Some uses of boost::posix_time were incorrect and would cause compiler
errors on Boost 1.67.
|
|
|
|
| |
This avoids having to redeclare the static const to avoid linker errors.
|
|
|
|
| |
Use std::this_thread::sleep_for() instead.
|
|
|
|
|
|
| |
Static const attributes were causing linker issues the way there were
being used, but they were only used in niusrprio_session.cpp and thus
could be factored out.
|
| |
|
|
|
|
|
| |
Note: When socket buffers are incorrectly size, a WARNING is still
printed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
To avoid the proliferation of additional include directories and
multiple ways of including project-local headers, we now default to
moving all headers that are used across UHD into the uhdlib/
subdirectory.
Some #include statements were also reordered as they were modified for
closer compliance with the coding guidelines.
Internal cpp source files should now include files like this:
#include <uhdlib/rfnoc/ctrl_iface.hpp>
Reviewed-by: Ashish Chaudhari <ashish.chaudhari@ettus.com>
|
|
|
|
|
| |
- Reading line by line avoids loading the entire 25 MB bitstream into memory
since the MD5 hash usually occurs within the first 1% of the file stream
|
|
|
|
|
|
|
| |
All copyright is now attributed to "Ettus Research, a National
Instruments company".
SPDX headers were also updated to latest version 3.0.
|
| |
|
|
|
|
| |
Thanks to FX Coudert for suggesting this fix.
|
|
|
|
|
|
|
| |
Remove the redundant send/recv buffer_pools from nirio_zero_copy_impl
class as no one is using them.
Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
|
|
|
|
|
|
|
| |
Check return value of liberio_chan_set_fixed_size() since it can fail,
and bad things happen if one just proceeds.
Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The timeout value passed in by UHD would get multiplied by USEC,
to convert from the UHD value in seconds to the liberio value in
microseconds.
The bug manifested itself by calling liberio_dequeue_buf() with a
timeout equivalent to 100s.
Fixes ed1c64c81 ('transport: Added liberio_zero_copy transport ...')
Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
Cc: Alex Williams <alex.williams@ni.com>
|
|
|
|
|
|
|
| |
Remove stray tabs from liberio_zero_copy transport and clarify actual
code flow by fixing indent.
Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
|
|
|
|
|
| |
- Remove multi-line log message for socket creation
- Include local addr and port in trace messages
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This adds a zero copy transport using the liberio library.
Currently supported API version for liberio is 0.3, this might
still very much break, since the library is still in development.
So far nobody uses it UHD so we might as well merge it.
Signed-off-by: Alex Williams <alex.williams@ni.com>
Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com>
|
| |
|
| |
|
| |
|
|\ |
|
| |
| |
| |
| | |
nirio_zero_copy transport.
|
| |
| |
| |
| |
| | |
Worker threads significantly increased CPU load and did not increase performance
as expected.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
This affects some versions of Clang when using C++11 features.
|
| | |
|
|\| |
|
| |
| |
| |
| |
| | |
for send() calls.
- One worker thread per channel provides for improved scalability
|