From 96dd66eddfefacc0863c67ba6694e5f9c7fbabec Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 23 Apr 2024 12:34:47 +0900 Subject: [PATCH] sd-radv: send RA on update in caller side As the caller may want to update multiple prefixes and friends. Let's not automatically announce on update in library side. Currently, only prefix is updated during running. Hence, this does not change any effective behavior. --- src/libsystemd-network/sd-radv.c | 41 -------------------------------- src/network/networkd-radv.c | 11 ++++++++- 2 files changed, 10 insertions(+), 42 deletions(-) diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c index a30a805271b..fa15f96336e 100644 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@ -672,19 +672,6 @@ int sd_radv_add_prefix(sd_radv *ra, sd_radv_prefix *p) { log_radv(ra, "Added prefix %s", addr_p); } - if (!sd_radv_is_running(ra)) - return 0; - - if (ra->ra_sent == 0) - return 0; - - /* If RAs have already been sent, send an RA immediately to announce the newly-added prefix */ - r = radv_send_router(ra, NULL); - if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement for added prefix %s, ignoring: %m", addr_p); - else - log_radv(ra, "Sent Router Advertisement for added/updated prefix %s.", addr_p); - return 0; } @@ -768,20 +755,6 @@ int sd_radv_add_route_prefix(sd_radv *ra, sd_radv_route_prefix *p) { log_radv(ra, "Added route prefix %s", strna(addr_p)); } - if (!sd_radv_is_running(ra)) - return 0; - - if (ra->ra_sent == 0) - return 0; - - /* If RAs have already been sent, send an RA immediately to announce the newly-added route prefix */ - r = radv_send_router(ra, NULL); - if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement for added route prefix %s, ignoring: %m", - strna(addr_p)); - else - log_radv(ra, "Sent Router Advertisement for added route prefix %s.", strna(addr_p)); - return 0; } @@ -840,20 +813,6 @@ int sd_radv_add_pref64_prefix(sd_radv *ra, sd_radv_pref64_prefix *p) { log_radv(ra, "Added PREF64 prefix %s", strna(addr_p)); } - if (!sd_radv_is_running(ra)) - return 0; - - if (ra->ra_sent == 0) - return 0; - - /* If RAs have already been sent, send an RA immediately to announce the newly-added route prefix */ - r = radv_send_router(ra, NULL); - if (r < 0) - log_radv_errno(ra, r, "Unable to send Router Advertisement for added PREF64 prefix %s, ignoring: %m", - strna(addr_p)); - else - log_radv(ra, "Sent Router Advertisement for added PREF64 prefix %s.", strna(addr_p)); - return 0; } diff --git a/src/network/networkd-radv.c b/src/network/networkd-radv.c index 485178678c9..a7f89adbdaf 100644 --- a/src/network/networkd-radv.c +++ b/src/network/networkd-radv.c @@ -761,9 +761,18 @@ int radv_add_prefix( return r; r = sd_radv_add_prefix(link->radv, p); - if (r < 0 && r != -EEXIST) + if (r == -EEXIST) + return 0; + if (r < 0) return r; + if (sd_radv_is_running(link->radv)) { + /* Announce updated prefixe now. */ + r = sd_radv_send(link->radv); + if (r < 0) + return r; + } + return 0; } -- 2.47.3