1 /* $FreeBSD$ */ 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 char * 20 getifname(struct ifnet *ptr) 21 { 22 #if SOLARIS 23 # include <sys/mutex.h> 24 # include <sys/condvar.h> 25 # include "../pfil/qif.h" 26 char *ifname; 27 qif_t qif; 28 29 if ((void *)ptr == (void *)-1) 30 return ("!"); 31 if (ptr == NULL) 32 return ("-"); 33 34 if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1) 35 return ("X"); 36 ifname = strdup(qif.qf_name); 37 if ((ifname != NULL) && (*ifname == '\0')) { 38 free(ifname); 39 return ("!"); 40 } 41 return (ifname); 42 #else 43 struct ifnet netif; 44 45 if ((void *)ptr == (void *)-1) 46 return ("!"); 47 if (ptr == NULL) 48 return ("-"); 49 50 if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1) 51 return ("X"); 52 return (strdup(netif.if_xname)); 53 #endif 54 } 55