]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: convert router lifetime from usec_t to uint16_t 17551/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 9 Nov 2020 07:49:33 +0000 (16:49 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 9 Nov 2020 15:04:52 +0000 (00:04 +0900)
src/network/networkd-radv.c

index 817c15764ac174491a6649816653945c96edc74e..a8e1b2b4898c023be491da8349db9c70e90e6d44 100644 (file)
@@ -641,6 +641,7 @@ static bool link_radv_enabled(Link *link) {
 }
 
 int radv_configure(Link *link) {
+        uint16_t router_lifetime;
         RoutePrefix *q;
         Prefix *p;
         int r;
@@ -675,16 +676,20 @@ int radv_configure(Link *link) {
         if (r < 0)
                 return r;
 
-        /* a value of 0xffffffff represents infinity, 0x0 means this host is
-           not a router */
-        r = sd_radv_set_router_lifetime(link->radv,
-                                        DIV_ROUND_UP(link->network->router_lifetime_usec, USEC_PER_SEC));
+        /* a value of UINT16_MAX represents infinity, 0x0 means this host is not a router */
+        if (link->network->router_lifetime_usec == USEC_INFINITY)
+                router_lifetime = UINT16_MAX;
+        else if (link->network->router_lifetime_usec > (UINT16_MAX - 1) * USEC_PER_SEC)
+                router_lifetime = UINT16_MAX - 1;
+        else
+                router_lifetime = DIV_ROUND_UP(link->network->router_lifetime_usec, USEC_PER_SEC);
+
+        r = sd_radv_set_router_lifetime(link->radv, router_lifetime);
         if (r < 0)
                 return r;
 
-        if (link->network->router_lifetime_usec > 0) {
-                r = sd_radv_set_preference(link->radv,
-                                           link->network->router_preference);
+        if (router_lifetime > 0) {
+                r = sd_radv_set_preference(link->radv, link->network->router_preference);
                 if (r < 0)
                         return r;
         }