diff options
author | Stefano Brivio <sbrivio@redhat.com> | 2021-09-09 15:16:46 +0200 |
---|---|---|
committer | Stefano Brivio <sbrivio@redhat.com> | 2021-09-09 15:40:04 +0200 |
commit | e58828f3406741afbeb866edf19d57bb81a5275a (patch) | |
tree | 7ac8ae7123b01cfe8ce169188e5020a4624414ca /tap.c | |
parent | 5e23b1ef449bc191b7d0c6f0f7bdcfe28060596f (diff) | |
download | passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar.gz passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar.bz2 passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar.lz passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar.xz passt-e58828f3406741afbeb866edf19d57bb81a5275a.tar.zst passt-e58828f3406741afbeb866edf19d57bb81a5275a.zip |
tcp: Fixes for closing states, spliced connections, out-of-order packets, etc.
This fixes a number of issues found with some heavier testing with
uperf and neper:
- in most closing states, we can still accept data, check for EPOLLIN
when appropriate
- introduce a new state, ESTABLISHED_SOCK_FIN_SENT, to track the fact
we already sent a FIN segment to the tap device, for proper sequence
number bookkeeping
- for pasta mode only: spliced connections also need tracking of
(inferred) FIN segments and clean half-pipe shutdowns
- streamline resetting epoll_wait bitmaps with a new function,
tcp_tap_epoll_mask(), instead of repeating the logic all over the
place
- set EPOLLET for tap connections too, whenever we are waiting for
EPOLLRDHUP or an event from the tap to proceed with data transfer,
to avoid useless loops with EPOLLIN set
- impose an additional limit on the sending window advertised to the
guest, given by SO_SNDBUF: it makes no sense to completely fill
the sending buffer and send a zero window: stop a bit before we
hit that
- handle *all* interrupted system calls as needed
- simplify the logic for reordering of out-of-order segments received
from tap: it's not a corner case, and the previous logic allowed
for deadloops
- fix comparison of seen IPv4 address when we get a new connection
from a socket directed to the configured guest address
Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
0 files changed, 0 insertions, 0 deletions