sd-icmp6-nd: Add function to stop ongoing ICMPv6 discovery
In some use cases stopping an ongoing ICMPv6 discovery is more useful than always unreferencing the whole structure.
This commit is contained in:
@@ -282,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;
|
||||
|
||||
|
||||
@@ -127,6 +127,10 @@ static void test_rs(sd_event *e) {
|
||||
time_now + 2 *USEC_PER_SEC, 0,
|
||||
test_rs_hangcheck, NULL) >= 0);
|
||||
|
||||
assert(sd_icmp6_nd_stop(nd) >= 0);
|
||||
assert(sd_icmp6_router_solicitation_start(nd) >= 0);
|
||||
assert(sd_icmp6_nd_stop(nd) >= 0);
|
||||
|
||||
assert(sd_icmp6_router_solicitation_start(nd) >= 0);
|
||||
|
||||
sd_event_loop(e);
|
||||
|
||||
@@ -51,6 +51,7 @@ sd_icmp6_nd *sd_icmp6_nd_ref(sd_icmp6_nd *nd);
|
||||
sd_icmp6_nd *sd_icmp6_nd_unref(sd_icmp6_nd *nd);
|
||||
int sd_icmp6_nd_new(sd_icmp6_nd **ret);
|
||||
|
||||
int sd_icmp6_nd_stop(sd_icmp6_nd *nd);
|
||||
int sd_icmp6_router_solicitation_start(sd_icmp6_nd *nd);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user