1
2/*
3 * Copyright (C) 2012 by Darren Reed.
4 *
5 * See the IPFILTER.LICENCE file for details on licencing.
6 *
7 * $Id$
8 */
9
10#include "ipf.h"
11
12#include "kmem.h"
13
14/*
15* Given a pointer to an interface in the kernel, return a pointer to a
16 * string which is the interface name.
17 */
18char *
19getifname(struct ifnet *ptr)
20{
21#if SOLARIS
22#  include <sys/mutex.h>
23#  include <sys/condvar.h>
24# include "../pfil/qif.h"
25	char *ifname;
26	qif_t qif;
27
28	if ((void *)ptr == (void *)-1)
29		return ("!");
30	if (ptr == NULL)
31		return ("-");
32
33	if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1)
34		return ("X");
35	ifname = strdup(qif.qf_name);
36	if ((ifname != NULL) && (*ifname == '\0')) {
37		free(ifname);
38		return ("!");
39	}
40	return (ifname);
41#else
42	struct ifnet netif;
43
44	if ((void *)ptr == (void *)-1)
45		return ("!");
46	if (ptr == NULL)
47		return ("-");
48
49	if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1)
50		return ("X");
51	return (strdup(netif.if_xname));
52#endif
53}
54