From b701af168c787548e57b55678928830da76c7935 Mon Sep 17 00:00:00 2001 From: Earnie Boyd Date: Wed, 21 Feb 2001 20:40:47 +0000 Subject: * 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 ): 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 ): 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 ): 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 ): 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. --- winsup/w32api/include/ws2tcpip.h | 138 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 winsup/w32api/include/ws2tcpip.h (limited to 'winsup/w32api/include/ws2tcpip.h') 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 + +/* + * 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 +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 */ + + + -- cgit v1.2.3