router: inherit user-assigned preferred_lifetime
authorPaul Donald <newtwen@gmail.com>
Tue, 9 Apr 2024 03:04:04 +0000 (05:04 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Tue, 7 May 2024 22:06:18 +0000 (00:06 +0200)
Inherit preferred_lifetime value irrespective of whether ra_useleasetime
is set or not.

User-provided values for preferred_lifetime are now assigned, instead of
ignored.

Before:
==
ICMPv6 Option (Prefix information : fd51:1c2a:8909::/64)
    Type: Prefix information (3)
    Length: 4 (32 bytes)
    Prefix Length: 64
    Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
    Valid Lifetime: Infinity (4294967295)
    Preferred Lifetime: Infinity (4294967295)
    Reserved
    Prefix: fd51:1c2a:8909::
==

After (preferred_lifetime set to 7 minutes):
==
ICMPv6 Option (Prefix information : fd51:1c2a:8909::/64)
    Type: Prefix information (3)
    Length: 4 (32 bytes)
    Prefix Length: 64
    Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
    Valid Lifetime: Infinity (4294967295)
    Preferred Lifetime: 420
    Reserved
    Prefix: fd51:1c2a:8909::
==

Signed-off-by: Paul Donald <newtwen@gmail.com>
Reviewed-by: Daniel Golle <daniel@makrotopia.org>
[ fix comment format and improve commit description ]
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
src/router.c

index 6a9e19d77cf382f70dcc70db56949158532c435a..6eba161b4c8283b857e2e8cb225f870f47f5a964 100644 (file)
@@ -590,9 +590,10 @@ static int send_router_advert(struct interface *iface, const struct in6_addr *fr
                if (addr->preferred_lt > (uint32_t)now) {
                        preferred_lt = TIME_LEFT(addr->preferred_lt, now);
 
-                       if (iface->ra_useleasetime &&
-                           preferred_lt > iface->preferred_lifetime)
+                       if (preferred_lt > iface->preferred_lifetime) {
+                               /* set to possibly user mandated preferred_lt */
                                preferred_lt = iface->preferred_lifetime;
+                       }
                }
 
                if (addr->valid_lt > (uint32_t)now) {