passt: Actually initialise timers for protocol handlers

The initial timestamp was not initialised, so timers for protocol
handlers wouldn't run at all sometimes.

Signed-off-by: Stefano Brivio <sbrivio@redhat.com>
This commit is contained in:
Stefano Brivio 2021-09-27 00:16:51 +02:00
parent 4b0ccb8323
commit 3943f20ef9

18
passt.c
View file

@ -126,6 +126,16 @@ static void timer_handler(struct ctx *c, struct timespec *now)
} }
} }
/**
* timer_init() - Set initial timestamp for timer runs to current time
* @c: Execution context
* @now: Current timestamp
*/
static void timer_init(struct ctx *c, struct timespec *now)
{
c->tcp.timer_run = c->udp.timer_run = c->icmp.timer_run = *now;
}
/** /**
* proto_update_l2_buf() - Update scatter-gather L2 buffers in protocol handlers * proto_update_l2_buf() - Update scatter-gather L2 buffers in protocol handlers
* @eth_d: Ethernet destination address, NULL if unchanged * @eth_d: Ethernet destination address, NULL if unchanged
@ -363,8 +373,10 @@ int main(int argc, char **argv)
tap_sock_init(&c); tap_sock_init(&c);
if ((!c.no_udp && udp_sock_init(&c)) || clock_gettime(CLOCK_MONOTONIC, &now);
(!c.no_tcp && tcp_sock_init(&c)))
if ((!c.no_udp && udp_sock_init(&c, &now)) ||
(!c.no_tcp && tcp_sock_init(&c, &now)))
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
if (c.v6 && !c.no_dhcpv6) if (c.v6 && !c.no_dhcpv6)
@ -379,6 +391,8 @@ int main(int argc, char **argv)
if (isatty(fileno(stdout)) && !c.foreground) if (isatty(fileno(stdout)) && !c.foreground)
daemon(0, 0); daemon(0, 0);
timer_init(&c, &now);
loop: loop:
nfds = epoll_wait(c.epollfd, events, EPOLL_EVENTS, TIMER_INTERVAL); nfds = epoll_wait(c.epollfd, events, EPOLL_EVENTS, TIMER_INTERVAL);
if (nfds == -1 && errno != EINTR) { if (nfds == -1 && errno != EINTR) {