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;
}