+ struct if_nameindex *if_ni, *i;
+ struct ifreq ifreq;
+ int ret, sock_fd;
+
+ sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (sock_fd < 0)
+ return NULL;
+
+ if_ni = if_nameindex();
+ if (!if_ni) {
+ close(sock_fd);
+ return NULL;
+ }
+
+ first_ether_name[0] = 0;
+
+ for (i = if_ni; !(i->if_index == 0 && i->if_name == NULL); i++) {
+ memset(&ifreq.ifr_hwaddr, 0, sizeof(struct sockaddr));
+ strlcpy(ifreq.ifr_name, i->if_name, sizeof(ifreq.ifr_name));
+ ret = ioctl(sock_fd, SIOCGIFHWADDR, &ifreq);
+ if (ret >= 0 && ifreq.ifr_hwaddr.sa_family == ARPHRD_ETHER) {
+ strlcpy(first_ether_name, i->if_name, sizeof(first_ether_name));
+ break;
+ }
+ }
+
+ if_freenameindex(if_ni);
+ close(sock_fd);
+
+ if (!first_ether_name[0])
+ return NULL;
+
+ return first_ether_name;