diff options
author | Earnie Boyd <earnie@users.sf.net> | 2001-02-21 20:40:47 +0000 |
---|---|---|
committer | Earnie Boyd <earnie@users.sf.net> | 2001-02-21 20:40:47 +0000 |
commit | b701af168c787548e57b55678928830da76c7935 (patch) | |
tree | ea496df12098aea758ce6e59dde80cbd6b903a8a /winsup/w32api/include/ws2tcpip.h | |
parent | d53c723240149c5b847addbf279aafc0f1af6c16 (diff) | |
download | cygnal-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.h | 138 |
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 */ + + + |