From 0a1b6da82109c3b08b1f966a1625a77cc312135a Mon Sep 17 00:00:00 2001 From: Tom Gundersen Date: Sun, 23 Feb 2014 22:07:07 +0100 Subject: [PATCH] sd-dhcp: message_init - only set secs in the client --- src/libsystemd-dhcp/dhcp-internal.h | 2 +- src/libsystemd-dhcp/dhcp-packet.c | 9 +++------ src/libsystemd-dhcp/sd-dhcp-client.c | 10 ++++++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/libsystemd-dhcp/dhcp-internal.h b/src/libsystemd-dhcp/dhcp-internal.h index 9a997c10c..7b2e35cac 100644 --- a/src/libsystemd-dhcp/dhcp-internal.h +++ b/src/libsystemd-dhcp/dhcp-internal.h @@ -46,7 +46,7 @@ int dhcp_option_parse(DHCPMessage *message, size_t len, dhcp_option_cb_t cb, void *user_data); int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, uint8_t type, - uint16_t secs, uint8_t **opt, size_t *optlen); + uint8_t **opt, size_t *optlen); void dhcp_packet_append_ip_headers(DHCPPacket *packet, uint16_t len); diff --git a/src/libsystemd-dhcp/dhcp-packet.c b/src/libsystemd-dhcp/dhcp-packet.c index 13881ea0d..1937de425 100644 --- a/src/libsystemd-dhcp/dhcp-packet.c +++ b/src/libsystemd-dhcp/dhcp-packet.c @@ -37,10 +37,11 @@ #define DHCP_CLIENT_MIN_OPTIONS_SIZE 312 int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, - uint8_t type, uint16_t secs, uint8_t **opt, - size_t *optlen) { + uint8_t type, uint8_t **opt, size_t *optlen) { int err; + assert(op == BOOTREQUEST || op == BOOTREPLY); + *opt = (uint8_t *)(message + 1); if (*optlen < 4) @@ -52,10 +53,6 @@ int dhcp_message_init(DHCPMessage *message, uint8_t op, uint32_t xid, message->hlen = ETHER_ADDR_LEN; message->xid = htobe32(xid); - /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers - refuse to issue an DHCP lease if 'secs' is set to zero */ - message->secs = htobe16(secs); - (*opt)[0] = 0x63; (*opt)[1] = 0x82; (*opt)[2] = 0x53; diff --git a/src/libsystemd-dhcp/sd-dhcp-client.c b/src/libsystemd-dhcp/sd-dhcp-client.c index 63b7b24d8..01397cff3 100644 --- a/src/libsystemd-dhcp/sd-dhcp-client.c +++ b/src/libsystemd-dhcp/sd-dhcp-client.c @@ -206,11 +206,17 @@ static int client_message_init(sd_dhcp_client *client, DHCPMessage *message, size_t *optlen) { int r; - r = dhcp_message_init(message, BOOTREQUEST, client->xid, type, - secs, opt, optlen); + assert(secs); + + r = dhcp_message_init(message, BOOTREQUEST, client->xid, type, opt, + optlen); if (r < 0) return r; + /* Although 'secs' field is a SHOULD in RFC 2131, certain DHCP servers + refuse to issue an DHCP lease if 'secs' is set to zero */ + message->secs = htobe16(secs); + memcpy(&message->chaddr, &client->mac_addr, ETH_ALEN); if (client->state == DHCP_STATE_RENEWING || -- 2.30.2