int get_addr_of_if()

in sample_app/onvif_camera_mock/artifacts/wsdd/src/net_utils.c [137:200]


int get_addr_of_if(const char *if_name, int af, void *addr)
{

    struct ifaddrs *ifa_head;
    struct ifaddrs *ifa_cur;
    int result, addr_len;
    void *src;



    if( !if_name || !addr )
    {
        errno = EINVAL;
        return -1;
    }


    if( getifaddrs(&ifa_head) != 0 )
      return -1;


    result = -1;
    for( ifa_cur = ifa_head;  ifa_cur;  ifa_cur = ifa_cur->ifa_next )
    {

        if( !ifa_cur->ifa_name )
            continue;


        if( !ifa_cur->ifa_addr )
            continue;


        if( ifa_cur->ifa_addr->sa_family != af )
            continue;


        if( strcmp(if_name, (char *)ifa_cur->ifa_name) != 0 )
            continue;



        if( af == AF_INET6)
        {
            addr_len = sizeof(struct in6_addr);
            src      = &(((struct sockaddr_in6 *)ifa_cur->ifa_addr)->sin6_addr);
        }
        else
        {
            addr_len = sizeof(struct in_addr);
            src      = &(((struct sockaddr_in *)ifa_cur->ifa_addr)->sin_addr);
        }


        memcpy(addr, src, addr_len);
        result = 0;  //good job
        break;
    }


    freeifaddrs(ifa_head);

    return result;
}