예제 #1
0
파일: ip.c 프로젝트: A-L-E-X/RIOT
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;
}
예제 #2
0
파일: ip.c 프로젝트: Troels51/RIOT
/**
 * @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;
}
예제 #3
0
파일: ip.c 프로젝트: Rossano/RIOT
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;
}