]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-radv: shorten the default lifetime for prefix/route prefix
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 24 Oct 2021 19:13:14 +0000 (04:13 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 27 Oct 2021 14:58:35 +0000 (23:58 +0900)
See draft-ietf-6man-slaac-renum-02 section 4.1.1.

src/libsystemd-network/radv-internal.h
src/libsystemd-network/sd-radv.c
src/libsystemd-network/test-ndisc-ra.c

index df3c22c8c0bbc5b34ee7bbb600838f26353e9a1f..1a268757ad29eee7248b5d68265435eff1538e38 100644 (file)
 #define RADV_MIN_ROUTER_LIFETIME_USEC             RADV_MIN_MAX_TIMEOUT_USEC
 #define RADV_MAX_ROUTER_LIFETIME_USEC             (9000 * USEC_PER_SEC)
 #define RADV_DEFAULT_ROUTER_LIFETIME_USEC         (3 * RADV_DEFAULT_MAX_TIMEOUT_USEC)
+/* draft-ietf-6man-slaac-renum-02 section 4.1.1.
+ * AdvPreferredLifetime: max(AdvDefaultLifetime, 3 * MaxRtrAdvInterval)
+ * AdvValidLifetime: 2 * AdvPreferredLifetime */
+#define RADV_DEFAULT_PREFERRED_LIFETIME_USEC      CONST_MAX(RADV_DEFAULT_ROUTER_LIFETIME_USEC, 3 * RADV_DEFAULT_MAX_TIMEOUT_USEC)
+#define RADV_DEFAULT_VALID_LIFETIME_USEC          (2 * RADV_DEFAULT_PREFERRED_LIFETIME_USEC)
 /* RFC 4861 section 10.
  * MAX_INITIAL_RTR_ADVERT_INTERVAL  16 seconds
  * MAX_INITIAL_RTR_ADVERTISEMENTS    3 transmissions
index 4e146fe282ccae2dd7dd7104af7ea3accfc4d1c9..2f3f4801514ec81fe58f5cf15903d02bb339312a 100644 (file)
@@ -837,8 +837,8 @@ _public_ int sd_radv_prefix_new(sd_radv_prefix **ret) {
                 /* RFC 4861, Section 6.2.1 */
                 .opt.flags = ND_OPT_PI_FLAG_ONLINK|ND_OPT_PI_FLAG_AUTO,
 
-                .lifetime_valid_usec = 30 * USEC_PER_DAY,
-                .lifetime_preferred_usec = 7 * USEC_PER_DAY,
+                .lifetime_valid_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
+                .lifetime_preferred_usec = RADV_DEFAULT_PREFERRED_LIFETIME_USEC,
                 .valid_until = USEC_INFINITY,
                 .preferred_until = USEC_INFINITY,
         };
@@ -930,7 +930,7 @@ _public_ int sd_radv_route_prefix_new(sd_radv_route_prefix **ret) {
                 .opt.length = DIV_ROUND_UP(sizeof(p->opt), 8),
                 .opt.prefixlen = 64,
 
-                .lifetime_usec = 7 * USEC_PER_DAY,
+                .lifetime_usec = RADV_DEFAULT_VALID_LIFETIME_USEC,
                 .valid_until = USEC_INFINITY,
         };
 
index 88a32dcc58c53e02c5115543e1e373683b789f8a..7b961f47610c83bdb1532a74fdbe582a8f322925 100644 (file)
@@ -32,13 +32,13 @@ static uint8_t advertisement[] = {
         0x20, 0x01, 0x0d, 0xb8,  0xde, 0xad, 0xbe, 0xef,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Prefix Information Option */
-        0x03, 0x04, 0x40, 0xc0,  0x00, 0x27, 0x8d, 0x00,
-        0x00, 0x09, 0x3a, 0x80,  0x00, 0x00, 0x00, 0x00,
+        0x03, 0x04, 0x40, 0xc0,  0x00, 0x00, 0x0e, 0x10,
+        0x00, 0x00, 0x07, 0x08,  0x00, 0x00, 0x00, 0x00,
         0x20, 0x01, 0x0d, 0xb8,  0x0b, 0x16, 0xd0, 0x0d,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Prefix Information Option */
-        0x03, 0x04, 0x30, 0xc0,  0x00, 0x27, 0x8d, 0x00,
-        0x00, 0x09, 0x3a, 0x80,  0x00, 0x00, 0x00, 0x00,
+        0x03, 0x04, 0x30, 0xc0,  0x00, 0x00, 0x0e, 0x10,
+        0x00, 0x00, 0x07, 0x08,  0x00, 0x00, 0x00, 0x00,
         0x20, 0x01, 0x0d, 0xb8,  0xc0, 0x01, 0x0d, 0xad,
         0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00,
         /* Recursive DNS Server Option */