You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lokinet/llarp/net.cpp

31 lines
645 B
C++

6 years ago
#include <llarp/net.h>
7 years ago
#include "str.hpp"
#include <arpa/inet.h>
7 years ago
#include <ifaddrs.h>
6 years ago
extern "C" {
bool llarp_getifaddr(const char * ifname, int af, struct sockaddr* addr) {
7 years ago
ifaddrs* ifa = nullptr;
bool found = false;
socklen_t sl = sizeof(sockaddr_in6);
if (af == AF_INET) sl = sizeof(sockaddr_in);
7 years ago
7 years ago
if (getifaddrs(&ifa) == -1) return false;
ifaddrs* i = ifa;
while (i) {
6 years ago
if (llarp::StrEq(i->ifa_name, ifname) && i->ifa_addr &&
7 years ago
i->ifa_addr->sa_family == af) {
memcpy(addr, i->ifa_addr, sl);
found = true;
break;
7 years ago
}
7 years ago
i = i->ifa_next;
7 years ago
}
7 years ago
if (ifa) freeifaddrs(ifa);
return found;
7 years ago
}
6 years ago
}