diff options
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r-- | winsup/cygwin/include/asm/socket.h | 1 | ||||
-rw-r--r-- | winsup/cygwin/include/cygwin/if.h | 94 | ||||
-rw-r--r-- | winsup/cygwin/include/cygwin/version.h | 7 |
3 files changed, 69 insertions, 33 deletions
diff --git a/winsup/cygwin/include/asm/socket.h b/winsup/cygwin/include/asm/socket.h index 4541bc850..f8e93cc81 100644 --- a/winsup/cygwin/include/asm/socket.h +++ b/winsup/cygwin/include/asm/socket.h @@ -43,6 +43,7 @@ details. */ #define SIOCGIFMTU _IOW('s', 107, struct ifreq) /* get MTU size */ #define SIOCGIFINDEX _IOW('s', 108, struct ifreq) /* get if index */ #define SIOGIFINDEX SIOCGIFINDEX /* backward compatibility w/ Linux typo. */ +#define SIOCGIFFRNDLYNAM _IOW('s', 109, struct ifreq) /* get friendly if name */ #define SOL_SOCKET 0xffff /* options for socket level */ diff --git a/winsup/cygwin/include/cygwin/if.h b/winsup/cygwin/include/cygwin/if.h index fe36afcf2..c61e2ada2 100644 --- a/winsup/cygwin/include/cygwin/if.h +++ b/winsup/cygwin/include/cygwin/if.h @@ -19,13 +19,32 @@ extern "C" { #include <sys/socket.h> /* Standard interface flags. */ -#define IFF_UP 0x1 /* interface is up */ -#define IFF_BROADCAST 0x2 /* broadcast address valid */ -#define IFF_LOOPBACK 0x8 /* is a loopback net */ -#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */ -#define IFF_RUNNING 0x40 /* resources allocated */ -#define IFF_PROMISC 0x100 /* receive all packets */ -#define IFF_MULTICAST 0x1000 /* Supports multicast */ +#define IFF_UP 0x1 /* interface is up */ +#define IFF_BROADCAST 0x2 /* broadcast address valid */ +#define IFF_LOOPBACK 0x8 /* is a loopback net */ +#define IFF_POINTTOPOINT 0x10 /* is a point-to-point interface */ +#define IFF_NOTRAILERS 0x20 /* avoid use of trailers */ +#define IFF_RUNNING 0x40 /* resources allocated */ +#define IFF_NOARP 0x80 /* no ARP protocol */ +#define IFF_PROMISC 0x100 /* receive all packets */ +#define IFF_MULTICAST 0x1000 /* Supports multicast */ +#define IFF_LOWER_UP 0x10000 /* driver signals L1 up */ +#define IFF_DORMANT 0x20000 /* driver signals dormant */ + +struct if_nameindex { + unsigned if_index; + char *if_name; +}; + +/* This is the structure expected by ioctl when the application requests + the friendly adapter name (>= XP SP1). ifru_data should point to such + a structure when ioctl is called with SIOCGIFFRNDLYNAM. */ +#define IFRF_FRIENDLYNAMESIZ 260 + +struct ifreq_frndlyname { + int ifrf_len; + char ifrf_friendlyname[IFRF_FRIENDLYNAMESIZ]; +}; /* * Interface request structure used for socket @@ -33,26 +52,29 @@ extern "C" { * definitions which begin with ifr_name. The * remainder may be interface specific. */ - -struct ifreq -{ -#define IFNAMSIZ 16 +#define IFNAMSIZ 44 +#define IF_NAMESIZE IFNAMSIZ #define IFHWADDRLEN 6 - union - { - char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ - } ifr_ifrn; - - union { - struct sockaddr ifru_addr; - struct sockaddr ifru_broadaddr; - struct sockaddr ifru_netmask; - struct sockaddr ifru_hwaddr; - short ifru_flags; - int ifru_metric; - int ifru_mtu; - int ifru_ifindex; - } ifr_ifru; + +struct ifreq { + union { + char ifrn_name[IFNAMSIZ]; /* Unique Windows Adapter name (A GUID) */ + } ifr_ifrn; + + union { + struct sockaddr ifru_addr; + struct sockaddr ifru_broadaddr; + struct sockaddr ifru_netmask; + struct sockaddr ifru_hwaddr; + int ifru_flags; + int ifru_metric; + int ifru_mtu; + int ifru_ifindex; + /* The space must be preallocated by the application. */ + void *ifru_data; + /* Pad to sizeof sockaddr_in6 for further extensions. */ + char __ifru_pad[28]; + } ifr_ifru; }; #define ifr_name ifr_ifrn.ifrn_name /* interface name */ @@ -64,6 +86,8 @@ struct ifreq #define ifr_metric ifr_ifru.ifru_metric /* metric */ #define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define ifr_ifindex ifr_ifru.ifru_ifindex /* interface index */ +#define ifr_data ifr_ifru.ifru_data /* for use by interface */ +#define ifr_frndlyname ifr_ifru.ifru_data /* Windows friendly if name */ /* * Structure used in SIOCGIFCONF request. @@ -74,16 +98,22 @@ struct ifreq struct ifconf { - int ifc_len; /* size of buffer */ - union - { - caddr_t ifcu_buf; - struct ifreq *ifcu_req; - } ifc_ifcu; + int ifc_len; /* size of buffer */ + union + { + caddr_t ifcu_buf; + struct ifreq *ifcu_req; + } ifc_ifcu; }; + #define ifc_buf ifc_ifcu.ifcu_buf /* buffer address */ #define ifc_req ifc_ifcu.ifcu_req /* array of structures */ +extern unsigned if_nametoindex (const char *); +extern char *if_indextoname (unsigned, char *); +extern struct if_nameindex *if_nameindex (void); +extern void if_freenameindex (struct if_nameindex *); + #ifdef __cplusplus }; #endif /* __cplusplus */ diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index dd448aef2..44c7229c3 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -94,6 +94,9 @@ details. */ #define CYGWIN_VERSION_CHECK_FOR_USING_WINSOCK1_VALUES \ (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 138) +#define CYGWIN_VERSION_CHECK_FOR_OLD_IFREQ \ + (CYGWIN_VERSION_USER_API_VERSION_COMBINED <= 161) + /* API_MAJOR 0.0: Initial version. API_MINOR changes: 1: Export cygwin32_ calls as cygwin_ as well. 2: Export j1, jn, y1, yn. @@ -296,12 +299,14 @@ details. */ 159: Export posix_openpt. 160: Export posix_fadvice, posix_fallocate. 161: Export resolver functions. + 162: New struct ifreq. Export if_nametoindex, if_indextoname, + if_nameindex, if_freenameindex. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 161 +#define CYGWIN_VERSION_API_MINOR 162 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible |