1145519Sdarrenr/* $FreeBSD$ */ 2145510Sdarrenr 3170268Sdarrenr/* 4170268Sdarrenr * Copyright (C) 2002-2004 by Darren Reed. 5170268Sdarrenr * 6170268Sdarrenr * See the IPFILTER.LICENCE file for details on licencing. 7170268Sdarrenr * 8170268Sdarrenr * $Id: getifname.c,v 1.5.2.3 2006/07/14 06:12:24 darrenr Exp $ 9170268Sdarrenr */ 10170268Sdarrenr 11145510Sdarrenr#include "ipf.h" 12145510Sdarrenr 13145510Sdarrenr#include "kmem.h" 14145510Sdarrenr 15145510Sdarrenr/* 16145510Sdarrenr * Given a pointer to an interface in the kernel, return a pointer to a 17145510Sdarrenr * string which is the interface name. 18145510Sdarrenr */ 19170268Sdarrenr#if 0 20145510Sdarrenrchar *getifname(ptr) 21145510Sdarrenrstruct ifnet *ptr; 22145510Sdarrenr{ 23145510Sdarrenr#if SOLARIS || defined(__hpux) 24145510Sdarrenr# if SOLARIS 25145510Sdarrenr# include <sys/mutex.h> 26145510Sdarrenr# include <sys/condvar.h> 27145510Sdarrenr# endif 28145510Sdarrenr# ifdef __hpux 29145510Sdarrenr# include "compat.h" 30145510Sdarrenr# endif 31145510Sdarrenr# include "../pfil/qif.h" 32145510Sdarrenr char *ifname; 33145510Sdarrenr qif_t qif; 34145510Sdarrenr 35145510Sdarrenr if ((void *)ptr == (void *)-1) 36145510Sdarrenr return "!"; 37145510Sdarrenr if (ptr == NULL) 38145510Sdarrenr return "-"; 39145510Sdarrenr 40145510Sdarrenr if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1) 41145510Sdarrenr return "X"; 42145510Sdarrenr ifname = strdup(qif.qf_name); 43145510Sdarrenr if ((ifname != NULL) && (*ifname == '\0')) { 44145510Sdarrenr free(ifname); 45145510Sdarrenr return "!"; 46145510Sdarrenr } 47145510Sdarrenr return ifname; 48145510Sdarrenr#else 49145510Sdarrenr# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 50145510Sdarrenr defined(__OpenBSD__) || \ 51145510Sdarrenr (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 52145510Sdarrenr#else 53145510Sdarrenr char buf[32]; 54145510Sdarrenr int len; 55145510Sdarrenr# endif 56145510Sdarrenr struct ifnet netif; 57145510Sdarrenr 58145510Sdarrenr if ((void *)ptr == (void *)-1) 59145510Sdarrenr return "!"; 60145510Sdarrenr if (ptr == NULL) 61145510Sdarrenr return "-"; 62145510Sdarrenr 63145510Sdarrenr if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1) 64145510Sdarrenr return "X"; 65145510Sdarrenr# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 66145510Sdarrenr defined(__OpenBSD__) || defined(linux) || \ 67145510Sdarrenr (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 68145510Sdarrenr return strdup(netif.if_xname); 69145510Sdarrenr# else 70145510Sdarrenr if (kstrncpy(buf, (u_long)netif.if_name, sizeof(buf)) == -1) 71145510Sdarrenr return "X"; 72145510Sdarrenr if (netif.if_unit < 10) 73145510Sdarrenr len = 2; 74145510Sdarrenr else if (netif.if_unit < 1000) 75145510Sdarrenr len = 3; 76145510Sdarrenr else if (netif.if_unit < 10000) 77145510Sdarrenr len = 4; 78145510Sdarrenr else 79145510Sdarrenr len = 5; 80145510Sdarrenr buf[sizeof(buf) - len] = '\0'; 81145510Sdarrenr sprintf(buf + strlen(buf), "%d", netif.if_unit % 10000); 82145510Sdarrenr return strdup(buf); 83145510Sdarrenr# endif 84145510Sdarrenr#endif 85145510Sdarrenr} 86170268Sdarrenr#else 87170268Sdarrenrchar *getifname(ptr) 88170268Sdarrenrstruct ifnet *ptr; 89170268Sdarrenr{ 90170268Sdarrenr return "X"; 91170268Sdarrenr} 92170268Sdarrenr#endif 93