uint32_t mtu;
uint32_t xid;
usec_t start_time;
- uint16_t secs;
unsigned int attempt;
usec_t request_sent;
sd_event_source *timeout_t1;
_cleanup_free_ DHCPPacket *packet;
size_t optlen, optoffset, size;
be16_t max_size;
+ usec_t time_now;
+ uint16_t secs;
int r;
assert(client);
- assert(client->secs);
+ assert(client->start_time);
assert(ret);
assert(_optlen);
assert(_optoffset);
/* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers
refuse to issue an DHCP lease if 'secs' is set to zero */
- packet->dhcp.secs = htobe16(client->secs);
+ r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
+ if (r < 0)
+ return r;
+ assert(time_now >= client->start_time);
+
+ /* seconds between sending first and last DISCOVER
+ * must always be strictly positive to deal with broken servers */
+ secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
+ packet->dhcp.secs = htobe16(secs);
/* RFC2132 section 4.1
A client that cannot receive unicast IP datagrams until its protocol
static int client_send_discover(sd_dhcp_client *client) {
_cleanup_free_ DHCPPacket *discover = NULL;
size_t optoffset, optlen;
- usec_t time_now;
int r;
assert(client);
assert(client->state == DHCP_STATE_INIT ||
client->state == DHCP_STATE_SELECTING);
- /* See RFC2131 section 4.4.1 */
-
- r = sd_event_now(client->event, clock_boottime_or_monotonic(), &time_now);
- if (r < 0)
- return r;
- assert(time_now >= client->start_time);
-
- /* seconds between sending first and last DISCOVER
- * must always be strictly positive to deal with broken servers */
- client->secs = ((time_now - client->start_time) / USEC_PER_SEC) ? : 1;
-
r = client_message_init(client, &discover, DHCP_DISCOVER,
&optlen, &optoffset);
if (r < 0)
if (r < 0)
goto error;
- r = sd_event_source_set_name(client->timeout_resend,
- "dhcp4-resend-timer");
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
if (r < 0)
goto error;
if (r < 0)
goto error;
- r = sd_event_source_set_name(client->receive_message,
- "dhcp4-receive-message");
+ r = sd_event_source_set_description(client->receive_message, "dhcp4-receive-message");
if (r < 0)
goto error;
r = sd_event_source_set_priority(client->timeout_resend,
client->event_priority);
- r = sd_event_source_set_name(client->timeout_resend,
- "dhcp4-resend-timer");
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
if (r < 0)
goto error;
}
client->fd = r;
- if (client->state == DHCP_STATE_INIT) {
+ if (client->state == DHCP_STATE_INIT || client->state == DHCP_STATE_INIT_REBOOT)
client->start_time = now(clock_boottime_or_monotonic());
- client->secs = 0;
- }
return client_initialize_events(client, client_receive_message_raw);
}
if (r < 0)
return r;
- r = sd_event_source_set_name(client->timeout_expire,
- "dhcp4-lifetime");
+ r = sd_event_source_set_description(client->timeout_expire, "dhcp4-lifetime");
if (r < 0)
return r;
if (r < 0)
return r;
- r = sd_event_source_set_name(client->timeout_t2,
- "dhcp4-t2-timeout");
+ r = sd_event_source_set_description(client->timeout_t2, "dhcp4-t2-timeout");
if (r < 0)
return r;
if (r < 0)
return r;
- r = sd_event_source_set_name(client->timeout_t1,
- "dhcp4-t1-timer");
+ r = sd_event_source_set_description(client->timeout_t1, "dhcp4-t1-timer");
if (r < 0)
return r;
if (r < 0)
goto error;
- r = sd_event_source_set_name(client->timeout_resend,
- "dhcp4-resend-timer");
+ r = sd_event_source_set_description(client->timeout_resend, "dhcp4-resend-timer");
if (r < 0)
goto error;
} else if (r == -ENOMSG)