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