static void test_ipv6_netif_find_best_src_addr__success(void) { ng_ipv6_addr_t ll_addr1 = NG_IPV6_ADDR_UNSPECIFIED; ng_ipv6_addr_t ll_addr2 = NG_IPV6_ADDR_UNSPECIFIED; ng_ipv6_addr_t mc_addr = NG_IPV6_ADDR_ALL_NODES_LINK_LOCAL; ng_ipv6_addr_t *out = NULL; ll_addr1.u8[15] = 1; ng_ipv6_addr_set_link_local_prefix(&ll_addr1); ll_addr2.u8[15] = 2; ng_ipv6_addr_set_link_local_prefix(&ll_addr2); TEST_ASSERT_EQUAL_INT(126, ng_ipv6_addr_match_prefix(&ll_addr2, &ll_addr1)); test_ipv6_netif_add__success(); /* adds DEFAULT_TEST_NETIF as interface */ TEST_ASSERT_EQUAL_INT(0, ng_ipv6_netif_add_addr(DEFAULT_TEST_NETIF, &mc_addr, DEFAULT_TEST_PREFIX_LEN, false)); TEST_ASSERT_EQUAL_INT(0, ng_ipv6_netif_add_addr(DEFAULT_TEST_NETIF, &ll_addr1, DEFAULT_TEST_PREFIX_LEN, false)); TEST_ASSERT_NOT_NULL((out = ng_ipv6_netif_find_best_src_addr(DEFAULT_TEST_NETIF, &ll_addr2))); TEST_ASSERT(out != &ll_addr1); TEST_ASSERT(out != &ll_addr2); TEST_ASSERT_EQUAL_INT(true, ng_ipv6_addr_equal(out, &ll_addr1)); }
static void test_ipv6_addr_match_prefix_same_pointer(void) { ng_ipv6_addr_t a = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; TEST_ASSERT_EQUAL_INT(128, ng_ipv6_addr_match_prefix(&a, &a)); }
static void test_ipv6_addr_match_prefix_second_NULL(void) { ng_ipv6_addr_t a = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; TEST_ASSERT_EQUAL_INT(0, ng_ipv6_addr_match_prefix(&a, NULL)); }
static void test_ipv6_netif_match_prefix__success3(void) { ng_ipv6_addr_t addr = DEFAULT_TEST_IPV6_PREFIX64; ng_ipv6_addr_t *out = NULL; test_ipv6_netif_add_addr__success(); /* adds DEFAULT_TEST_IPV6_ADDR to * DEFAULT_TEST_NETIF */ TEST_ASSERT_NOT_NULL((out = ng_ipv6_netif_match_prefix(DEFAULT_TEST_NETIF, &addr))); TEST_ASSERT(out != &addr); TEST_ASSERT_EQUAL_INT(64, ng_ipv6_addr_match_prefix(out, &addr)); }
static uint8_t _find_by_prefix_unsafe(ng_ipv6_addr_t **res, ng_ipv6_netif_t *iface, const ng_ipv6_addr_t *addr, bool only_unicast) { uint8_t best_match = 0; for (int i = 0; i < NG_IPV6_NETIF_ADDR_NUMOF; i++) { uint8_t match; if ((only_unicast && ng_ipv6_netif_addr_is_non_unicast(&(iface->addrs[i].addr))) || ng_ipv6_addr_is_unspecified(&(iface->addrs[i].addr))) { continue; } match = ng_ipv6_addr_match_prefix(&(iface->addrs[i].addr), addr); if (only_unicast && !ng_ipv6_addr_is_multicast(addr) && (match < iface->addrs[i].prefix_len)) { /* match but not of same subnet */ continue; } if (match > best_match) { if (res != NULL) { *res = &(iface->addrs[i].addr); } best_match = match; } } #if ENABLE_DEBUG if (*res != NULL) { DEBUG("ipv6 netif: Found %s on interface %" PRIkernel_pid " matching ", ng_ipv6_addr_to_str(addr_str, *res, sizeof(addr_str)), iface->pid); DEBUG("%s by %" PRIu8 " bits (used as source address = %s)\n", ng_ipv6_addr_to_str(addr_str, addr, sizeof(addr_str)), best_match, (only_unicast) ? "true" : "false"); } else { DEBUG("ipv6 netif: Did not found any address on interface %" PRIkernel_pid " matching %s (used as source address = %s)\n", iface->pid, ng_ipv6_addr_to_str(addr_str, addr, sizeof(addr_str)), (only_unicast) ? "true" : "false"); } #endif return best_match; }
static void test_ipv6_netif_find_by_prefix__success2(void) { ng_ipv6_addr_t addr = DEFAULT_TEST_IPV6_PREFIX18; ng_ipv6_addr_t *out = NULL; test_ipv6_netif_add_addr__success(); /* adds DEFAULT_TEST_IPV6_ADDR to * DEFAULT_TEST_NETIF */ TEST_ASSERT_EQUAL_INT(DEFAULT_TEST_NETIF, ng_ipv6_netif_find_by_prefix(&out, &addr)); TEST_ASSERT_NOT_NULL(out); TEST_ASSERT(out != &addr); TEST_ASSERT_EQUAL_INT(18, ng_ipv6_addr_match_prefix(out, &addr)); }
static void test_ipv6_addr_match_prefix_match_127(void) { ng_ipv6_addr_t a = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; ng_ipv6_addr_t b = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0e } }; TEST_ASSERT_EQUAL_INT(127, ng_ipv6_addr_match_prefix(&a, &b)); }
static void test_ipv6_addr_match_prefix_no_match(void) { ng_ipv6_addr_t a = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; ng_ipv6_addr_t b = { { 0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5, 0xf4, 0xf3, 0xf2, 0xf1, 0xf0 } }; TEST_ASSERT_EQUAL_INT(0, ng_ipv6_addr_match_prefix(&a, &b)); }
static void test_ipv6_addr_set_link_local_prefix(void) { ng_ipv6_addr_t a = { { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f } }; ng_ipv6_addr_t b = { { 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff } }; ng_ipv6_addr_set_link_local_prefix(&a); TEST_ASSERT_EQUAL_INT(64, ng_ipv6_addr_match_prefix(&a, &b)); }