This commit adds unit tests for the SO_REUSEADDR socket option to test
the different possible scenarios for the option to work correctly.
There is also a fix for the TCP testsuite to make a now failing test
pass again due to a TIME_WAIT socket.
Signed-off-by: Tobias Frauenschläger <t.frauenschlaeger@me.com>
For some reason, tests/net/socket/tcp/net.socket.tcp.preempt
was failing to link for vmu_rt1170 with these changes, and
for some reason reducing CONFIG_POSIX_MAX_FDS from 20 to 10
resolves that issue.
ld.bfd: scripts/build/gen_kobject_placeholders.py \
did not reserve enough space for kobject rodata.
Memory region Used Size Region Size %age Used
FLASH: 287860 B 64 MB 0.43%
RAM: 86460 B 512 KB 16.49%
OCRAM: 0 GB 256 KB 0.00%
OCRAM1: 0 GB 512 KB 0.00%
OCRAM2: 0 GB 512 KB 0.00%
ITCM: 0 GB 256 KB 0.00%
DTCM: 13908 B 256 KB 5.31%
IDT_LIST: 0 GB 2 KB 0.00%
collect2: error: ld returned 1 exit status
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Add an `after()` function that is executed after each test in
the testsuite.
Previously, even if one one test failed, it would calls almost
all subsequent tests to fail. This way, other tests can still
succeed.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
The FIONREAD ioctl (or rather ZFD_IOCTL_FIONREAD) returns the
number of bytes available on the socket that can be read
immediately.
Test that the ioctl behaves according to the expectation.
Signed-off-by: Christopher Friedt <cfriedt@meta.com>
Accidentally statements to enable logging in the TCP socket test
where pushed. This broke some tests running on real devices due
to the additional code size.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
To avoid a TCP connection from collapsing a link, implement a collision
avoidance algorithm. Initially TCP new Reno is implemented for its
simplicity.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Add test that verifies that accept() call is interrupted correctly when
the socket is closed from another thread.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Add test that verifies that recv() call is interrupted correctly when
the socket is closed from another thread.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Twister now supports using YAML lists for all fields that were written
as space-separated lists. Used twister_to_list.py script. Some artifacts
on string length are due to how ruamel dumps content.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
Set explicit loopback MTU for TCP tests for clarity,
and to avoid breaking tests if changed elsewhere.
Signed-off-by: Kenny Johansson <wirehell@gmail.com>
Add new test cases for SO_RCVBUF/SO_SNDBUF which verify that setting
those options actually affects the RX/TX window sizes at the TCP level.
Existing tests only verified whether the options can be set/read
correctly.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
There is a test case which verifies that no new packets show up on the
interface, assuming that the only source of the packets is TCP stack.
ND protocol could interfere with that assumption, sending
advertisements.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
After several fixes of the re-ordering logic in TCP, the receive queue
works as intended and cleans itself up properly. Previously the default
timeout was 100 ms, which pretty much disables it for real applications.
Increase the timeout to 2 seconds to actually enable it for in practice.
This should help pass much more of the Maxwell Pro tests.
This is the first step before removing the timeout completely.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
As the TCP test suite is intended to run over loopback interface, use
loopback addresses and skip configuration of other addresses.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
When the NO_DELAY option is enabled, the retransmitted packets
will likely be differently broken down from the packets transmitted
initially. This provides a nice stress test for the out or order
reception logic.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Instead of waiting for the retransmit timeout, retransmit as soon as
missing data is deduced based on a triple-duplicate ACK.
Increase the number of buffers in the testcase, to allow for at least 4
packets in flight to trigger the triple-duplicate ACK.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Disable unstable tests cases for mps2_an385, which fail sporadically
due to timer stability issues on that platform (see #48608).
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Loosen some timing constraints in order to hack arond spurious
failures in upstream Zephyr's CI while working on an unrelated task.
Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit disables the `net.socket.tcp.preempt` test on the
`mps2_an385` platform because it fails very frequently due to the
system timer stability issues.
For more details, refer to the issue zephyrproject-rtos/zephyr#48608.
Signed-off-by: Stephanos Ioannidis <root@stephanos.io>
Add a bunch of missing "zephyr/" prefixes to #include statements in
various test and test framework files.
Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com>
It can happen that two similar stacks enter a retransmission cycle
due to a packet collision. If the transmission timeout is the same
both stacks will retry at the same moment resulting in another
collision.
By introducing a randomized retry timeout, the chance of
a second collision is reduced and it reduces furter the more
retransmissions occur.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Apply an exponentially increasing wait time between tcp retries. This
is a good balance between reacting fast to single lost packets and reduce
the network load when an outage takes a little longer. It also allows the
connection to survive a longer interruption with less retransmissions.
Update the test to accommodate for the increased socket closure timeout
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Previously the test waited for the worst case time till all sockets
where closed, this causes the test to wait for a long unnecessary time.
Secondly it does not ensure the sockets are actually closed before
starting the next tests.
For tests that are not conducted in user mode, wait until all the contexts
are close for a maximum time. If the contexts are not closed in time raise
an explicit assertion.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
A reproducible case to the behavior when during a connection
the link gets broken and all data is lost, the TCP connection
should properly terminate.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
When there is no response from the server, a client side close
is obstructed, it should terminate and clean the context. This
tests breaks the connection after the accept and validates
this behavior.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
In order to bring consistency in-tree, migrate all tests to the new
prefix <zephyr/...>. Note that the conversion has been scripted, refer
to #45388 for more details.
Signed-off-by: Gerard Marull-Paretas <gerard.marull@nordicsemi.no>
The close function on a TCP socket can return before the complete
socket has been closed, as there might be packets still in flight.
Add a wait at the end of the test so we are sure all sockets have
been closed before the next test starts.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
The close function on a TCP socket can return before the complete
socket has been closed, as there might be packets still in flight.
Modify the test to wait briefly (less then the retransmit time), before
counting the number of still open net_contexts. This makes the test
outcome not dependent on the scheduling order of the different tasks.
Secondly the test actually checks the number of open contexts to be zero
so there is no need to wait for any open contexts to still close.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
When there is no response from the server, a client side connect
should return a ETIMEOUT. This tests breaks the connection and validates
this behavior.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
A reproducible case to see what happens when the TCP stack runs out
of buffers. It transfers a block, bigger then the number of buffers
available.
Also test by introducing packet loss in the loopback driver.
Signed-off-by: Sjors Hettinga <s.a.hettinga@gmail.com>
Since the loopback driver makes use of the RX packet pool now, adjust
the packet count for the test.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
A common pattern here was to take the work item as the subfield of a
containing object. But the contained field is not a k_work, it's a
k_work_delayable.
Things were working only because the work field was first, so the
pointers had the same value. Do things right and fix things to
produce correct code if/when that field ever moves within delayable.
Signed-off-by: Yong Cong Sin <yongcong.sin@gmail.com>
Fixes: #38403
Adding NET_DRIVERS menuconfig so that network drivers are grouped
together in its own menu entry under drivers, similar to most other
drivers.
This further has the advantages that `CONFIG_NET_DRIVERS` can be used
for testing to determine if network drivers has been selected.
This changed revealed a dependency loop where both `select` (for SLIP)
and `depends` (for PPP) which both depends on NET_DRIVERS` where in use
in the dependency tree for Qemu networking, especially NET_SLIP_TAP.
This is handled by defaulting `NET_DRIVERS` to `y` when building for a
Qemu target.
`SLIP` had a dependency to `!QEMU_TARGET || NET_QEMU_SLIP`. This is
changed so that SLIP prompt depends on `!QEMU_TARGET` which provides
full user control in hardware but makes the symbol promptless on Qemu
targets.
Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
Move to CMake 3.20.0.
At the Toolchain WG it was decided to move to CMake 3.20.0.
The main reason for increasing CMake version is better toolchain
support.
Better toolchain support is added in the following CMake versions:
- armclang, CMake 3.15
- Intel oneAPI, CMake 3.20
- IAR, CMake 3.15 and 3.20
Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
Replace all existing deprecated API with the recommended alternative.
Signed-off-by: Peter Bigot <peter.bigot@nordicsemi.no>
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
../src/main.c:662:13: warning: cast from pointer to integer of different
size [-Wpointer-to-int-cast]
662 | int sock = (int)p1;
| ^
../src/main.c: In function 'spawn_child':
../src/main.c:671:4: warning: cast to pointer from integer of different
size [-Wint-to-pointer-cast]
671 | (void *)sock, NULL, NULL, 0, K_USER,
Signed-off-by: Flavio Ceolin <flavio.ceolin@intel.com>
some tests configured with CONFIG_NEWLIB_LIBC=y,
it's better to add a filter filter: TOOLCHAIN_HAS_NEWLIB == 1
in those tests yaml file.
Signed-off-by: Watson Zeng <zhiwei@synopsys.com>