chiark / gitweb /
networkd: VLAN - allow multiple vlans to be created on a link
[elogind.git] / src / libsystemd-dhcp / test-dhcp-client.c
index d398510745f373049c4e122da48a882b04a377b1..56a10b3dfc7bb6c8b7fc2a5420275a36f955e595 100644 (file)
@@ -42,12 +42,18 @@ static int test_fd[2];
 
 static void test_request_basic(sd_event *e)
 {
+        int r;
+
         sd_dhcp_client *client;
 
-        client = sd_dhcp_client_new(e);
+        r = sd_dhcp_client_new(&client);
 
+        assert(r >= 0);
         assert(client);
 
+        r = sd_dhcp_client_attach_event(client, e, 0);
+        assert(r >= 0);
+
         assert(sd_dhcp_client_set_request_option(NULL, 0) == -EINVAL);
         assert(sd_dhcp_client_set_request_address(NULL, NULL) == -EINVAL);
         assert(sd_dhcp_client_set_index(NULL, 0) == -EINVAL);
@@ -85,6 +91,7 @@ static void test_request_basic(sd_event *e)
         assert(sd_dhcp_client_set_request_option(client, 33) == 0);
         assert(sd_dhcp_client_set_request_option(client, 33) == -EEXIST);
         assert(sd_dhcp_client_set_request_option(client, 44) == 0);
+        assert(sd_dhcp_client_set_request_option(client, 33) == -EEXIST);
 }
 
 static uint16_t client_checksum(void *buf, int len)
@@ -102,10 +109,13 @@ static uint16_t client_checksum(void *buf, int len)
 
         if (len & 0x01) {
                 odd = buf;
-                sum += odd[len];
+                sum += odd[len - 1];
         }
 
-        return ~((sum & 0xffff) + (sum >> 16));
+        while (sum >> 16)
+                sum = (sum & 0xffff) + (sum >> 16);
+
+        return ~sum;
 }
 
 static void test_checksum(void)
@@ -116,13 +126,7 @@ static void test_checksum(void)
                 0xff, 0xff, 0xff, 0xff
         };
 
-        uint8_t check[2] = {
-                0x78, 0xae
-        };
-
-        uint16_t *val = (uint16_t *)check;
-
-        assert(client_checksum(&buf, 20) == *val);
+        assert(client_checksum(&buf, 20) == be16toh(0x78ae));
 }
 
 static int check_options(uint8_t code, uint8_t len, const uint8_t *option,
@@ -187,14 +191,29 @@ int dhcp_network_bind_raw_socket(int index, union sockaddr_union *link)
         return test_fd[0];
 }
 
+int dhcp_network_bind_udp_socket(int index, be32_t client_address)
+{
+        return 0;
+}
+
+int dhcp_network_send_udp_socket(int s, be32_t server_address,
+                                 const void *packet, size_t len)
+{
+        return 0;
+}
+
 static void test_discover_message(sd_event *e)
 {
         sd_dhcp_client *client;
-        int res;
+        int res, r;
 
-        client = sd_dhcp_client_new(e);
+        r = sd_dhcp_client_new(&client);
+        assert(r >= 0);
         assert(client);
 
+        r = sd_dhcp_client_attach_event(client, e, 0);
+        assert(r >= 0);
+
         assert(sd_dhcp_client_set_index(client, 42) >= 0);
         assert(sd_dhcp_client_set_mac(client, &mac_addr) >= 0);