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