void *userdata;
};
-#define log_icmp6_nd(p, fmt, ...) log_meta(LOG_DEBUG, __FILE__, __LINE__, __func__, "ICMPv6 CLIENT: " fmt, ##__VA_ARGS__)
+#define log_icmp6_nd(p, fmt, ...) log_internal(LOG_DEBUG, 0, __FILE__, __LINE__, __func__, "ICMPv6 CLIENT: " fmt, ##__VA_ARGS__)
static void icmp6_nd_notify(sd_icmp6_nd *nd, int event)
{
nd->n_ref = REFCNT_INIT;
nd->index = -1;
+ nd->fd = -1;
*ret = nd;
nd = NULL;
if (ra.nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)
event = ICMP6_EVENT_ROUTER_ADVERTISMENT_MANAGED;
- log_icmp6_nd(nd, "Received Router Advertisment flags %s/%s",
+ log_icmp6_nd(nd, "Received Router Advertisement flags %s/%s",
(ra.nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)? "MANAGED":
"none",
(ra.nd_ra_flags_reserved & ND_RA_FLAG_OTHER)? "OTHER":
nd->nd_sent++;
- r = sd_event_now(nd->event, CLOCK_MONOTONIC, &time_now);
+ r = sd_event_now(nd->event, clock_boottime_or_monotonic(), &time_now);
if (r < 0) {
icmp6_nd_notify(nd, r);
return 0;
next_timeout = time_now + ICMP6_ROUTER_SOLICITATION_INTERVAL;
- r = sd_event_add_time(nd->event, &nd->timeout, CLOCK_MONOTONIC,
+ r = sd_event_add_time(nd->event, &nd->timeout, clock_boottime_or_monotonic(),
next_timeout, 0,
icmp6_router_solicitation_timeout, nd);
if (r < 0) {
icmp6_nd_notify(nd, r);
return 0;
}
+
+ r = sd_event_source_set_description(nd->timeout, "icmp6-timeout");
+ if (r < 0) {
+ icmp6_nd_notify(nd, r);
+ return 0;
+ }
}
return 0;
}
+int sd_icmp6_nd_stop(sd_icmp6_nd *nd) {
+ assert_return(nd, -EINVAL);
+ assert_return(nd->event, -EINVAL);
+
+ log_icmp6_nd(client, "Stop ICMPv6");
+
+ icmp6_nd_init(nd);
+
+ nd->state = ICMP6_NEIGHBOR_DISCOVERY_IDLE;
+
+ return 0;
+}
+
int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd) {
int r;
if (r < 0)
goto error;
- r = sd_event_add_time(nd->event, &nd->timeout, CLOCK_MONOTONIC,
+ r = sd_event_source_set_description(nd->recv, "icmp6-receive-message");
+ if (r < 0)
+ goto error;
+
+ r = sd_event_add_time(nd->event, &nd->timeout, clock_boottime_or_monotonic(),
0, 0, icmp6_router_solicitation_timeout, nd);
if (r < 0)
goto error;
r = sd_event_source_set_priority(nd->timeout, nd->event_priority);
+ if (r < 0)
+ goto error;
+ r = sd_event_source_set_description(nd->timeout, "icmp6-timeout");
error:
if (r < 0)
icmp6_nd_init(nd);