1#ifndef _NET_IF_H 2#define _NET_IF_H 3 4#ifdef __cplusplus 5extern "C" { 6#endif 7 8#include <features.h> 9 10#define IF_NAMESIZE 16 11 12struct if_nameindex { 13 unsigned int if_index; 14 char *if_name; 15}; 16 17unsigned int if_nametoindex (const char *); 18char *if_indextoname (unsigned int, char *); 19struct if_nameindex *if_nameindex (void); 20void 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 51struct 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 64struct 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 76struct 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 116struct 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#endif 129 130#ifdef __cplusplus 131} 132#endif 133 134#endif 135