ndp_timer() is called right away on the first epoll_wait() cycle, when the communication channel to the guest isn't ready yet: 1.0038: NDP: sending unsolicited RA, next in 264s 1.0038: tap: failed to send 1 frames of 1 check that it's up before sending it. This effectively delays the first gratuitous router advertisement, which is probably a good idea given that we expect the guest to send a router solicitation right away. Fixes: 6e1e44293ef9 ("ndp: Send unsolicited Router Advertisements") Signed-off-by: Stefano Brivio <sbrivio(a)redhat.com> --- ndp.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/ndp.c b/ndp.c index 7ee44b2..b458785 100644 --- a/ndp.c +++ b/ndp.c @@ -420,9 +420,12 @@ void ndp_timer(const struct ctx *c, const struct timespec *now) interval = min_rtr_adv_interval + random() % (max_rtr_adv_interval - min_rtr_adv_interval); - info("NDP: sending unsolicited RA, next in %llds", (long long)interval); + if (next_ra) { + info("NDP: sending unsolicited RA, next in %llds", + (long long)interval); - ndp_ra(c, &in6addr_ll_all_nodes); + ndp_ra(c, &in6addr_ll_all_nodes); + } next_ra = now->tv_sec + interval; } -- 2.43.0