]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-radv: send RA on update in caller side
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 23 Apr 2024 03:34:47 +0000 (12:34 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 24 Apr 2024 03:22:05 +0000 (12:22 +0900)
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
src/network/networkd-radv.c

index a30a805271bd3fa2934e3370bd696ba2a3ccc0ab..fa15f96336ebd447dde4a0b3664a2c1494b34ecb 100644 (file)
@@ -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;
 }
 
index 485178678c9dfa8a063313edfbb38e21149ee3ac..a7f89adbdaf58675169d1450fe2ae129ba002f2b 100644 (file)
@@ -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;
 }