test-dhcp6-client.c revision 44481a8b537839cd9ffead4d261491641f5b5260
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering This file is part of systemd.
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering Copyright (C) 2014 Intel Corporation. All rights reserved.
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering systemd is free software; you can redistribute it and/or modify it
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering under the terms of the GNU Lesser General Public License as published by
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering the Free Software Foundation; either version 2.1 of the License, or
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering (at your option) any later version.
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering systemd is distributed in the hope that it will be useful, but
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering WITHOUT ANY WARRANTY; without even the implied warranty of
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering Lesser General Public License for more details.
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering You should have received a copy of the GNU Lesser General Public License
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering along with systemd; If not, see <http://www.gnu.org/licenses/>.
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic bool verbose = false;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_client_basic(sd_event *e) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_new(&client) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_index(client, 15) == 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_index(client, -42) == -EINVAL);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_index(client, -1) == 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_index(client, 42) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_mac(client, &mac_addr) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_CLIENTID) == -EINVAL);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_DNS_SERVERS) == -EEXIST);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_NTP_SERVER) == -EEXIST);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_SNTP_SERVERS) == 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_DOMAIN_LIST) == -EEXIST);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, 10) == -EINVAL);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_callback(client, NULL, NULL) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_detach_event(client) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!sd_dhcp6_client_unref(client));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, DHCP6_OPTION_VENDOR_CLASS, 0x00, 0x09,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering '1', '2', '3', '4', '5', '6', '7', '8', '9',
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering size_t buflen = sizeof(packet), outlen = sizeof(result);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_parse(&buf, &zero, &optcode, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_parse(&buf, &buflen, &optcode, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(buflen + pos == sizeof(packet));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_append(&out, &outlen, optcode, optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_parse(&buf, &buflen, &optcode, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(optcode == DHCP6_OPTION_VENDOR_CLASS);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(buflen + pos == sizeof(packet));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_append(&out, &outlen, optcode, optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(memcmp(packet, result, sizeof(packet)) == 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x02, 0x0f, 0xb4, 0xe5, 0x00, 0x01, 0x00, 0x0e,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x01, 0x00, 0x01, 0x1a, 0x6b, 0xf3, 0x30,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x3c, 0x97, 0x0e, 0xcf, 0xa3, 0x7d, 0x00, 0x03,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x5e, 0x0e, 0xcf, 0xa3, 0x7d, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x05,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x18, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3, 0x09, 0x3c,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x55, 0xad, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0xb4, 0x00, 0x0d, 0x00, 0x32, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x28,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x65, 0x73, 0x29, 0x20, 0x72, 0x65, 0x6e, 0x65,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x77, 0x65, 0x64, 0x2e, 0x20, 0x47, 0x72, 0x65,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x65, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x20, 0x66,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x72, 0x6f, 0x6d, 0x20, 0x70, 0x6c, 0x61, 0x6e,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x65, 0x74, 0x20, 0x45, 0x61, 0x72, 0x74, 0x68,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x17, 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x0b,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x03, 0x6c, 0x61, 0x62, 0x05, 0x69, 0x6e, 0x74,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x72, 0x61, 0x00, 0x00, 0x1f, 0x00, 0x10, 0x20,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x01, 0x0d, 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x02, 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x19,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x40, 0x5c, 0x53, 0x78, 0x2b, 0xcb, 0xb3, 0x6d,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x07, 0xf7, 0x4e, 0x57, 0x00, 0x02, 0x00, 0x0e,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x01, 0x00, 0x01, 0x19, 0x40, 0x5c, 0x53,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x78, 0x2b, 0xcb, 0xb3, 0x6d, 0x53, 0x00, 0x01,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x0e, 0x00, 0x01, 0x00, 0x01, 0x1a, 0x6b,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0xf3, 0x30, 0x3c, 0x97, 0x0e, 0xcf, 0xa3, 0x7d,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x03, 0x00, 0x4a, 0x0e, 0xcf, 0xa3, 0x7d,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x05, 0x00, 0x18, 0x20, 0x01, 0x0d, 0xb8,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0xde, 0xad, 0xbe, 0xef, 0x78, 0xee, 0x1c, 0xf3,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x09, 0x3c, 0x55, 0xad, 0x00, 0x00, 0x00, 0x96,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x00, 0xb4, 0x00, 0x0d, 0x00, 0x1e,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x00, 0x41, 0x6c, 0x6c, 0x20, 0x61, 0x64,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x20,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x77, 0x65, 0x72, 0x65, 0x20, 0x61, 0x73, 0x73,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x69, 0x67, 0x6e, 0x65, 0x64, 0x2e, 0x00, 0x17,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x10, 0x20, 0x01, 0x0d, 0xb8, 0xde, 0xad,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0xbe, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x00, 0x01, 0x00, 0x18, 0x00, 0x0b, 0x03, 0x6c,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering 0x61, 0x62, 0x05, 0x69, 0x6e, 0x74, 0x72, 0x61,
16ac401407959cbc62312e61c2dd76dbc3a0793bLennart Poettering 0x00, 0x00, 0x1f, 0x00, 0x10, 0x20, 0x01, 0x0d,
16ac401407959cbc62312e61c2dd76dbc3a0793bLennart Poettering 0xb8, 0xde, 0xad, 0xbe, 0xef, 0x00, 0x00, 0x00,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_advertise_option(sd_event *e) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering _cleanup_dhcp6_lease_free_ sd_dhcp6_lease *lease = NULL;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering DHCP6Message *advertise = (DHCP6Message *)msg_advertise;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering uint8_t *optval, *opt = msg_advertise + sizeof(DHCP6Message);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering size_t optlen, len = sizeof(msg_advertise) - sizeof(DHCP6Message);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(advertise->type == DHCP6_ADVERTISE);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se((be32toh(advertise->transaction_id) & 0x00ffffff) ==
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering while ((r = dhcp6_option_parse(&opt, &len, &optcode, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval, &msg_advertise[26], optlen));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval, &val, sizeof(val)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval + 4, &val, sizeof(val)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval + 8, &val, sizeof(val)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_option_parse_ia(&optval, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval, &msg_advertise[179], optlen));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_lease_set_serverid(lease, optval,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_lease_set_preference(lease,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_first_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_next_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_first_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_next_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_next_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_first_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_next_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_lease_get_serverid(lease, &opt, &len) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(opt, &msg_advertise[179], len));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(dhcp6_lease_get_preference(lease, &preference) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_hangcheck(sd_event_source *s, uint64_t usec, void *userdata) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_not_reached("Test case should have completed in 2 seconds");
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringint detect_virtualization(const char **id) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringint dhcp6_network_bind_udp_socket(int index, struct in6_addr *local_address) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering if (socketpair(AF_UNIX, SOCK_STREAM, 0, test_dhcp_fd) < 0)
ff975efb2e88dcd5221a2f0d76c4c87e85b821a8Lennart Poetteringstatic int test_client_send_reply(DHCP6Message *request) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering reply.transaction_id = request->transaction_id;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(msg_reply, &reply.transaction_id, 4);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&msg_reply[26], test_duid, sizeof(test_duid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&msg_reply[44], &test_iaid, sizeof(test_iaid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(write(test_dhcp_fd[1], msg_reply, sizeof(msg_reply))
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_client_verify_request(DHCP6Message *request, uint8_t *option,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering _cleanup_dhcp6_lease_free_ sd_dhcp6_lease *lease = NULL;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering bool found_clientid = false, found_iana = false, found_serverid = false;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(request->type == DHCP6_REQUEST);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering while ((r = dhcp6_option_parse(&option, &len,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval, &test_iaid, sizeof(test_iaid)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval + 4, &val, sizeof(val)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(optval + 8, &val, sizeof(val)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!dhcp6_option_parse_ia(&optval, &optlen,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(&msg_advertise[179], optval, optlen));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(found_clientid && found_iana && found_serverid);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_first_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!memcmp(&addr, &msg_advertise[42], sizeof(addr)));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_lease_get_next_address(lease, &addr, <_pref,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_client_send_advertise(DHCP6Message *solicit)
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering advertise.transaction_id = solicit->transaction_id;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(msg_advertise, &advertise.transaction_id, 4);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&msg_advertise[8], test_duid, sizeof(test_duid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&msg_advertise[26], &test_iaid, sizeof(test_iaid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(write(test_dhcp_fd[1], msg_advertise, sizeof(msg_advertise))
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_client_verify_solicit(DHCP6Message *solicit, uint8_t *option,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering bool found_clientid = false, found_iana = false;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(solicit->type == DHCP6_SOLICIT);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering while ((r = dhcp6_option_parse(&option, &len,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&test_duid, optval, sizeof(test_duid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering memcpy(&test_iaid, optval, sizeof(test_iaid));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringint dhcp6_network_send_udp_socket(int s, struct in6_addr *server_address,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering IN6ADDR_ALL_DHCP6_RELAY_AGENTS_AND_SERVERS_INIT;
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(len > sizeof(DHCP6Message) + 4);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(IN6_ARE_ADDR_EQUAL(server_address, &mcast));
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(message->transaction_id & 0x00ffffff);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering test_client_verify_solicit(message, option, len);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering } else if (test_client_message_num == 1) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering test_client_verify_request(message, option, len);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic void test_client_solicit_cb(sd_dhcp6_client *client, int event,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(event == DHCP6_EVENT_IP_ACQUIRE);
2f671520ebade4877cbf6aca3572a5f8c4e1871dLennart Poettering assert_se(sd_dhcp6_client_set_request_option(client, DHCP6_OPTION_DNS_SERVERS) == -EBUSY);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poetteringstatic int test_client_solicit(sd_event *e) {
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering usec_t time_now = now(clock_boottime_or_monotonic());
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_new(&client) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_index(client, test_index) == 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_mac(client, &mac_addr) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_set_callback(client,
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_event_add_time(e, &hangcheck, clock_boottime_or_monotonic(),
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(sd_dhcp6_client_start(client) >= 0);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering hangcheck = sd_event_source_unref(hangcheck);
e821075a23fdfa3ca7738fc30bb2d4c430fe10c0Lennart Poettering assert_se(!sd_dhcp6_client_unref(client));