getifname.c revision 145510
1145510Sdarrenr/* $NetBSD$ */ 2145510Sdarrenr 3145510Sdarrenr#include "ipf.h" 4145510Sdarrenr 5145510Sdarrenr#include "kmem.h" 6145510Sdarrenr 7145510Sdarrenr/* 8145510Sdarrenr * Given a pointer to an interface in the kernel, return a pointer to a 9145510Sdarrenr * string which is the interface name. 10145510Sdarrenr */ 11145510Sdarrenrchar *getifname(ptr) 12145510Sdarrenrstruct ifnet *ptr; 13145510Sdarrenr{ 14145510Sdarrenr#if SOLARIS || defined(__hpux) 15145510Sdarrenr# if SOLARIS 16145510Sdarrenr# include <sys/mutex.h> 17145510Sdarrenr# include <sys/condvar.h> 18145510Sdarrenr# endif 19145510Sdarrenr# ifdef __hpux 20145510Sdarrenr# include "compat.h" 21145510Sdarrenr# endif 22145510Sdarrenr# include "../pfil/qif.h" 23145510Sdarrenr char *ifname; 24145510Sdarrenr qif_t qif; 25145510Sdarrenr 26145510Sdarrenr if ((void *)ptr == (void *)-1) 27145510Sdarrenr return "!"; 28145510Sdarrenr if (ptr == NULL) 29145510Sdarrenr return "-"; 30145510Sdarrenr 31145510Sdarrenr if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1) 32145510Sdarrenr return "X"; 33145510Sdarrenr ifname = strdup(qif.qf_name); 34145510Sdarrenr if ((ifname != NULL) && (*ifname == '\0')) { 35145510Sdarrenr free(ifname); 36145510Sdarrenr return "!"; 37145510Sdarrenr } 38145510Sdarrenr return ifname; 39145510Sdarrenr#else 40145510Sdarrenr# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 41145510Sdarrenr defined(__OpenBSD__) || \ 42145510Sdarrenr (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 43145510Sdarrenr#else 44145510Sdarrenr char buf[32]; 45145510Sdarrenr int len; 46145510Sdarrenr# endif 47145510Sdarrenr struct ifnet netif; 48145510Sdarrenr 49145510Sdarrenr if ((void *)ptr == (void *)-1) 50145510Sdarrenr return "!"; 51145510Sdarrenr if (ptr == NULL) 52145510Sdarrenr return "-"; 53145510Sdarrenr 54145510Sdarrenr if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1) 55145510Sdarrenr return "X"; 56145510Sdarrenr# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 57145510Sdarrenr defined(__OpenBSD__) || defined(linux) || \ 58145510Sdarrenr (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 59145510Sdarrenr return strdup(netif.if_xname); 60145510Sdarrenr# else 61145510Sdarrenr if (kstrncpy(buf, (u_long)netif.if_name, sizeof(buf)) == -1) 62145510Sdarrenr return "X"; 63145510Sdarrenr if (netif.if_unit < 10) 64145510Sdarrenr len = 2; 65145510Sdarrenr else if (netif.if_unit < 1000) 66145510Sdarrenr len = 3; 67145510Sdarrenr else if (netif.if_unit < 10000) 68145510Sdarrenr len = 4; 69145510Sdarrenr else 70145510Sdarrenr len = 5; 71145510Sdarrenr buf[sizeof(buf) - len] = '\0'; 72145510Sdarrenr sprintf(buf + strlen(buf), "%d", netif.if_unit % 10000); 73145510Sdarrenr return strdup(buf); 74145510Sdarrenr# endif 75145510Sdarrenr#endif 76145510Sdarrenr} 77