aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2021-09-09 15:16:46 +0200
committerStefano Brivio <sbrivio@redhat.com>2021-09-09 15:40:04 +0200
commite58828f3406741afbeb866edf19d57bb81a5275a (patch)
tree7ac8ae7123b01cfe8ce169188e5020a4624414ca /tap.c
parent5e23b1ef449bc191b7d0c6f0f7bdcfe28060596f (diff)
downloadpasst-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