#include "sd-ndisc.h"
#include "alloc-util.h"
+#include "event-util.h"
#include "fd-util.h"
#include "icmp6-util.h"
#include "in-addr-util.h"
static void ndisc_reset(sd_ndisc *nd) {
assert(nd);
- nd->timeout_event_source = sd_event_source_unref(nd->timeout_event_source);
- nd->timeout_no_ra = sd_event_source_unref(nd->timeout_no_ra);
+ (void) event_source_disable(nd->timeout_event_source);
+ (void) event_source_disable(nd->timeout_no_ra);
nd->retransmit_time = 0;
nd->recv_event_source = sd_event_source_unref(nd->recv_event_source);
nd->fd = safe_close(nd->fd);
static sd_ndisc *ndisc_free(sd_ndisc *nd) {
assert(nd);
+ nd->timeout_event_source = sd_event_source_unref(nd->timeout_event_source);
+ nd->timeout_no_ra = sd_event_source_unref(nd->timeout_no_ra);
+
ndisc_reset(nd);
sd_ndisc_detach_event(nd);
return mfree(nd);
return 0;
}
- nd->timeout_event_source = sd_event_source_unref(nd->timeout_event_source);
+ (void) event_source_disable(nd->timeout_event_source);
return ndisc_handle_datagram(nd, rt);
}
}
static int ndisc_timeout(sd_event_source *s, uint64_t usec, void *userdata) {
+ char time_string[FORMAT_TIMESPAN_MAX];
sd_ndisc *nd = userdata;
usec_t time_now;
int r;
- char time_string[FORMAT_TIMESPAN_MAX];
assert(s);
assert(nd);
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);
-
if (!nd->retransmit_time)
nd->retransmit_time = ndisc_timeout_compute_random(NDISC_ROUTER_SOLICITATION_INTERVAL);
else {
nd->retransmit_time += ndisc_timeout_compute_random(nd->retransmit_time);
}
- r = sd_event_add_time(nd->event, &nd->timeout_event_source,
- clock_boottime_or_monotonic(),
- time_now + nd->retransmit_time,
- 10 * USEC_PER_MSEC, ndisc_timeout, nd);
+ r = event_reset_time(nd->event, &nd->timeout_event_source,
+ clock_boottime_or_monotonic(),
+ time_now + nd->retransmit_time, 10 * USEC_PER_MSEC,
+ ndisc_timeout, nd,
+ nd->event_priority, "ndisc-timeout-no-ra", true);
if (r < 0)
goto fail;
- r = sd_event_source_set_priority(nd->timeout_event_source, nd->event_priority);
- if (r < 0)
- goto fail;
-
- (void) sd_event_source_set_description(nd->timeout_event_source, "ndisc-timeout-no-ra");
-
- r = sd_event_source_set_enabled(nd->timeout_event_source, SD_EVENT_ONESHOT);
- if (r < 0) {
- log_ndisc_errno(r, "Error reenabling timer: %m");
- goto fail;
- }
-
r = icmp6_send_router_solicitation(nd->fd, &nd->mac_addr);
if (r < 0) {
log_ndisc_errno(r, "Error sending Router Solicitation: %m");
log_ndisc("No RA received before link confirmation timeout");
- nd->timeout_no_ra = sd_event_source_unref(nd->timeout_no_ra);
+ (void) event_source_disable(nd->timeout_no_ra);
ndisc_callback(nd, SD_NDISC_EVENT_TIMEOUT, NULL);
return 0;
return 0;
assert(!nd->recv_event_source);
- assert(!nd->timeout_event_source);
r = sd_event_now(nd->event, clock_boottime_or_monotonic(), &time_now);
if (r < 0)
(void) sd_event_source_set_description(nd->recv_event_source, "ndisc-receive-message");
- r = sd_event_add_time(nd->event, &nd->timeout_event_source, clock_boottime_or_monotonic(), 0, 0, ndisc_timeout, nd);
+ r = event_reset_time(nd->event, &nd->timeout_event_source,
+ clock_boottime_or_monotonic(),
+ 0, 0,
+ ndisc_timeout, nd,
+ nd->event_priority, "ndisc-timeout", true);
if (r < 0)
goto fail;
- r = sd_event_source_set_priority(nd->timeout_event_source, nd->event_priority);
+ r = event_reset_time(nd->event, &nd->timeout_no_ra,
+ clock_boottime_or_monotonic(),
+ time_now + NDISC_TIMEOUT_NO_RA_USEC, 10 * USEC_PER_MSEC,
+ ndisc_timeout_no_ra, nd,
+ nd->event_priority, "ndisc-timeout-no-ra", true);
if (r < 0)
goto fail;
- (void) sd_event_source_set_description(nd->timeout_event_source, "ndisc-timeout");
-
- r = sd_event_add_time(nd->event, &nd->timeout_no_ra,
- clock_boottime_or_monotonic(),
- time_now + NDISC_TIMEOUT_NO_RA_USEC,
- 10 * USEC_PER_MSEC, ndisc_timeout_no_ra, nd);
- if (r < 0)
- goto fail;
-
- r = sd_event_source_set_priority(nd->timeout_no_ra, nd->event_priority);
- if (r < 0)
- goto fail;
-
- (void) sd_event_source_set_description(nd->timeout_no_ra, "ndisc-timeout-no-ra");
-
log_ndisc("Started IPv6 Router Solicitation client");
return 1;