summaryrefslogtreecommitdiffstats
path: root/winsup/w32api/include/ws2tcpip.h
diff options
context:
space:
mode:
authorEarnie Boyd <earnie@users.sf.net>2001-02-21 20:40:47 +0000
committerEarnie Boyd <earnie@users.sf.net>2001-02-21 20:40:47 +0000
commitb701af168c787548e57b55678928830da76c7935 (patch)
treeea496df12098aea758ce6e59dde80cbd6b903a8a /winsup/w32api/include/ws2tcpip.h
parentd53c723240149c5b847addbf279aafc0f1af6c16 (diff)
downloadcygnal-b701af168c787548e57b55678928830da76c7935.tar.gz
cygnal-b701af168c787548e57b55678928830da76c7935.tar.bz2
cygnal-b701af168c787548e57b55678928830da76c7935.zip
* include/mswsock.h: New file.
* include/ws2tcpip.h: New file. * include/winsock.h (IPPROTO_IGMP): New define. (IPPROTO_GGP): Correct value. (SO_* macros): Remove mswsock defines. (TCP_BSDURGENT): Likewise. (IP_* macros): Add comment warning of WinSock2 incompatibility (WSARecvEx): Remove mswsock prototype. (TransmitFile): Likewise. (AcceptEx): Likewise. (GetAcceptExSockaddrs): Likewise. (struct _TRANSMIT_FILE_BUFFERS): Remove mswsock definition. (#include <mswsock.h>): Add directive and explanatory comment * include/winsock2.h (header guard): add guard for _WINSOCK_H (_WINSOCK_H): Define to prevent later inclusion of winsock.h (#include <winsock.h>): Replace directive with winsock.h file content The following changes apply to the merged file: (FD_SET): Keep winsock2.h definition, delete winsock.h definition (SOMAXCONN): Likewise (#include <nspapi.h>): Move - don't include until LPSOCKADDR defined (IP_* macros): Delete WinSock1 definitions (WinSock2 definitions now in ws2tcpip.h) (struct ip_mreq): Delete (now defined in ws2tcpip.h for WinSock2) (FD_*_BIT and FD_* defines): Place together and extend to FD_MAX_EVENTS 10 (AF* defines): Extend to AF_MAX 10 (WSAIsBlocking): #if 0 out prototype (N/A in WinSock2) (WSAUnhookBlockingHook): Likewise. (WSASetBlockingHook): Likewise. (WSACancelBlockingCall): Likewise. (WSAEINPROGRESS): Comment as not raised in WinSock2. (#include <mswsock.h>): Delete directive inherited from winsock.h (WSA_QOS* defines): Add QualityOfService error codes. (SIO_* defines): Add new macros * include/ipexport.h (IP_STATUS flags): Add definitions. (IP_FLAG_DF): Likewise. (IP_OPT_* ): Likewise. (struct ip_option_information): Likewise. (struct icmp_echo_reply): Likewise.
Diffstat (limited to 'winsup/w32api/include/ws2tcpip.h')
-rw-r--r--winsup/w32api/include/ws2tcpip.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/winsup/w32api/include/ws2tcpip.h b/winsup/w32api/include/ws2tcpip.h
new file mode 100644
index 000000000..3add12a65
--- /dev/null
+++ b/winsup/w32api/include/ws2tcpip.h
@@ -0,0 +1,138 @@
+/*
+ * ws2tcpip.h : TCP/IP specific extensions in Windows Sockets 2
+ *
+ * Portions Copyright (c) 1980, 1983, 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ */
+
+#ifndef _WS2TCPIP_H
+#define _WS2TCPIP_H
+
+#include <winsock2.h>
+
+/*
+ * The IP_* macros are also defined in winsock.h, but some values are different there.
+ * The values defined in winsock.h for 1.1 and used in wsock32.dll are consistent
+ * with the original values Steve Deering defined in his document "IP Multicast Extensions
+ * for 4.3BSD UNIX related systems (MULTICAST 1.2 Release)." However, these conflicted with
+ * the definitions for some IPPROTO_IP level socket options already assigned by BSD,
+ * so Berkeley changed all the values by adding 7. WinSock2 (ws2_32.dll) uses
+ * the BSD 4.4 compatible values defined here.
+ *
+ * See also: msdn kb article Q257460
+ * http://support.microsoft.com/support/kb/articles/Q257/4/60.asp
+ */
+
+/* This is also defined in winsock.h; value hasn't changed */
+#define IP_OPTIONS 1
+
+#define IP_HDRINCL 2
+/*
+ * These are also be defined in winsock.h,
+ * but values have changed for WinSock2 interface
+ */
+#define IP_TOS 3 /* old (winsock 1.1) value 8 */
+#define IP_TTL 4 /* old value 7 */
+#define IP_MULTICAST_IF 9 /* old value 2 */
+#define IP_MULTICAST_TTL 10 /* old value 3 */
+#define IP_MULTICAST_LOOP 11 /* old value 4 */
+#define IP_ADD_MEMBERSHIP 12 /* old value 5 */
+#define IP_DROP_MEMBERSHIP 13 /* old value 6 */
+#define IP_DONTFRAGMENT 14 /* old value 9 */
+
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+#define IP_MAX_MEMBERSHIPS 20
+
+#define TCP_EXPEDITED_1122 2
+
+#define UDP_NOCHECKSUM 1
+
+#define IFF_UP 1
+#define IFF_BROADCAST 2
+#define IFF_LOOPBACK 4
+#define IFF_POINTTOPOINT 8
+#define IFF_MULTICAST 16
+
+#define SIO_GET_INTERFACE_LIST _IOR('t', 127, u_long)
+
+/*
+ * ip_mreq also in winsock.h for WinSock1.1,
+ * but online msdn docs say it is defined here for WinSock2.
+ */
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+
+typedef struct _INTERFACE_INFO {
+ u_long iiFlags;
+ struct sockaddr iiAddress;
+ struct sockaddr iiBroadcastAddress;
+ struct sockaddr iiNetmask;
+} INTERFACE_INFO, *LPINTERFACE_INFO;
+
+
+/* ipv6 */
+
+/*
+ * According to online msdn documentation (12 Dec 2000), two separate implentations
+ * of ipv6 are available (1) the Microsoft IPv6 Technology Preview (requires W2K SP1)
+ * and (2) the MS Research IPV6 implementation (requires NT4 or W2K).
+ * Neither are production level implementations.
+ */
+
+#if 0
+/*
+ * The following is based on what online msdn PSDK docs say as at 5 Dec 2000
+ */
+struct in_addr6 /* sic */ { u_char s6_addr[16]; };
+typedef struct in_addr6 IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
+
+typedef struct sockaddr_in6 {
+ short sin6_family;
+ u_short sin6_port;
+ u_long sin6_flowinfo;
+ struct in_addr6 sin6_addr;
+} SOCKADDR_IN6, *PSOCKADDR_IN6, *LPSOCKADDR_IN6;
+
+#elif 0
+/*
+ * In the FAQ section of Microsoft IPv6 Technology Preview for Windows 2000
+ * (dated 12 Dec 2000) it says that the Preview and the MS Research implemntation
+ * support RFC 2553, and in particular, uses the sockaddr_in6 structure defined
+ * in Section 3.3. That would look something like this:
+*/
+#include <stdint.h>
+struct in6_addr { /* this is the standard name */
+ union {
+ uint8_t _u6_addr8[16];
+ uint16_t _u6_addr16[8];
+ uint32_t _u6_addr32[4];
+ /* uint64_t _u6_addr64[2];*/
+ } _u6_addr;
+};
+typedef struct in6_addr IN6_ADDR, *PIN6_ADDR, *LPIN6_ADDR;
+#define s6_addr _u6_addr._u6_addr8
+
+struct sockaddr_in6 {
+ uint16_t sin6_family; /* AF_INET6 */
+ uint16_t sin6_port; /* transport layer port # */
+ uint32_t sin6_flowinfo; /* IPv6 traffic class & flow info */
+ struct in6_addr sin6_addr; /* IPv6 address */
+ uint32_t sin6_scope_id; /* set of interfaces for a scope */
+};
+typedef struct sockaddr_in6 SOCKADDR_IN6, *PSOCKADDR_IN6, *LPSOCKADDR_IN6;
+
+/*
+ * Watch this space.
+ * These may get moved out to ipv6 specific header(s). along with other
+ * standard structures and functions specified in RFC 2553.
+ */
+#endif
+
+#endif /* _WS2TCPIP_H */
+
+
+