X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Fsd-icmp6-nd.c;h=b264e793ee4e27d9e98550de95985298cf9667fe;hb=8f077bf94e129fa1b6f0159e3140c4326f1066cf;hp=f820a9c8f04540be3e913d5edc7a81887b9cf9bf;hpb=e3169126793f43be3d840874ffb3935a51097001;p=elogind.git diff --git a/src/libsystemd-network/sd-icmp6-nd.c b/src/libsystemd-network/sd-icmp6-nd.c index f820a9c8f..b264e793e 100644 --- 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->fd = -1; *ret = nd; nd = NULL; @@ -254,7 +255,7 @@ static int icmp6_router_solicitation_timeout(sd_event_source *s, uint64_t usec, 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; @@ -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; - 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) { @@ -281,6 +282,19 @@ static int icmp6_router_solicitation_timeout(sd_event_source *s, uint64_t usec, 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; @@ -308,7 +322,7 @@ int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd) { if (r < 0) goto error; - r = sd_event_add_time(nd->event, &nd->timeout, CLOCK_MONOTONIC, + 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;