1#pragma once 2 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#include <features.h> 8 9#define IF_NAMESIZE 16 10 11struct if_nameindex { 12 unsigned int if_index; 13 char* if_name; 14}; 15 16unsigned int if_nametoindex(const char*); 17char* if_indextoname(unsigned int, char*); 18struct if_nameindex* if_nameindex(void); 19void 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 48struct 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 61struct 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 73struct 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 113struct 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