summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/include
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/include')
-rw-r--r--winsup/cygwin/include/asm/socket.h1
-rw-r--r--winsup/cygwin/include/cygwin/if.h94
-rw-r--r--winsup/cygwin/include/cygwin/version.h7
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