return 0;
}
-int sd_dhcp_client_prefixlen(const struct in_addr *addr) {
- int len = 0;
- uint32_t mask;
-
- assert_return(addr, -EADDRNOTAVAIL);
-
- mask = be32toh(addr->s_addr);
- while (mask) {
- len++;
- mask = mask << 1;
- }
-
- return len;
-}
-
int sd_dhcp_client_get_router(sd_dhcp_client *client, struct in_addr *addr) {
assert_return(client, -EINVAL);
assert_return(addr, -EINVAL);
return client_initialize_events(client, usec);
}
-static int client_parse_offer(uint8_t code, uint8_t len, const uint8_t *option,
+static int client_parse_options(uint8_t code, uint8_t len, const uint8_t *option,
void *user_data) {
DHCPLease *lease = user_data;
be32_t val;
break;
case DHCP_OPTION_DOMAIN_NAME_SERVER:
- if (len >= 4) {
+ if (len && !(len % 4)) {
unsigned i;
lease->dns_size = len / 4;
return -ENOMEM;
len = len - DHCP_IP_UDP_SIZE;
- r = dhcp_option_parse(&offer->dhcp, len, client_parse_offer,
+ r = dhcp_option_parse(&offer->dhcp, len, client_parse_options,
lease);
if (r != DHCP_OFFER)
return -ENOMSG;
if (!lease)
return -ENOMEM;
- r = dhcp_option_parse(dhcp, len, client_parse_offer, lease);
+ r = dhcp_option_parse(dhcp, len, client_parse_options, lease);
if (r == DHCP_NAK)
return DHCP_EVENT_NO_LEASE;