aboutgitcodebugslistschat
path: root/tap.c
diff options
context:
space:
mode:
authorStefano Brivio <sbrivio@redhat.com>2022-03-18 12:18:19 +0100
committerStefano Brivio <sbrivio@redhat.com>2022-03-29 15:35:38 +0200
commitbe5bbb9b06811b98f677460fd2b89001db580582 (patch)
tree51bdd9b9e918649776806605436fc2bde3878810 /tap.c
parent3eb19cfd8a7c03920aeecae6692048429288af88 (diff)
downloadpasst-be5bbb9b06811b98f677460fd2b89001db580582.tar
passt-be5bbb9b06811b98f677460fd2b89001db580582.tar.gz
passt-be5bbb9b06811b98f677460fd2b89001db580582.tar.bz2
passt-be5bbb9b06811b98f677460fd2b89001db580582.tar.lz
passt-be5bbb9b06811b98f677460fd2b89001db580582.tar.xz
passt-be5bbb9b06811b98f677460fd2b89001db580582.tar.zst
passt-be5bbb9b06811b98f677460fd2b89001db580582.zip
tcp: Rework timers to use timerfd instead of periodic bitmap scan
With a lot of concurrent connections, the bitmap scan approach is not really sustainable. Switch to per-connection timerfd timers, set based on events and on two new flags, ACK_FROM_TAP_DUE and ACK_TO_TAP_DUE. Timers are added to the common epoll list, and implement the existing timeouts. While at it, drop the CONN_ prefix from flag names, otherwise they get quite long, and fix the logic to decide if a connection has a local, possibly unreachable endpoint: we shouldn't go through the rest of tcp_conn_from_tap() if we reset the connection due to a successful bind(2), and we'll get EACCES if the port number is low. Suggested by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
Diffstat (limited to 'tap.c')
-rw-r--r--tap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/tap.c b/tap.c
index a1ccfc1..59a87f9 100644
--- a/tap.c
+++ b/tap.c
@@ -939,7 +939,7 @@ void tap_sock_init(struct ctx *c)
* @c: Execution context
* @fd: File descriptor where event occurred
* @events: epoll events
- * @now: Current timestamp
+ * @now: Current timestamp, can be NULL on EPOLLERR
*/
void tap_handler(struct ctx *c, int fd, uint32_t events, struct timespec *now)
{