]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/ipfilter/lib/getifname.c
This commit was generated by cvs2svn to compensate for changes in r168616,
[FreeBSD/FreeBSD.git] / contrib / ipfilter / lib / getifname.c
1 /*      $FreeBSD$       */
2
3 #include "ipf.h"
4
5 #include "kmem.h"
6
7 /*
8  * Given a pointer to an interface in the kernel, return a pointer to a
9  * string which is the interface name.
10  */
11 char *getifname(ptr)
12 struct ifnet *ptr;
13 {
14 #if SOLARIS || defined(__hpux)
15 # if SOLARIS
16 #  include <sys/mutex.h>
17 #  include <sys/condvar.h>
18 # endif
19 # ifdef __hpux
20 #  include "compat.h"
21 # endif
22 # include "../pfil/qif.h"
23         char *ifname;
24         qif_t qif;
25
26         if ((void *)ptr == (void *)-1)
27                 return "!";
28         if (ptr == NULL)
29                 return "-";
30
31         if (kmemcpy((char *)&qif, (u_long)ptr, sizeof(qif)) == -1)
32                 return "X";
33         ifname = strdup(qif.qf_name);
34         if ((ifname != NULL) && (*ifname == '\0')) {
35                 free(ifname);
36                 return "!";
37         }
38         return ifname;
39 #else
40 # if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \
41     defined(__OpenBSD__) || \
42     (defined(__FreeBSD__) && (__FreeBSD_version >= 501113))
43 #else
44         char buf[32];
45         int len;
46 # endif
47         struct ifnet netif;
48
49         if ((void *)ptr == (void *)-1)
50                 return "!";
51         if (ptr == NULL)
52                 return "-";
53
54         if (kmemcpy((char *)&netif, (u_long)ptr, sizeof(netif)) == -1)
55                 return "X";
56 # if defined(NetBSD) && (NetBSD >= 199905) && (NetBSD < 1991011) || \
57     defined(__OpenBSD__) || defined(linux) || \
58     (defined(__FreeBSD__) && (__FreeBSD_version >= 501113))
59         return strdup(netif.if_xname);
60 # else
61         if (kstrncpy(buf, (u_long)netif.if_name, sizeof(buf)) == -1)
62                 return "X";
63         if (netif.if_unit < 10)
64                 len = 2;
65         else if (netif.if_unit < 1000)
66                 len = 3;
67         else if (netif.if_unit < 10000)
68                 len = 4;
69         else
70                 len = 5;
71         buf[sizeof(buf) - len] = '\0';
72         sprintf(buf + strlen(buf), "%d", netif.if_unit % 10000);
73         return strdup(buf);
74 # endif
75 #endif
76 }