sd-ndisc: disable timer event source only when a valid RA received

Fixes #31439.
This commit is contained in:
Yu Watanabe
2024-02-22 13:59:57 +09:00
parent be66a80bc2
commit e7cb80474d

View File

@@ -196,6 +196,8 @@ static int ndisc_handle_datagram(sd_ndisc *nd, sd_ndisc_router *rt) {
if (r < 0)
return r;
(void) event_source_disable(nd->timeout_event_source);
log_ndisc(nd, "Received Router Advertisement: flags %s preference %s lifetime %s",
rt->flags & ND_RA_FLAG_MANAGED ? "MANAGED" : rt->flags & ND_RA_FLAG_OTHER ? "OTHER" : "none",
rt->preference == SD_NDISC_PREFERENCE_HIGH ? "high" : rt->preference == SD_NDISC_PREFERENCE_LOW ? "low" : "medium",
@@ -253,7 +255,6 @@ static int ndisc_recv(sd_event_source *s, int fd, uint32_t revents, void *userda
if (in6_addr_is_null(&rt->address))
log_ndisc(nd, "Received RA from null address. Ignoring.");
(void) event_source_disable(nd->timeout_event_source);
(void) ndisc_handle_datagram(nd, rt);
return 0;
}