1 #ifndef _NET_IF_H
2 #define _NET_IF_H
3 
4 #ifdef __cplusplus
5 extern "C" {
6 #endif
7 
8 #include <features.h>
9 
10 #define IF_NAMESIZE 16
11 
12 struct if_nameindex {
13 	unsigned int if_index;
14 	char *if_name;
15 };
16 
17 unsigned int if_nametoindex (const char *);
18 char *if_indextoname (unsigned int, char *);
19 struct if_nameindex *if_nameindex (void);
20 void if_freenameindex (struct if_nameindex *);
21 
22 
23 
24 
25 #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
26 
27 #include <sys/socket.h>
28 
29 #define IFF_UP	0x1
30 #define IFF_BROADCAST 0x2
31 #define IFF_DEBUG 0x4
32 #define IFF_LOOPBACK 0x8
33 #define IFF_POINTOPOINT 0x10
34 #define IFF_NOTRAILERS 0x20
35 #define IFF_RUNNING 0x40
36 #define IFF_NOARP 0x80
37 #define IFF_PROMISC 0x100
38 #define IFF_ALLMULTI 0x200
39 #define IFF_MASTER 0x400
40 #define IFF_SLAVE 0x800
41 #define IFF_MULTICAST 0x1000
42 #define IFF_PORTSEL 0x2000
43 #define IFF_AUTOMEDIA 0x4000
44 #define IFF_DYNAMIC 0x8000
45 #define IFF_LOWER_UP 0x10000
46 #define IFF_DORMANT 0x20000
47 #define IFF_ECHO 0x40000
48 #define IFF_VOLATILE (IFF_LOOPBACK|IFF_POINTOPOINT|IFF_BROADCAST| \
49         IFF_ECHO|IFF_MASTER|IFF_SLAVE|IFF_RUNNING|IFF_LOWER_UP|IFF_DORMANT)
50 
51 struct ifaddr {
52 	struct sockaddr ifa_addr;
53 	union {
54 		struct sockaddr	ifu_broadaddr;
55 		struct sockaddr	ifu_dstaddr;
56 	} ifa_ifu;
57 	struct iface *ifa_ifp;
58 	struct ifaddr *ifa_next;
59 };
60 
61 #define ifa_broadaddr	ifa_ifu.ifu_broadaddr
62 #define ifa_dstaddr	ifa_ifu.ifu_dstaddr
63 
64 struct ifmap {
65 	unsigned long int mem_start;
66 	unsigned long int mem_end;
67 	unsigned short int base_addr;
68 	unsigned char irq;
69 	unsigned char dma;
70 	unsigned char port;
71 };
72 
73 #define IFHWADDRLEN	6
74 #define IFNAMSIZ	IF_NAMESIZE
75 
76 struct ifreq {
77 	union {
78 		char ifrn_name[IFNAMSIZ];
79 	} ifr_ifrn;
80 	union {
81 		struct sockaddr ifru_addr;
82 		struct sockaddr ifru_dstaddr;
83 		struct sockaddr ifru_broadaddr;
84 		struct sockaddr ifru_netmask;
85 		struct sockaddr ifru_hwaddr;
86 		short int ifru_flags;
87 		int ifru_ivalue;
88 		int ifru_mtu;
89 		struct ifmap ifru_map;
90 		char ifru_slave[IFNAMSIZ];
91 		char ifru_newname[IFNAMSIZ];
92 		char *ifru_data;
93 	} ifr_ifru;
94 };
95 
96 #define ifr_name	ifr_ifrn.ifrn_name
97 #define ifr_hwaddr	ifr_ifru.ifru_hwaddr
98 #define ifr_addr	ifr_ifru.ifru_addr
99 #define ifr_dstaddr	ifr_ifru.ifru_dstaddr
100 #define ifr_broadaddr	ifr_ifru.ifru_broadaddr
101 #define ifr_netmask	ifr_ifru.ifru_netmask
102 #define ifr_flags	ifr_ifru.ifru_flags
103 #define ifr_metric	ifr_ifru.ifru_ivalue
104 #define ifr_mtu		ifr_ifru.ifru_mtu
105 #define ifr_map		ifr_ifru.ifru_map
106 #define ifr_slave	ifr_ifru.ifru_slave
107 #define ifr_data	ifr_ifru.ifru_data
108 #define ifr_ifindex	ifr_ifru.ifru_ivalue
109 #define ifr_bandwidth	ifr_ifru.ifru_ivalue
110 #define ifr_qlen	ifr_ifru.ifru_ivalue
111 #define ifr_newname	ifr_ifru.ifru_newname
112 #define _IOT_ifreq	_IOT(_IOTS(char),IFNAMSIZ,_IOTS(char),16,0,0)
113 #define _IOT_ifreq_short _IOT(_IOTS(char),IFNAMSIZ,_IOTS(short),1,0,0)
114 #define _IOT_ifreq_int	_IOT(_IOTS(char),IFNAMSIZ,_IOTS(int),1,0,0)
115 
116 struct ifconf {
117 	int ifc_len;
118 	union {
119 		char *ifcu_buf;
120 		struct ifreq *ifcu_req;
121 	} ifc_ifcu;
122 };
123 
124 #define ifc_buf		ifc_ifcu.ifcu_buf
125 #define ifc_req		ifc_ifcu.ifcu_req
126 #define _IOT_ifconf _IOT(_IOTS(struct ifconf),1,0,0,0,0)
127 
128 #define __UAPI_DEF_IF_IFCONF                                    0
129 #define __UAPI_DEF_IF_IFMAP                                     0
130 #define __UAPI_DEF_IF_IFNAMSIZ                                  0
131 #define __UAPI_DEF_IF_IFREQ                                     0
132 #define __UAPI_DEF_IF_NET_DEVICE_FLAGS                          0
133 #define __UAPI_DEF_IF_NET_DEVICE_FLAGS_LOWER_UP_DORMANT_ECHO    0
134 
135 #endif
136 
137 #ifdef __cplusplus
138 }
139 #endif
140 
141 #endif
142