From: Tom Gundersen Date: Sun, 23 Feb 2014 21:07:07 +0000 (+0100) Subject: sd-dhcp: message_init - only set secs in the client X-Git-Tag: v210~31 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=0a1b6da82109c3b08b1f966a1625a77cc312135a;hp=8fa2eeace7beecedb01c82811e28949cacec1236 sd-dhcp: message_init - only set secs in the client --- 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 ||