summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-11-20 10:59:27 +0100
committerThomas Haller <thaller@redhat.com>2019-11-20 10:59:27 +0100
commit7040a4f93ad0ddecac851adbf72485fee28bbb28 (patch)
treebcc106e985eecc49cf0c642fa749c7dcfe667f33
parent1061ad485a9f2b4e36ca1367ec9273c77300bb7d (diff)
parentd688019bf8494dc8a141abbb8b8e9a3f1a89a394 (diff)
downloadNetworkManager-7040a4f93ad0ddecac851adbf72485fee28bbb28.tar.gz
n-dhcp4: merge branch 'lease-time'
Import the downstream addition for lease-time [1]. These are not merged upstream yet, but let's use the patches already. If the patches that get merged upstream eventually differ, we still can adjust our fork easily. [1] https://github.com/nettools/n-dhcp4/pull/5
-rw-r--r--shared/n-dhcp4/src/n-dhcp4-c-lease.c12
-rw-r--r--shared/n-dhcp4/src/n-dhcp4-c-probe.c18
-rw-r--r--shared/n-dhcp4/src/n-dhcp4-incoming.c5
-rw-r--r--shared/n-dhcp4/src/n-dhcp4.h1
4 files changed, 23 insertions, 13 deletions
diff --git a/shared/n-dhcp4/src/n-dhcp4-c-lease.c b/shared/n-dhcp4/src/n-dhcp4-c-lease.c
index c14a9daf0a..695a112ab7 100644
--- a/shared/n-dhcp4/src/n-dhcp4-c-lease.c
+++ b/shared/n-dhcp4/src/n-dhcp4-c-lease.c
@@ -218,6 +218,18 @@ _c_public_ void n_dhcp4_client_lease_get_siaddr(NDhcp4ClientLease *lease, struct
}
/**
+ * n_dhcp4_client_lease_get_basetime() - get the timestamp when the lease was received.
+ * @lease: the lease to operate on
+ * @ns_basetimep: return argument for the base time in nano seconds
+ *
+ * Gets the timestamp when the lease was received in CLOCK_BOOTTIME. This
+ * is also the base timestamp for the expiration of the lifetime and t1/t2.
+ */
+_c_public_ void n_dhcp4_client_lease_get_basetime(NDhcp4ClientLease *lease, uint64_t *ns_basetimep) {
+ *ns_basetimep = lease->message->userdata.base_time;
+}
+
+/**
* n_dhcp4_client_lease_get_lifetime() - get the lifetime
* @lease: the lease to operate on
* @ns_lifetimep: return argument for the lifetime in nano seconds
diff --git a/shared/n-dhcp4/src/n-dhcp4-c-probe.c b/shared/n-dhcp4/src/n-dhcp4-c-probe.c
index 107c18bbad..88af36afea 100644
--- a/shared/n-dhcp4/src/n-dhcp4-c-probe.c
+++ b/shared/n-dhcp4/src/n-dhcp4-c-probe.c
@@ -800,7 +800,8 @@ static int n_dhcp4_client_probe_transition_lifetime(NDhcp4ClientProbe *probe) {
return 0;
}
-static int n_dhcp4_client_probe_transition_offer(NDhcp4ClientProbe *probe, NDhcp4Incoming *message) {
+static int n_dhcp4_client_probe_transition_offer(NDhcp4ClientProbe *probe, NDhcp4Incoming *message_take) {
+ _c_cleanup_(n_dhcp4_incoming_freep) NDhcp4Incoming *message = message_take;
_c_cleanup_(n_dhcp4_client_lease_unrefp) NDhcp4ClientLease *lease = NULL;
NDhcp4CEventNode *node;
int r;
@@ -818,7 +819,7 @@ static int n_dhcp4_client_probe_transition_offer(NDhcp4ClientProbe *probe, NDhcp
if (r)
return r;
- /* message consumed, do not fail */
+ message = NULL; /* consumed */
n_dhcp4_client_lease_link(lease, probe);
@@ -843,7 +844,8 @@ static int n_dhcp4_client_probe_transition_offer(NDhcp4ClientProbe *probe, NDhcp
return 0;
}
-static int n_dhcp4_client_probe_transition_ack(NDhcp4ClientProbe *probe, NDhcp4Incoming *message) {
+static int n_dhcp4_client_probe_transition_ack(NDhcp4ClientProbe *probe, NDhcp4Incoming *message_take) {
+ _c_cleanup_(n_dhcp4_incoming_freep) NDhcp4Incoming *message = message_take;
_c_cleanup_(n_dhcp4_client_lease_unrefp) NDhcp4ClientLease *lease = NULL;
NDhcp4CEventNode *node;
int r;
@@ -862,7 +864,7 @@ static int n_dhcp4_client_probe_transition_ack(NDhcp4ClientProbe *probe, NDhcp4I
if (r)
return r;
- /* message consumed, do not fail */
+ message = NULL; /* consumed */
n_dhcp4_client_lease_link(lease, probe);
@@ -885,7 +887,7 @@ static int n_dhcp4_client_probe_transition_ack(NDhcp4ClientProbe *probe, NDhcp4I
if (r)
return r;
- /* message consumed, don to fail */
+ message = NULL; /* consumed */
n_dhcp4_client_lease_link(lease, probe);
@@ -1167,17 +1169,15 @@ int n_dhcp4_client_probe_dispatch_io(NDhcp4ClientProbe *probe, uint32_t events)
switch (type) {
case N_DHCP4_MESSAGE_OFFER:
r = n_dhcp4_client_probe_transition_offer(probe, message);
+ message = NULL; /* consumed */
if (r)
return r;
- else
- message = NULL; /* consumed */
break;
case N_DHCP4_MESSAGE_ACK:
r = n_dhcp4_client_probe_transition_ack(probe, message);
+ message = NULL; /* consumed */
if (r)
return r;
- else
- message = NULL; /* consumed */
break;
case N_DHCP4_MESSAGE_NAK:
r = n_dhcp4_client_probe_transition_nak(probe);
diff --git a/shared/n-dhcp4/src/n-dhcp4-incoming.c b/shared/n-dhcp4/src/n-dhcp4-incoming.c
index 255da45845..e7234c0a52 100644
--- a/shared/n-dhcp4/src/n-dhcp4-incoming.c
+++ b/shared/n-dhcp4/src/n-dhcp4-incoming.c
@@ -365,10 +365,7 @@ static int n_dhcp4_incoming_query_u32(NDhcp4Incoming *message, uint8_t option, u
memcpy(&be32, data, sizeof(be32));
- if (be32 == (uint32_t)-1)
- *u32p = 0;
- else
- *u32p = ntohl(be32);
+ *u32p = ntohl(be32);
return 0;
}
diff --git a/shared/n-dhcp4/src/n-dhcp4.h b/shared/n-dhcp4/src/n-dhcp4.h
index ef75eca7c8..a800352b50 100644
--- a/shared/n-dhcp4/src/n-dhcp4.h
+++ b/shared/n-dhcp4/src/n-dhcp4.h
@@ -157,6 +157,7 @@ NDhcp4ClientLease *n_dhcp4_client_lease_unref(NDhcp4ClientLease *lease);
void n_dhcp4_client_lease_get_yiaddr(NDhcp4ClientLease *lease, struct in_addr *yiaddr);
void n_dhcp4_client_lease_get_siaddr(NDhcp4ClientLease *lease, struct in_addr *siaddr);
+void n_dhcp4_client_lease_get_basetime(NDhcp4ClientLease *lease, uint64_t *ns_basetimep);
void n_dhcp4_client_lease_get_lifetime(NDhcp4ClientLease *lease, uint64_t *ns_lifetimep);
int n_dhcp4_client_lease_query(NDhcp4ClientLease *lease, uint8_t option, uint8_t **datap, size_t *n_datap);