X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Flibsystemd-network%2Ftest-dhcp-client.c;fp=src%2Flibsystemd-network%2Ftest-dhcp-client.c;h=a3d69f338c2b28b22ba4e8f0502c815d3b2b4f20;hb=5bac5235934fabe5a3e6a9d47f4812f81034c427;hp=0515440e4e97cf0d65e70050c4273a88890b39b5;hpb=40862866417265ac8c20422cb44f14a8f141ce0d;p=elogind.git diff --git a/src/libsystemd-network/test-dhcp-client.c b/src/libsystemd-network/test-dhcp-client.c index 0515440e4..a3d69f338 100644 --- a/src/libsystemd-network/test-dhcp-client.c +++ b/src/libsystemd-network/test-dhcp-client.c @@ -32,17 +32,16 @@ #include "sd-event.h" #include "event-util.h" +#include "dhcp-identifier.h" #include "dhcp-protocol.h" #include "dhcp-internal.h" #include "sd-dhcp-client.h" -static struct ether_addr mac_addr = { - .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'} -}; +static uint8_t mac_addr[] = {'A', 'B', 'C', '1', '2', '3'}; typedef int (*test_callback_recv_t)(size_t size, DHCPMessage *dhcp); -static bool verbose = false; +static bool verbose = true; static int test_fd[2]; static test_callback_recv_t callback_recv; static be32_t xid; @@ -136,10 +135,22 @@ static int check_options(uint8_t code, uint8_t len, const uint8_t *option, { 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); + { + uint32_t iaid; + struct duid duid; + size_t duid_len; + + assert_se(dhcp_identifier_set_duid_en(&duid, &duid_len) >= 0); + assert_se(dhcp_identifier_set_iaid(42, mac_addr, ETH_ALEN, &iaid) >= 0); + + assert_se(len == sizeof(uint8_t) + sizeof(uint32_t) + duid_len); + assert_se(len == 19); + assert_se(option[0] == 0xff); + + assert_se(memcmp(&option[1], &iaid, sizeof(iaid)) == 0); + assert_se(memcmp(&option[5], &duid, duid_len) == 0); break; + } default: break; @@ -185,8 +196,7 @@ int dhcp_network_send_raw_socket(int s, const union sockaddr_union *link, assert_se(ip_check == 0xffff); assert_se(discover->dhcp.xid); - assert_se(memcmp(discover->dhcp.chaddr, - &mac_addr.ether_addr_octet, 6) == 0); + assert_se(memcmp(discover->dhcp.chaddr, &mac_addr, ETH_ALEN) == 0); size = len - sizeof(struct iphdr) - sizeof(struct udphdr); @@ -246,10 +256,7 @@ static void test_discover_message(sd_event *e) assert_se(r >= 0); assert_se(sd_dhcp_client_set_index(client, 42) >= 0); - assert_se(sd_dhcp_client_set_mac(client, - (const uint8_t *) &mac_addr, - sizeof (mac_addr), - ARPHRD_ETHER) >= 0); + assert_se(sd_dhcp_client_set_mac(client, mac_addr, ETH_ALEN, ARPHRD_ETHER) >= 0); assert_se(sd_dhcp_client_set_request_option(client, 248) >= 0); @@ -404,8 +411,7 @@ static int test_addr_acq_recv_request(size_t size, DHCPMessage *request) { memcpy(&test_addr_acq_ack[26], &udp_check, sizeof(udp_check)); memcpy(&test_addr_acq_ack[32], &xid, sizeof(xid)); - memcpy(&test_addr_acq_ack[56], &mac_addr.ether_addr_octet, - ETHER_ADDR_LEN); + memcpy(&test_addr_acq_ack[56], &mac_addr, ETHER_ADDR_LEN); callback_recv = NULL; @@ -436,8 +442,7 @@ static int test_addr_acq_recv_discover(size_t size, DHCPMessage *discover) { memcpy(&test_addr_acq_offer[26], &udp_check, sizeof(udp_check)); memcpy(&test_addr_acq_offer[32], &xid, sizeof(xid)); - memcpy(&test_addr_acq_offer[56], &mac_addr.ether_addr_octet, - ETHER_ADDR_LEN); + memcpy(&test_addr_acq_offer[56], &mac_addr, ETHER_ADDR_LEN); callback_recv = test_addr_acq_recv_request; @@ -467,10 +472,7 @@ static void test_addr_acq(sd_event *e) { assert_se(r >= 0); assert_se(sd_dhcp_client_set_index(client, 42) >= 0); - assert_se(sd_dhcp_client_set_mac(client, - (const uint8_t *) &mac_addr, - sizeof (mac_addr), - ARPHRD_ETHER) >= 0); + assert_se(sd_dhcp_client_set_mac(client, mac_addr, ETH_ALEN, ARPHRD_ETHER) >= 0); assert_se(sd_dhcp_client_set_callback(client, test_addr_acq_acquired, e) >= 0);