int sd_radv_stop(sd_radv *ra) {
int r;
- if (!ra)
- return 0;
-
- if (ra->state == RADV_STATE_IDLE)
- return 0;
+ if (!sd_radv_is_running(ra))
+ return 0; /* Already stopped. */
log_radv(ra, "Stopping IPv6 Router Advertisement daemon");
assert_return(ra->event, -EINVAL);
assert_return(ra->ifindex > 0, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return 0;
+ if (sd_radv_is_running(ra))
+ return 0; /* Already started. */
r = radv_setup_recv_event(ra);
if (r < 0)
int sd_radv_set_ifindex(sd_radv *ra, int ifindex) {
assert_return(ra, -EINVAL);
+ assert_return(!sd_radv_is_running(ra), -EBUSY);
assert_return(ifindex > 0, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return -EBUSY;
-
ra->ifindex = ifindex;
-
return 0;
}
int sd_radv_set_mac(sd_radv *ra, const struct ether_addr *mac_addr) {
assert_return(ra, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return -EBUSY;
-
if (mac_addr)
ra->mac_addr = *mac_addr;
else
int sd_radv_set_home_agent_information(sd_radv *ra, int home_agent) {
assert_return(ra, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return -EBUSY;
-
SET_FLAG(ra->flags, ND_RA_FLAG_HOME_AGENT, home_agent);
-
return 0;
}
int sd_radv_set_home_agent_preference(sd_radv *ra, uint16_t preference) {
assert_return(ra, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return -EBUSY;
-
ra->home_agent.nd_opt_home_agent_info_preference = htobe16(preference);
-
return 0;
}
int sd_radv_set_home_agent_lifetime(sd_radv *ra, uint64_t lifetime_usec) {
assert_return(ra, -EINVAL);
- if (ra->state != RADV_STATE_IDLE)
- return -EBUSY;
-
if (lifetime_usec > RADV_HOME_AGENT_MAX_LIFETIME_USEC)
return -EINVAL;
log_radv(ra, "Added prefix %s", addr_p);
}
- if (ra->state == RADV_STATE_IDLE)
+ if (!sd_radv_is_running(ra))
return 0;
if (ra->ra_sent == 0)
log_radv(ra, "Added route prefix %s", strna(addr_p));
}
- if (ra->state == RADV_STATE_IDLE)
+ if (!sd_radv_is_running(ra))
return 0;
if (ra->ra_sent == 0)
log_radv(ra, "Added PREF64 prefix %s", strna(addr_p));
}
- if (ra->state == RADV_STATE_IDLE)
+ if (!sd_radv_is_running(ra))
return 0;
if (ra->ra_sent == 0)