mirror of
https://github.com/systemd/systemd.git
synced 2025-03-11 20:58:27 +03:00
sd-radv: allow to modify RA header elements without stopping sd-radv
This also makes too large retransmit time handled gracefully, as even if a too large value is specified, usec_to_be32_msec() in radv_send_router() will handle it gracefully anyway. Note, networkd still refuses such invalid values. Hence, this does not change any effective behavior.
This commit is contained in:
parent
2ca6bd9b77
commit
03401969d4
@ -537,23 +537,13 @@ int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu) {
|
||||
int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit) {
|
||||
assert_return(ra, -EINVAL);
|
||||
|
||||
if (ra->state != RADV_STATE_IDLE)
|
||||
return -EBUSY;
|
||||
|
||||
ra->hop_limit = hop_limit;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_radv_set_retransmit(sd_radv *ra, uint64_t usec) {
|
||||
assert_return(ra, -EINVAL);
|
||||
|
||||
if (ra->state != RADV_STATE_IDLE)
|
||||
return -EBUSY;
|
||||
|
||||
if (usec > RADV_MAX_RETRANSMIT_USEC)
|
||||
return -EINVAL;
|
||||
|
||||
ra->retransmit_usec = usec;
|
||||
return 0;
|
||||
}
|
||||
@ -561,9 +551,6 @@ int sd_radv_set_retransmit(sd_radv *ra, uint64_t usec) {
|
||||
int sd_radv_set_router_lifetime(sd_radv *ra, uint64_t usec) {
|
||||
assert_return(ra, -EINVAL);
|
||||
|
||||
if (ra->state != RADV_STATE_IDLE)
|
||||
return -EBUSY;
|
||||
|
||||
if (!router_lifetime_is_valid(usec))
|
||||
return -EINVAL;
|
||||
|
||||
@ -577,25 +564,17 @@ int sd_radv_set_router_lifetime(sd_radv *ra, uint64_t usec) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_radv_set_managed_information(sd_radv *ra, int managed) {
|
||||
int sd_radv_set_managed_information(sd_radv *ra, int b) {
|
||||
assert_return(ra, -EINVAL);
|
||||
|
||||
if (ra->state != RADV_STATE_IDLE)
|
||||
return -EBUSY;
|
||||
|
||||
SET_FLAG(ra->flags, ND_RA_FLAG_MANAGED, managed);
|
||||
|
||||
SET_FLAG(ra->flags, ND_RA_FLAG_MANAGED, b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sd_radv_set_other_information(sd_radv *ra, int other) {
|
||||
int sd_radv_set_other_information(sd_radv *ra, int b) {
|
||||
assert_return(ra, -EINVAL);
|
||||
|
||||
if (ra->state != RADV_STATE_IDLE)
|
||||
return -EBUSY;
|
||||
|
||||
SET_FLAG(ra->flags, ND_RA_FLAG_OTHER, other);
|
||||
|
||||
SET_FLAG(ra->flags, ND_RA_FLAG_OTHER, b);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -208,7 +208,7 @@ TEST(radv) {
|
||||
ASSERT_RETURN_EXPECTED_SE(sd_radv_set_retransmit(NULL, 10 * USEC_PER_MSEC) < 0);
|
||||
assert_se(sd_radv_set_retransmit(ra, 10 * USEC_PER_MSEC) >= 0);
|
||||
assert_se(sd_radv_set_retransmit(ra, 0) >= 0);
|
||||
assert_se(sd_radv_set_retransmit(ra, usec_add(UINT32_MAX * USEC_PER_MSEC, USEC_PER_MSEC)) < 0);
|
||||
assert_se(sd_radv_set_retransmit(ra, USEC_INFINITY) >= 0);
|
||||
|
||||
ASSERT_RETURN_EXPECTED_SE(sd_radv_set_rdnss(NULL, 0, NULL, 0) < 0);
|
||||
assert_se(sd_radv_set_rdnss(ra, 0, NULL, 0) >= 0);
|
||||
|
@ -58,8 +58,8 @@ int sd_radv_set_mtu(sd_radv *ra, uint32_t mtu);
|
||||
int sd_radv_set_hop_limit(sd_radv *ra, uint8_t hop_limit);
|
||||
int sd_radv_set_retransmit(sd_radv *ra, uint64_t usec);
|
||||
int sd_radv_set_router_lifetime(sd_radv *ra, uint64_t usec);
|
||||
int sd_radv_set_managed_information(sd_radv *ra, int managed);
|
||||
int sd_radv_set_other_information(sd_radv *ra, int other);
|
||||
int sd_radv_set_managed_information(sd_radv *ra, int b);
|
||||
int sd_radv_set_other_information(sd_radv *ra, int b);
|
||||
int sd_radv_set_preference(sd_radv *ra, unsigned preference);
|
||||
int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p);
|
||||
int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p);
|
||||
|
Loading…
x
Reference in New Issue
Block a user