static int check_options(uint8_t code, uint8_t len, const uint8_t *option,
void *user_data)
{
+ switch(code) {
+ case DHCP_OPTION_CLIENT_IDENTIFIER:
+ assert_se(len == 7);
+ assert_se(option[0] == 0x01);
+ assert_se(memcmp(&option[1], &mac_addr, ETH_ALEN) == 0);
+ break;
+
+ default:
+ break;
+ }
+
return 0;
}
sd_dhcp_client_stop(client);
sd_dhcp_client_free(client);
- close(test_fd[0]);
- close(test_fd[1]);
+ test_fd[1] = safe_close(test_fd[1]);
callback_recv = NULL;
}
static int test_addr_acq_recv_request(size_t size, DHCPMessage *request)
{
uint16_t udp_check = 0;
+ uint8_t *msg_bytes = (uint8_t *)request;
int res;
res = dhcp_option_parse(request, size, check_options, NULL);
assert_se(res == DHCP_REQUEST);
assert_se(xid == request->xid);
+ assert_se(msg_bytes[size - 1] == DHCP_OPTION_END);
+
if (verbose)
printf(" recv DHCP Request 0x%08x\n", be32toh(xid));
static int test_addr_acq_recv_discover(size_t size, DHCPMessage *discover)
{
uint16_t udp_check = 0;
+ uint8_t *msg_bytes = (uint8_t *)discover;
int res;
res = dhcp_option_parse(discover, size, check_options, NULL);
assert_se(res == DHCP_DISCOVER);
+ assert_se(msg_bytes[size - 1] == DHCP_OPTION_END);
+
xid = discover->xid;
if (verbose)
callback_recv = test_addr_acq_recv_discover;
- assert_se(sd_event_add_monotonic(e, &test_hangcheck,
- time_now + 2 * USEC_PER_SEC, 0,
- test_dhcp_hangcheck, NULL) >= 0);
+ assert_se(sd_event_add_time(e, &test_hangcheck,
+ CLOCK_MONOTONIC,
+ time_now + 2 * USEC_PER_SEC, 0,
+ test_dhcp_hangcheck, NULL) >= 0);
res = sd_dhcp_client_start(client);
assert_se(res == 0 || res == -EINPROGRESS);
sd_dhcp_client_stop(client);
sd_dhcp_client_free(client);
- close(test_fd[0]);
- close(test_fd[1]);
+ test_fd[1] = safe_close(test_fd[1]);
callback_recv = NULL;
xid = 0;