chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
socket-util: use IP address when hostname is not found
[elogind.git]
/
src
/
libsystemd-network
/
sd-icmp6-nd.c
diff --git
a/src/libsystemd-network/sd-icmp6-nd.c
b/src/libsystemd-network/sd-icmp6-nd.c
index f820a9c8f04540be3e913d5edc7a81887b9cf9bf..bbb4531ddb5e58a317bb294332950fe5569ff461 100644
(file)
--- a/
src/libsystemd-network/sd-icmp6-nd.c
+++ b/
src/libsystemd-network/sd-icmp6-nd.c
@@
-171,6
+171,7
@@
int sd_icmp6_nd_new(sd_icmp6_nd **ret) {
nd->n_ref = REFCNT_INIT;
nd->index = -1;
nd->n_ref = REFCNT_INIT;
nd->index = -1;
+ nd->fd = -1;
*ret = nd;
nd = NULL;
*ret = nd;
nd = NULL;
@@
-211,7
+212,7
@@
static int icmp6_router_advertisment_recv(sd_event_source *s, int fd,
if (ra.nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)
event = ICMP6_EVENT_ROUTER_ADVERTISMENT_MANAGED;
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 Advertis
e
ment flags %s/%s",
(ra.nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)? "MANAGED":
"none",
(ra.nd_ra_flags_reserved & ND_RA_FLAG_OTHER)? "OTHER":
(ra.nd_ra_flags_reserved & ND_RA_FLAG_MANAGED)? "MANAGED":
"none",
(ra.nd_ra_flags_reserved & ND_RA_FLAG_OTHER)? "OTHER":
@@
-254,7
+255,7
@@
static int icmp6_router_solicitation_timeout(sd_event_source *s, uint64_t usec,
nd->nd_sent++;
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;
if (r < 0) {
icmp6_nd_notify(nd, r);
return 0;
@@
-262,7
+263,7
@@
static int icmp6_router_solicitation_timeout(sd_event_source *s, uint64_t usec,
next_timeout = time_now + ICMP6_ROUTER_SOLICITATION_INTERVAL;
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) {
next_timeout, 0,
icmp6_router_solicitation_timeout, nd);
if (r < 0) {
@@
-276,11
+277,30
@@
static int icmp6_router_solicitation_timeout(sd_event_source *s, uint64_t usec,
icmp6_nd_notify(nd, r);
return 0;
}
icmp6_nd_notify(nd, r);
return 0;
}
+
+ r = sd_event_source_set_name(nd->timeout, "icmp6-timeout");
+ if (r < 0) {
+ icmp6_nd_notify(nd, r);
+ return 0;
+ }
}
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;
int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd) {
int r;
@@
-308,13
+328,20
@@
int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd) {
if (r < 0)
goto error;
if (r < 0)
goto error;
- r = sd_event_add_time(nd->event, &nd->timeout, CLOCK_MONOTONIC,
+ r = sd_event_source_set_name(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);
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_name(nd->timeout, "icmp6-timeout");
error:
if (r < 0)
icmp6_nd_init(nd);
error:
if (r < 0)
icmp6_nd_init(nd);