]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/ipfilter/lib/getifname.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / ipfilter / lib / getifname.c
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 #if 0
20 char *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
87 char *getifname(ptr)
88         struct ifnet *ptr;
89 {
90 #if 0
91         ptr = ptr;
92 #endif
93         return "X";
94 }
95 #endif