static sd_ipv4ll *ipv4ll_client_notify(sd_ipv4ll *ll, int event) { assert(ll); if (ll->cb) { ll = sd_ipv4ll_ref(ll); ll->cb(ll, event, ll->userdata); ll = sd_ipv4ll_unref(ll); } return ll; }
static void test_public_api_setters(sd_event *e) { struct in_addr address = {}; unsigned seed = 0; sd_ipv4ll *ll; struct ether_addr mac_addr = { .ether_addr_octet = {'A', 'B', 'C', '1', '2', '3'}}; if (verbose) printf("* %s\n", __FUNCTION__); assert_se(sd_ipv4ll_new(&ll) == 0); assert_se(ll); assert_se(sd_ipv4ll_attach_event(NULL, NULL, 0) == -EINVAL); assert_se(sd_ipv4ll_attach_event(ll, e, 0) == 0); assert_se(sd_ipv4ll_attach_event(ll, e, 0) == -EBUSY); assert_se(sd_ipv4ll_set_callback(NULL, NULL, NULL) == -EINVAL); assert_se(sd_ipv4ll_set_callback(ll, NULL, NULL) == 0); assert_se(sd_ipv4ll_set_address(ll, &address) == -EINVAL); address.s_addr |= htobe32(169U << 24 | 254U << 16); assert_se(sd_ipv4ll_set_address(ll, &address) == -EINVAL); address.s_addr |= htobe32(0x00FF); assert_se(sd_ipv4ll_set_address(ll, &address) == -EINVAL); address.s_addr |= htobe32(0xF000); assert_se(sd_ipv4ll_set_address(ll, &address) == 0); address.s_addr |= htobe32(0x0F00); assert_se(sd_ipv4ll_set_address(ll, &address) == -EINVAL); assert_se(sd_ipv4ll_set_address_seed(NULL, seed) == -EINVAL); assert_se(sd_ipv4ll_set_address_seed(ll, seed) == 0); assert_se(sd_ipv4ll_set_mac(NULL, NULL) == -EINVAL); assert_se(sd_ipv4ll_set_mac(ll, NULL) == -EINVAL); assert_se(sd_ipv4ll_set_mac(ll, &mac_addr) == 0); assert_se(sd_ipv4ll_set_index(NULL, -1) == -EINVAL); assert_se(sd_ipv4ll_set_index(ll, -1) == -EINVAL); assert_se(sd_ipv4ll_set_index(ll, -99) == -EINVAL); assert_se(sd_ipv4ll_set_index(ll, 1) == 0); assert_se(sd_ipv4ll_set_index(ll, 99) == 0); assert_se(sd_ipv4ll_ref(ll) == ll); assert_se(sd_ipv4ll_unref(ll) == NULL); /* Cleanup */ assert_se(sd_ipv4ll_unref(ll) == NULL); }