summaryrefslogtreecommitdiff
path: root/src/lib/libc/net/if_indextoname.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/net/if_indextoname.c')
-rw-r--r--src/lib/libc/net/if_indextoname.c37
1 files changed, 14 insertions, 23 deletions
diff --git a/src/lib/libc/net/if_indextoname.c b/src/lib/libc/net/if_indextoname.c
index f1c65966df..affa42551e 100644
--- a/src/lib/libc/net/if_indextoname.c
+++ b/src/lib/libc/net/if_indextoname.c
@@ -1,7 +1,8 @@
1/* $OpenBSD: if_indextoname.c,v 1.10 2015/09/14 10:47:01 guenther Exp $ */ 1/* $OpenBSD: if_indextoname.c,v 1.11 2015/10/23 13:09:19 claudio Exp $ */
2/* $KAME: if_indextoname.c,v 1.6 2000/11/07 22:33:25 jinmei Exp $ */ 2/* $KAME: if_indextoname.c,v 1.6 2000/11/07 22:33:25 jinmei Exp $ */
3 3
4/*- 4/*-
5 * Copyright (c) 2015 Claudio Jeker <claudio@openbsd.org>
5 * Copyright (c) 1997, 2000 6 * Copyright (c) 1997, 2000
6 * Berkeley Software Design, Inc. All rights reserved. 7 * Berkeley Software Design, Inc. All rights reserved.
7 * 8 *
@@ -28,9 +29,7 @@
28 29
29#include <sys/types.h> 30#include <sys/types.h>
30#include <sys/socket.h> 31#include <sys/socket.h>
31#include <net/if_dl.h>
32#include <net/if.h> 32#include <net/if.h>
33#include <ifaddrs.h>
34#include <stdlib.h> 33#include <stdlib.h>
35#include <string.h> 34#include <string.h>
36#include <errno.h> 35#include <errno.h>
@@ -59,29 +58,21 @@
59char * 58char *
60if_indextoname(unsigned int ifindex, char *ifname) 59if_indextoname(unsigned int ifindex, char *ifname)
61{ 60{
62 struct ifaddrs *ifaddrs, *ifa; 61 struct if_nameindex *ifni, *ifni2;
63 int error = 0;
64 62
65 if (getifaddrs(&ifaddrs) < 0) 63 if ((ifni = if_nameindex()) == NULL)
66 return(NULL); /* getifaddrs properly set errno */ 64 return NULL;
67 65
68 for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) { 66 for (ifni2 = ifni; ifni2->if_index != 0; ifni2++) {
69 if (ifa->ifa_addr && 67 if (ifni2->if_index == ifindex) {
70 ifa->ifa_addr->sa_family == AF_LINK && 68 strlcpy(ifname, ifni2->if_name, IFNAMSIZ);
71 ifindex == ((struct sockaddr_dl*)ifa->ifa_addr)->sdl_index) 69 if_freenameindex(ifni);
72 break; 70 return ifname;
71 }
73 } 72 }
74 73
75 if (ifa == NULL) { 74 if_freenameindex(ifni);
76 error = ENXIO; 75 errno = ENXIO;
77 ifname = NULL; 76 return NULL;
78 }
79 else
80 strlcpy(ifname, ifa->ifa_name, IFNAMSIZ);
81
82 freeifaddrs(ifaddrs);
83
84 errno = error;
85 return(ifname);
86} 77}
87DEF_WEAK(if_indextoname); 78DEF_WEAK(if_indextoname);