]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
dhcp6-client: Store lease timeouts T1 and T1 in client struct
authorPatrik Flykt <patrik.flykt@linux.intel.com>
Tue, 11 Sep 2018 22:26:01 +0000 (16:26 -0600)
committerPatrik Flykt <patrik.flykt@linux.intel.com>
Wed, 19 Sep 2018 19:45:18 +0000 (13:45 -0600)
Since we now have the possibility to request prefixes to be delegated
without corresponding IPv6 addresses, it does not make sense to store
lease T1 and T2 timeouts in the otherwise unused IA_NA structure.
Therefore lease timeouts T1 and T2 are moved to the DHCPv6 client
structure, as there will be only one set of stateful timeouts required
by RFC 7550, Section 4.3.

src/libsystemd-network/dhcp6-internal.h
src/libsystemd-network/dhcp6-lease-internal.h
src/libsystemd-network/sd-dhcp6-client.c
src/libsystemd-network/sd-dhcp6-lease.c

index f1cbd6a4f159e12bc1051ee6861fe087dfd7608d..c45b068fd7cccfa48b0b32b193729ab791c9f9fe 100644 (file)
@@ -73,8 +73,6 @@ struct DHCP6IA {
                 struct ia_pd ia_pd;
                 struct ia_ta ia_ta;
         };
-        sd_event_source *timeout_t1;
-        sd_event_source *timeout_t2;
 
         LIST_HEAD(DHCP6Address, addresses);
 };
index c05c32d5b118832dfde49e2759775a3b199d34bf..e004f48b4e24f441bd5eef669a5d9cfe45157d90 100644 (file)
@@ -37,7 +37,6 @@ struct sd_dhcp6_lease {
         size_t ntp_fqdn_count;
 };
 
-int dhcp6_lease_clear_timers(DHCP6IA *ia);
 int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire);
 DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia);
 
index 3562ccd182677f19486fd12ae350c6d4cdb6bc33..9969b01ab9435f068e639ea62a16f85de52ab353 100644 (file)
@@ -47,6 +47,8 @@ struct sd_dhcp6_client {
         uint16_t arp_type;
         DHCP6IA ia_na;
         DHCP6IA ia_pd;
+        sd_event_source *timeout_t1;
+        sd_event_source *timeout_t2;
         int request;
         be32_t transaction_id;
         usec_t transaction_start;
@@ -388,11 +390,6 @@ static void client_notify(sd_dhcp6_client *client, int event) {
 static void client_set_lease(sd_dhcp6_client *client, sd_dhcp6_lease *lease) {
         assert(client);
 
-        if (client->lease) {
-                dhcp6_lease_clear_timers(&client->lease->ia);
-                sd_dhcp6_lease_unref(client->lease);
-        }
-
         client->lease = lease;
 }
 
@@ -407,11 +404,6 @@ static int client_reset(sd_dhcp6_client *client) {
         client->transaction_id = 0;
         client->transaction_start = 0;
 
-        client->ia_na.timeout_t1 =
-                sd_event_source_unref(client->ia_na.timeout_t1);
-        client->ia_na.timeout_t2 =
-                sd_event_source_unref(client->ia_na.timeout_t2);
-
         client->retransmit_time = 0;
         client->retransmit_count = 0;
         client->timeout_resend = sd_event_source_unref(client->timeout_resend);
@@ -603,8 +595,8 @@ static int client_timeout_t2(sd_event_source *s, uint64_t usec, void *userdata)
         assert(client);
         assert(client->lease);
 
-        client->lease->ia.timeout_t2 =
-                sd_event_source_unref(client->lease->ia.timeout_t2);
+        client->timeout_t2 =
+                sd_event_source_unref(client->timeout_t2);
 
         log_dhcp6_client(client, "Timeout T2");
 
@@ -620,8 +612,8 @@ static int client_timeout_t1(sd_event_source *s, uint64_t usec, void *userdata)
         assert(client);
         assert(client->lease);
 
-        client->lease->ia.timeout_t1 =
-                sd_event_source_unref(client->lease->ia.timeout_t1);
+        client->timeout_t1 =
+                sd_event_source_unref(client->timeout_t1);
 
         log_dhcp6_client(client, "Timeout T1");
 
@@ -1332,19 +1324,19 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
                                  format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
 
                 r = sd_event_add_time(client->event,
-                                      &client->lease->ia.timeout_t1,
+                                      &client->timeout_t1,
                                       clock_boottime_or_monotonic(), time_now + timeout,
                                       10 * USEC_PER_SEC, client_timeout_t1,
                                       client);
                 if (r < 0)
                         goto error;
 
-                r = sd_event_source_set_priority(client->lease->ia.timeout_t1,
+                r = sd_event_source_set_priority(client->timeout_t1,
                                                  client->event_priority);
                 if (r < 0)
                         goto error;
 
-                r = sd_event_source_set_description(client->lease->ia.timeout_t1, "dhcp6-t1-timeout");
+                r = sd_event_source_set_description(client->timeout_t1, "dhcp6-t1-timeout");
                 if (r < 0)
                         goto error;
 
@@ -1354,19 +1346,19 @@ static int client_start(sd_dhcp6_client *client, enum DHCP6State state) {
                                  format_timespan(time_string, FORMAT_TIMESPAN_MAX, timeout, USEC_PER_SEC));
 
                 r = sd_event_add_time(client->event,
-                                      &client->lease->ia.timeout_t2,
+                                      &client->timeout_t2,
                                       clock_boottime_or_monotonic(), time_now + timeout,
                                       10 * USEC_PER_SEC, client_timeout_t2,
                                       client);
                 if (r < 0)
                         goto error;
 
-                r = sd_event_source_set_priority(client->lease->ia.timeout_t2,
+                r = sd_event_source_set_priority(client->timeout_t2,
                                                  client->event_priority);
                 if (r < 0)
                         goto error;
 
-                r = sd_event_source_set_description(client->lease->ia.timeout_t2, "dhcp6-t2-timeout");
+                r = sd_event_source_set_description(client->timeout_t2, "dhcp6-t2-timeout");
                 if (r < 0)
                         goto error;
 
index 971d963c47c9a36a483bfc8121b4d474a33c536c..15fec2d851c7f121336fc39011b8d500ea72d9c7 100644 (file)
 #include "strv.h"
 #include "util.h"
 
-int dhcp6_lease_clear_timers(DHCP6IA *ia) {
-        assert_return(ia, -EINVAL);
-
-        ia->timeout_t1 = sd_event_source_unref(ia->timeout_t1);
-        ia->timeout_t2 = sd_event_source_unref(ia->timeout_t2);
-
-        return 0;
-}
-
 int dhcp6_lease_ia_rebind_expire(const DHCP6IA *ia, uint32_t *expire) {
         DHCP6Address *addr;
         uint32_t valid = 0, t;
@@ -48,8 +39,6 @@ DHCP6IA *dhcp6_lease_free_ia(DHCP6IA *ia) {
         if (!ia)
                 return NULL;
 
-        dhcp6_lease_clear_timers(ia);
-
         while (ia->addresses) {
                 address = ia->addresses;