int is_our_address(ipv6_addr_t *addr) { ipv6_net_if_ext_t *net_if_ext; ipv6_net_if_addr_t *myaddr; uint8_t prefix, suffix; int if_id = -1; DEBUGF("Is this my addres: %s?\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, addr)); while ((if_id = net_if_iter_interfaces(if_id)) >= 0) { net_if_ext = ipv6_net_if_get_ext(if_id); myaddr = NULL; prefix = net_if_ext->prefix / 8; suffix = IPV6_ADDR_LEN - prefix; while ((myaddr = (ipv6_net_if_addr_t *)net_if_iter_addresses(if_id, (net_if_addr_t **) &myaddr)) != NULL) { DEBUGF("\tCompare with: %s?\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, (ipv6_addr_t*) myaddr->addr_data)); if ((ipv6_get_addr_match(myaddr->addr_data, addr) >= net_if_ext->prefix) && (memcmp(&addr->uint8[prefix], &myaddr->addr_data->uint8[prefix], suffix) == 0)) { return 1; } } } return 0; }
/** * @brief Check if the given IPv6 address is assigned to any configured * interface * * @param[in] addr The IPv6 address to check * * @return 1 If *addr* is assigned to at least one interface * @return 0 If *addr* is not assigned to any interface * @return -1 If no IPv6 address is configured to any interface */ static int is_our_address(ipv6_addr_t *addr) { int if_id = -1; int if_counter = -1; DEBUGF("Is this my addres: %s?\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, addr)); while ((if_id = net_if_iter_interfaces(if_id)) >= 0) { ipv6_net_if_ext_t *net_if_ext = ipv6_net_if_get_ext(if_id); ipv6_net_if_addr_t *myaddr = NULL; uint8_t prefix = net_if_ext->prefix / 8; uint8_t suffix = IPV6_ADDR_LEN - prefix; while ((myaddr = (ipv6_net_if_addr_t *)net_if_iter_addresses(if_id, (net_if_addr_t **) &myaddr)) != NULL) { if_counter++; DEBUGF("\tCompare with: %s?\n", ipv6_addr_to_str(addr_str, IPV6_MAX_ADDR_STR_LEN, (ipv6_addr_t*) myaddr->addr_data)); if ((ipv6_get_addr_match(myaddr->addr_data, addr) >= net_if_ext->prefix) && (memcmp(&addr->uint8[prefix], &myaddr->addr_data->uint8[prefix], suffix) == 0)) { return 1; } } } /* return negative value if no address is configured so far */ if (if_counter >= 0) { return 0; } return -1; }
int is_our_address(ipv6_addr_t *addr) { ipv6_net_if_ext_t *net_if_ext; ipv6_net_if_addr_t *myaddr; uint8_t prefix, suffix; int if_id = -1; while ((if_id = net_if_iter_interfaces(if_id)) >= 0) { net_if_ext = ipv6_net_if_get_ext(if_id); myaddr = NULL; prefix = net_if_ext->prefix / 8; suffix = IPV6_ADDR_LEN - prefix; while ((myaddr = (ipv6_net_if_addr_t *)net_if_iter_addresses(if_id, (net_if_addr_t **) &myaddr)) != NULL) { if ((ipv6_get_addr_match(myaddr->addr_data, addr) >= net_if_ext->prefix) && (memcmp(&addr->uint8[prefix], &myaddr->addr_data->uint8[prefix], suffix) == 0)) { return 1; } } } return 0; }