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