1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
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 */
|