#include "dhcp-internal.h"
#include "sd-dhcp-client.h"
-#define DHCP_CLIENT_MIN_OPTIONS_SIZE 312
-
struct sd_dhcp_client {
DHCPState state;
sd_event *event;
defined default size unless the Maximum Messge Size option
is explicitely set */
max_size = htobe16(DHCP_IP_UDP_SIZE + DHCP_MESSAGE_SIZE +
- DHCP_CLIENT_MIN_OPTIONS_SIZE);
+ DHCP_MIN_OPTIONS_SIZE);
r = dhcp_option_append(opt, optlen,
DHCP_OPTION_MAXIMUM_MESSAGE_SIZE,
2, &max_size);
size_t optlen, len;
uint8_t *opt;
- optlen = DHCP_CLIENT_MIN_OPTIONS_SIZE;
+ optlen = DHCP_MIN_OPTIONS_SIZE;
len = sizeof(DHCPPacket) + optlen;
discover = malloc0(len);
int err;
uint8_t *opt;
- optlen = DHCP_CLIENT_MIN_OPTIONS_SIZE;
+ optlen = DHCP_MIN_OPTIONS_SIZE;
len = DHCP_MESSAGE_SIZE + optlen;
request = malloc0(len);
if (client->state == DHCP_STATE_RENEWING) {
err = dhcp_network_send_udp_socket(client->fd,
client->lease->server_address,
+ DHCP_PORT_SERVER,
&request->dhcp,
len - DHCP_IP_UDP_SIZE);
} else {
client->attempt = 1;
r = dhcp_network_bind_udp_socket(client->index,
- client->lease->address);
+ client->lease->address,
+ DHCP_PORT_CLIENT);
if (r < 0) {
client_stop(client, r);
return 0;
assert(message);
if (be32toh(message->xid) != client->xid)
- return -EINVAL;
+ return 0;
if (memcmp(&message->chaddr[0], &client->mac_addr.ether_addr_octet,
ETHER_ADDR_LEN))
- return -EINVAL;
+ return 0;
switch (client->state) {
case DHCP_STATE_SELECTING:
static int client_receive_message_raw(sd_event_source *s, int fd,
uint32_t revents, void *userdata) {
sd_dhcp_client *client = userdata;
- uint8_t buf[sizeof(DHCPMessage) + DHCP_CLIENT_MIN_OPTIONS_SIZE];
+ uint8_t buf[sizeof(DHCPMessage) + DHCP_MIN_OPTIONS_SIZE];
int buflen = sizeof(buf);
int len, r = 0;
usec_t time_now;
static int client_receive_message_udp(sd_event_source *s, int fd,
uint32_t revents, void *userdata) {
sd_dhcp_client *client = userdata;
- uint8_t buf[sizeof(DHCPPacket) + DHCP_CLIENT_MIN_OPTIONS_SIZE];
+ uint8_t buf[sizeof(DHCPPacket) + DHCP_MIN_OPTIONS_SIZE];
int buflen = sizeof(buf);
int len, r = 0;
DHCPPacket *packet;
r = dhcp_packet_verify_headers(packet, BOOTREPLY, len);
if (r < 0)
- return r;
+ return 0;
len -= DHCP_IP_UDP_SIZE;