int get_ip_of_if()

in sample_app/onvif_camera_mock/artifacts/wsdd/src/net_utils.c [216:280]


int get_ip_of_if(const char *if_name, int af, char *IP)
{

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



    if( !if_name || !IP )
    {
        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)
        {
            addrstr_len = INET6_ADDRSTRLEN;
            src         = &(((struct sockaddr_in6 *)ifa_cur->ifa_addr)->sin6_addr);
        }
        else
        {
            addrstr_len = INET_ADDRSTRLEN;
            src         = &(((struct sockaddr_in *)ifa_cur->ifa_addr)->sin_addr);
        }


        if(inet_ntop(af, src, IP, addrstr_len) != NULL)
          result = 0;  //good job

        break;
    }


    freeifaddrs(ifa_head);

    return result;
}