sd-ndisc.c: Move Router Solicitation sending after timer computaion

Move ICMPv6 Router Solicitation sending after timer computation so
that timers are already set up when the packet is being sent. This
makes it possible to create a test that inspects Router
Solicitation timer values when the Router Solicitation is sent out
on the network.
This commit is contained in:
Patrik Flykt 2017-05-19 16:22:46 +03:00
parent 1bd6f8953d
commit e82a19cb18

View file

@ -281,12 +281,6 @@ static int ndisc_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
assert(nd);
assert(nd->event);
r = icmp6_send_router_solicitation(nd->fd, &nd->mac_addr);
if (r < 0) {
log_ndisc_errno(r, "Error sending Router Solicitation: %m");
goto fail;
}
assert_se(sd_event_now(nd->event, clock_boottime_or_monotonic(), &time_now) >= 0);
nd->timeout_event_source = sd_event_source_unref(nd->timeout_event_source);
@ -319,6 +313,12 @@ static int ndisc_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
goto fail;
}
r = icmp6_send_router_solicitation(nd->fd, &nd->mac_addr);
if (r < 0) {
log_ndisc_errno(r, "Error sending Router Solicitation: %m");
goto fail;
}
log_ndisc("Sent Router Solicitation, next solicitation in %s",
format_timespan(time_string, FORMAT_TIMESPAN_MAX,
nd->retransmit_time, USEC_PER_SEC));