version 1.6, 2013/06/20 14:55:23
|
version 1.6.4.1, 2013/07/08 01:11:34
|
Line 438 e_getnet(const char *net)
|
Line 438 e_getnet(const char *net)
|
e_free(str); |
e_free(str); |
return n; |
return n; |
} |
} |
|
|
|
/* |
|
* e_ether_addr() - Get or set ethernet address from interface name |
|
* |
|
* @ifname = interface name |
|
* @addr = if addr is !=NULL then set this for new address |
|
* return: NULL error or !=NULL get ethernet address |
|
*/ |
|
ether_addr_t * |
|
e_ether_addr(const char *ifname, ether_addr_t * __restrict addr) |
|
{ |
|
ether_addr_t *a = NULL; |
|
struct ifaddrs *p, *ifa = NULL; |
|
|
|
if (!ifname) |
|
return NULL; |
|
|
|
a = e_malloc(sizeof(ether_addr_t)); |
|
if (!a) |
|
return NULL; |
|
else |
|
memset(a, 0, sizeof(ether_addr_t)); |
|
|
|
getifaddrs(&ifa); |
|
for (p = ifa; p; p++) |
|
if (!strcmp(p->ifa_name, ifname) && p->ifa_addr && |
|
p->ifa_addr->sa_family == AF_LINK) { |
|
memcpy(a, LLADDR((struct sockaddr_dl*) p->ifa_addr), sizeof(ether_addr_t)); |
|
break; |
|
} |
|
freeifaddrs(ifa); |
|
|
|
return a; |
|
} |