1/*	$FreeBSD: releng/10.3/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