getifname.c revision 255332
1/* $FreeBSD: head/contrib/ipfilter/lib/getifname.c 255332 2013-09-06 23:11:19Z cy $ */ 2 3/* 4 * Copyright (C) 2012 by Darren Reed. 5 * 6 * See the IPFILTER.LICENCE file for details on licencing. 7 * 8 * $Id$ 9 */ 10 11#include "ipf.h" 12 13#include "kmem.h" 14 15/* 16 * Given a pointer to an interface in the kernel, return a pointer to a 17 * string which is the interface name. 18 */ 19#if 0 20char *getifname(ptr) 21 struct ifnet *ptr; 22{ 23#if SOLARIS || defined(__hpux) 24# if SOLARIS 25# include <sys/mutex.h> 26# include <sys/condvar.h> 27# endif 28# ifdef __hpux 29# include "compat.h" 30# endif 31# include "../pfil/qif.h" 32 char *ifname; 33 qif_t qif; 34 35 if ((void *)ptr == (void *)-1) 36 return "!"; 37 if (ptr == NULL) 38 return "-"; 39 40 if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1) 41 return "X"; 42 ifname = strdup(qif.qf_name); 43 if ((ifname != NULL) && (*ifname == '\0')) { 44 free(ifname); 45 return "!"; 46 } 47 return ifname; 48#else 49# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 50 defined(__OpenBSD__) || \ 51 (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 52#else 53 char buf[LIFNAMSIZ]; 54 int len; 55# endif 56 struct ifnet netif; 57 58 if ((void *)ptr == (void *)-1) 59 return "!"; 60 if (ptr == NULL) 61 return "-"; 62 63 if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1) 64 return "X"; 65# if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \ 66 defined(__OpenBSD__) || defined(linux) || \ 67 (defined(__FreeBSD__) && (__FreeBSD_version >= 501113)) 68 return strdup(netif.if_xname); 69# else 70 if (kstrncpy(buf, (u_long)netif.if_name, sizeof(buf)) == -1) 71 return "X"; 72 if (netif.if_unit < 10) 73 len = 2; 74 else if (netif.if_unit < 1000) 75 len = 3; 76 else if (netif.if_unit < 10000) 77 len = 4; 78 else 79 len = 5; 80 buf[sizeof(buf) - len] = '\0'; 81 sprintf(buf + strlen(buf), "%d", netif.if_unit % 10000); 82 return strdup(buf); 83# endif 84#endif 85} 86#else 87char *getifname(ptr) 88 struct ifnet *ptr; 89{ 90#if 0 91 ptr = ptr; 92#endif 93 return "X"; 94} 95#endif 96