xref: /minix3/external/bsd/bind/dist/lib/isc/win32/include/isc/net.h (revision 00b67f09dd46474d133c95011a48590a8e8f94c7)
1*00b67f09SDavid van Moolenbroek /*	$NetBSD: net.h,v 1.9 2014/12/10 04:38:01 christos Exp $	*/
2*00b67f09SDavid van Moolenbroek 
3*00b67f09SDavid van Moolenbroek /*
4*00b67f09SDavid van Moolenbroek  * Copyright (C) 2004, 2005, 2007, 2008, 2012, 2013  Internet Systems Consortium, Inc. ("ISC")
5*00b67f09SDavid van Moolenbroek  * Copyright (C) 1999-2003  Internet Software Consortium.
6*00b67f09SDavid van Moolenbroek  *
7*00b67f09SDavid van Moolenbroek  * Permission to use, copy, modify, and/or distribute this software for any
8*00b67f09SDavid van Moolenbroek  * purpose with or without fee is hereby granted, provided that the above
9*00b67f09SDavid van Moolenbroek  * copyright notice and this permission notice appear in all copies.
10*00b67f09SDavid van Moolenbroek  *
11*00b67f09SDavid van Moolenbroek  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12*00b67f09SDavid van Moolenbroek  * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13*00b67f09SDavid van Moolenbroek  * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14*00b67f09SDavid van Moolenbroek  * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15*00b67f09SDavid van Moolenbroek  * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16*00b67f09SDavid van Moolenbroek  * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*00b67f09SDavid van Moolenbroek  * PERFORMANCE OF THIS SOFTWARE.
18*00b67f09SDavid van Moolenbroek  */
19*00b67f09SDavid van Moolenbroek 
20*00b67f09SDavid van Moolenbroek /* Id */
21*00b67f09SDavid van Moolenbroek 
22*00b67f09SDavid van Moolenbroek #ifndef ISC_NET_H
23*00b67f09SDavid van Moolenbroek #define ISC_NET_H 1
24*00b67f09SDavid van Moolenbroek 
25*00b67f09SDavid van Moolenbroek /*
26*00b67f09SDavid van Moolenbroek  * Also define LWRES_IPV6_H to keep it from being included if liblwres is
27*00b67f09SDavid van Moolenbroek  * being used, or redefinition errors will occur.
28*00b67f09SDavid van Moolenbroek  */
29*00b67f09SDavid van Moolenbroek #define LWRES_IPV6_H 1
30*00b67f09SDavid van Moolenbroek 
31*00b67f09SDavid van Moolenbroek 
32*00b67f09SDavid van Moolenbroek 
33*00b67f09SDavid van Moolenbroek /*****
34*00b67f09SDavid van Moolenbroek  ***** Module Info
35*00b67f09SDavid van Moolenbroek  *****/
36*00b67f09SDavid van Moolenbroek 
37*00b67f09SDavid van Moolenbroek /*
38*00b67f09SDavid van Moolenbroek  * Basic Networking Types
39*00b67f09SDavid van Moolenbroek  *
40*00b67f09SDavid van Moolenbroek  * This module is responsible for defining the following basic networking
41*00b67f09SDavid van Moolenbroek  * types:
42*00b67f09SDavid van Moolenbroek  *
43*00b67f09SDavid van Moolenbroek  *		struct in_addr
44*00b67f09SDavid van Moolenbroek  *		struct in6_addr
45*00b67f09SDavid van Moolenbroek  *		struct in6_pktinfo
46*00b67f09SDavid van Moolenbroek  *		struct sockaddr
47*00b67f09SDavid van Moolenbroek  *		struct sockaddr_in
48*00b67f09SDavid van Moolenbroek  *		struct sockaddr_in6
49*00b67f09SDavid van Moolenbroek  *		in_port_t
50*00b67f09SDavid van Moolenbroek  *
51*00b67f09SDavid van Moolenbroek  * It ensures that the AF_ and PF_ macros are defined.
52*00b67f09SDavid van Moolenbroek  *
53*00b67f09SDavid van Moolenbroek  * It declares ntoh[sl]() and hton[sl]().
54*00b67f09SDavid van Moolenbroek  *
55*00b67f09SDavid van Moolenbroek  * It declares inet_aton(), inet_ntop(), and inet_pton().
56*00b67f09SDavid van Moolenbroek  *
57*00b67f09SDavid van Moolenbroek  * It ensures that INADDR_ANY, IN6ADDR_ANY_INIT, in6addr_any, and
58*00b67f09SDavid van Moolenbroek  * in6addr_loopback are available.
59*00b67f09SDavid van Moolenbroek  *
60*00b67f09SDavid van Moolenbroek  * It ensures that IN_MULTICAST() is available to check for multicast
61*00b67f09SDavid van Moolenbroek  * addresses.
62*00b67f09SDavid van Moolenbroek  *
63*00b67f09SDavid van Moolenbroek  * MP:
64*00b67f09SDavid van Moolenbroek  *	No impact.
65*00b67f09SDavid van Moolenbroek  *
66*00b67f09SDavid van Moolenbroek  * Reliability:
67*00b67f09SDavid van Moolenbroek  *	No anticipated impact.
68*00b67f09SDavid van Moolenbroek  *
69*00b67f09SDavid van Moolenbroek  * Resources:
70*00b67f09SDavid van Moolenbroek  *	N/A.
71*00b67f09SDavid van Moolenbroek  *
72*00b67f09SDavid van Moolenbroek  * Security:
73*00b67f09SDavid van Moolenbroek  *	No anticipated impact.
74*00b67f09SDavid van Moolenbroek  *
75*00b67f09SDavid van Moolenbroek  * Standards:
76*00b67f09SDavid van Moolenbroek  *	BSD Socket API
77*00b67f09SDavid van Moolenbroek  *	RFC2553
78*00b67f09SDavid van Moolenbroek  */
79*00b67f09SDavid van Moolenbroek 
80*00b67f09SDavid van Moolenbroek /***
81*00b67f09SDavid van Moolenbroek  *** Imports.
82*00b67f09SDavid van Moolenbroek  ***/
83*00b67f09SDavid van Moolenbroek #include <isc/platform.h>
84*00b67f09SDavid van Moolenbroek 
85*00b67f09SDavid van Moolenbroek /*
86*00b67f09SDavid van Moolenbroek  * Because of some sort of problem in the MS header files, this cannot
87*00b67f09SDavid van Moolenbroek  * be simple "#include <winsock2.h>", because winsock2.h tries to include
88*00b67f09SDavid van Moolenbroek  * windows.h, which then generates an error out of mswsock.h.  _You_
89*00b67f09SDavid van Moolenbroek  * figure it out.
90*00b67f09SDavid van Moolenbroek  */
91*00b67f09SDavid van Moolenbroek #ifndef _WINSOCKAPI_
92*00b67f09SDavid van Moolenbroek #define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */
93*00b67f09SDavid van Moolenbroek #endif
94*00b67f09SDavid van Moolenbroek 
95*00b67f09SDavid van Moolenbroek #include <winsock2.h>
96*00b67f09SDavid van Moolenbroek 
97*00b67f09SDavid van Moolenbroek #include <sys/types.h>
98*00b67f09SDavid van Moolenbroek 
99*00b67f09SDavid van Moolenbroek #include <isc/lang.h>
100*00b67f09SDavid van Moolenbroek #include <isc/types.h>
101*00b67f09SDavid van Moolenbroek 
102*00b67f09SDavid van Moolenbroek #include <ws2tcpip.h>
103*00b67f09SDavid van Moolenbroek #include <isc/ipv6.h>
104*00b67f09SDavid van Moolenbroek 
105*00b67f09SDavid van Moolenbroek /*
106*00b67f09SDavid van Moolenbroek  * This is here because named client, interfacemgr.c, etc. use the name as
107*00b67f09SDavid van Moolenbroek  * a variable
108*00b67f09SDavid van Moolenbroek  */
109*00b67f09SDavid van Moolenbroek #undef interface
110*00b67f09SDavid van Moolenbroek 
111*00b67f09SDavid van Moolenbroek #ifndef INADDR_LOOPBACK
112*00b67f09SDavid van Moolenbroek #define INADDR_LOOPBACK 0x7f000001UL
113*00b67f09SDavid van Moolenbroek #endif
114*00b67f09SDavid van Moolenbroek 
115*00b67f09SDavid van Moolenbroek #ifndef ISC_PLATFORM_HAVEIN6PKTINFO
116*00b67f09SDavid van Moolenbroek struct in6_pktinfo {
117*00b67f09SDavid van Moolenbroek 	struct in6_addr ipi6_addr;    /* src/dst IPv6 address */
118*00b67f09SDavid van Moolenbroek 	unsigned int    ipi6_ifindex; /* send/recv interface index */
119*00b67f09SDavid van Moolenbroek };
120*00b67f09SDavid van Moolenbroek #endif
121*00b67f09SDavid van Moolenbroek 
122*00b67f09SDavid van Moolenbroek #if _MSC_VER < 1300
123*00b67f09SDavid van Moolenbroek #define in6addr_any isc_in6addr_any
124*00b67f09SDavid van Moolenbroek #define in6addr_loopback isc_in6addr_loopback
125*00b67f09SDavid van Moolenbroek #endif
126*00b67f09SDavid van Moolenbroek 
127*00b67f09SDavid van Moolenbroek /*
128*00b67f09SDavid van Moolenbroek  * Ensure type in_port_t is defined.
129*00b67f09SDavid van Moolenbroek  */
130*00b67f09SDavid van Moolenbroek #ifdef ISC_PLATFORM_NEEDPORTT
131*00b67f09SDavid van Moolenbroek typedef isc_uint16_t in_port_t;
132*00b67f09SDavid van Moolenbroek #endif
133*00b67f09SDavid van Moolenbroek 
134*00b67f09SDavid van Moolenbroek /*
135*00b67f09SDavid van Moolenbroek  * If this system does not have MSG_TRUNC (as returned from recvmsg())
136*00b67f09SDavid van Moolenbroek  * ISC_PLATFORM_RECVOVERFLOW will be defined.  This will enable the MSG_TRUNC
137*00b67f09SDavid van Moolenbroek  * faking code in socket.c.
138*00b67f09SDavid van Moolenbroek  */
139*00b67f09SDavid van Moolenbroek #ifndef MSG_TRUNC
140*00b67f09SDavid van Moolenbroek #define ISC_PLATFORM_RECVOVERFLOW
141*00b67f09SDavid van Moolenbroek #endif
142*00b67f09SDavid van Moolenbroek 
143*00b67f09SDavid van Moolenbroek #define ISC__IPADDR(x)	((isc_uint32_t)htonl((isc_uint32_t)(x)))
144*00b67f09SDavid van Moolenbroek 
145*00b67f09SDavid van Moolenbroek #define ISC_IPADDR_ISMULTICAST(i) \
146*00b67f09SDavid van Moolenbroek 		(((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
147*00b67f09SDavid van Moolenbroek 		 == ISC__IPADDR(0xe0000000))
148*00b67f09SDavid van Moolenbroek 
149*00b67f09SDavid van Moolenbroek #define ISC_IPADDR_ISEXPERIMENTAL(i) \
150*00b67f09SDavid van Moolenbroek 		(((isc_uint32_t)(i) & ISC__IPADDR(0xf0000000)) \
151*00b67f09SDavid van Moolenbroek 		 == ISC__IPADDR(0xf0000000))
152*00b67f09SDavid van Moolenbroek 
153*00b67f09SDavid van Moolenbroek /*
154*00b67f09SDavid van Moolenbroek  * Fix the FD_SET and FD_CLR Macros to properly cast
155*00b67f09SDavid van Moolenbroek  */
156*00b67f09SDavid van Moolenbroek #undef FD_CLR
157*00b67f09SDavid van Moolenbroek #define FD_CLR(fd, set) do { \
158*00b67f09SDavid van Moolenbroek     u_int __i; \
159*00b67f09SDavid van Moolenbroek     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
160*00b67f09SDavid van Moolenbroek 	if (((fd_set FAR *)(set))->fd_array[__i] == (SOCKET) fd) { \
161*00b67f09SDavid van Moolenbroek 	    while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
162*00b67f09SDavid van Moolenbroek 		((fd_set FAR *)(set))->fd_array[__i] = \
163*00b67f09SDavid van Moolenbroek 		    ((fd_set FAR *)(set))->fd_array[__i+1]; \
164*00b67f09SDavid van Moolenbroek 		__i++; \
165*00b67f09SDavid van Moolenbroek 	    } \
166*00b67f09SDavid van Moolenbroek 	    ((fd_set FAR *)(set))->fd_count--; \
167*00b67f09SDavid van Moolenbroek 	    break; \
168*00b67f09SDavid van Moolenbroek 	} \
169*00b67f09SDavid van Moolenbroek     } \
170*00b67f09SDavid van Moolenbroek } while (0)
171*00b67f09SDavid van Moolenbroek 
172*00b67f09SDavid van Moolenbroek #undef FD_SET
173*00b67f09SDavid van Moolenbroek #define FD_SET(fd, set) do { \
174*00b67f09SDavid van Moolenbroek     u_int __i; \
175*00b67f09SDavid van Moolenbroek     for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
176*00b67f09SDavid van Moolenbroek 	if (((fd_set FAR *)(set))->fd_array[__i] == (SOCKET)(fd)) { \
177*00b67f09SDavid van Moolenbroek 	    break; \
178*00b67f09SDavid van Moolenbroek 	} \
179*00b67f09SDavid van Moolenbroek     } \
180*00b67f09SDavid van Moolenbroek     if (__i == ((fd_set FAR *)(set))->fd_count) { \
181*00b67f09SDavid van Moolenbroek 	if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
182*00b67f09SDavid van Moolenbroek 	    ((fd_set FAR *)(set))->fd_array[__i] = (SOCKET)(fd); \
183*00b67f09SDavid van Moolenbroek 	    ((fd_set FAR *)(set))->fd_count++; \
184*00b67f09SDavid van Moolenbroek 	} \
185*00b67f09SDavid van Moolenbroek     } \
186*00b67f09SDavid van Moolenbroek } while (0)
187*00b67f09SDavid van Moolenbroek 
188*00b67f09SDavid van Moolenbroek /*
189*00b67f09SDavid van Moolenbroek  * Windows Sockets errors redefined as regular Berkeley error constants.
190*00b67f09SDavid van Moolenbroek  * These are usually commented out in Windows NT to avoid conflicts with errno.h.
191*00b67f09SDavid van Moolenbroek  * Use the WSA constants instead.
192*00b67f09SDavid van Moolenbroek  */
193*00b67f09SDavid van Moolenbroek 
194*00b67f09SDavid van Moolenbroek #include <errno.h>
195*00b67f09SDavid van Moolenbroek 
196*00b67f09SDavid van Moolenbroek #ifndef EWOULDBLOCK
197*00b67f09SDavid van Moolenbroek #define EWOULDBLOCK             WSAEWOULDBLOCK
198*00b67f09SDavid van Moolenbroek #endif
199*00b67f09SDavid van Moolenbroek #ifndef EINPROGRESS
200*00b67f09SDavid van Moolenbroek #define EINPROGRESS             WSAEINPROGRESS
201*00b67f09SDavid van Moolenbroek #endif
202*00b67f09SDavid van Moolenbroek #ifndef EALREADY
203*00b67f09SDavid van Moolenbroek #define EALREADY                WSAEALREADY
204*00b67f09SDavid van Moolenbroek #endif
205*00b67f09SDavid van Moolenbroek #ifndef ENOTSOCK
206*00b67f09SDavid van Moolenbroek #define ENOTSOCK                WSAENOTSOCK
207*00b67f09SDavid van Moolenbroek #endif
208*00b67f09SDavid van Moolenbroek #ifndef EDESTADDRREQ
209*00b67f09SDavid van Moolenbroek #define EDESTADDRREQ            WSAEDESTADDRREQ
210*00b67f09SDavid van Moolenbroek #endif
211*00b67f09SDavid van Moolenbroek #ifndef EMSGSIZE
212*00b67f09SDavid van Moolenbroek #define EMSGSIZE                WSAEMSGSIZE
213*00b67f09SDavid van Moolenbroek #endif
214*00b67f09SDavid van Moolenbroek #ifndef EPROTOTYPE
215*00b67f09SDavid van Moolenbroek #define EPROTOTYPE              WSAEPROTOTYPE
216*00b67f09SDavid van Moolenbroek #endif
217*00b67f09SDavid van Moolenbroek #ifndef ENOPROTOOPT
218*00b67f09SDavid van Moolenbroek #define ENOPROTOOPT             WSAENOPROTOOPT
219*00b67f09SDavid van Moolenbroek #endif
220*00b67f09SDavid van Moolenbroek #ifndef EPROTONOSUPPORT
221*00b67f09SDavid van Moolenbroek #define EPROTONOSUPPORT         WSAEPROTONOSUPPORT
222*00b67f09SDavid van Moolenbroek #endif
223*00b67f09SDavid van Moolenbroek #ifndef ESOCKTNOSUPPORT
224*00b67f09SDavid van Moolenbroek #define ESOCKTNOSUPPORT         WSAESOCKTNOSUPPORT
225*00b67f09SDavid van Moolenbroek #endif
226*00b67f09SDavid van Moolenbroek #ifndef EOPNOTSUPP
227*00b67f09SDavid van Moolenbroek #define EOPNOTSUPP              WSAEOPNOTSUPP
228*00b67f09SDavid van Moolenbroek #endif
229*00b67f09SDavid van Moolenbroek #ifndef EPFNOSUPPORT
230*00b67f09SDavid van Moolenbroek #define EPFNOSUPPORT            WSAEPFNOSUPPORT
231*00b67f09SDavid van Moolenbroek #endif
232*00b67f09SDavid van Moolenbroek #ifndef EAFNOSUPPORT
233*00b67f09SDavid van Moolenbroek #define EAFNOSUPPORT            WSAEAFNOSUPPORT
234*00b67f09SDavid van Moolenbroek #endif
235*00b67f09SDavid van Moolenbroek #ifndef EADDRINUSE
236*00b67f09SDavid van Moolenbroek #define EADDRINUSE              WSAEADDRINUSE
237*00b67f09SDavid van Moolenbroek #endif
238*00b67f09SDavid van Moolenbroek #ifndef EADDRNOTAVAIL
239*00b67f09SDavid van Moolenbroek #define EADDRNOTAVAIL           WSAEADDRNOTAVAIL
240*00b67f09SDavid van Moolenbroek #endif
241*00b67f09SDavid van Moolenbroek #ifndef ENETDOWN
242*00b67f09SDavid van Moolenbroek #define ENETDOWN                WSAENETDOWN
243*00b67f09SDavid van Moolenbroek #endif
244*00b67f09SDavid van Moolenbroek #ifndef ENETUNREACH
245*00b67f09SDavid van Moolenbroek #define ENETUNREACH             WSAENETUNREACH
246*00b67f09SDavid van Moolenbroek #endif
247*00b67f09SDavid van Moolenbroek #ifndef ENETRESET
248*00b67f09SDavid van Moolenbroek #define ENETRESET               WSAENETRESET
249*00b67f09SDavid van Moolenbroek #endif
250*00b67f09SDavid van Moolenbroek #ifndef ECONNABORTED
251*00b67f09SDavid van Moolenbroek #define ECONNABORTED            WSAECONNABORTED
252*00b67f09SDavid van Moolenbroek #endif
253*00b67f09SDavid van Moolenbroek #ifndef ECONNRESET
254*00b67f09SDavid van Moolenbroek #define ECONNRESET              WSAECONNRESET
255*00b67f09SDavid van Moolenbroek #endif
256*00b67f09SDavid van Moolenbroek #ifndef ENOBUFS
257*00b67f09SDavid van Moolenbroek #define ENOBUFS                 WSAENOBUFS
258*00b67f09SDavid van Moolenbroek #endif
259*00b67f09SDavid van Moolenbroek #ifndef EISCONN
260*00b67f09SDavid van Moolenbroek #define EISCONN                 WSAEISCONN
261*00b67f09SDavid van Moolenbroek #endif
262*00b67f09SDavid van Moolenbroek #ifndef ENOTCONN
263*00b67f09SDavid van Moolenbroek #define ENOTCONN                WSAENOTCONN
264*00b67f09SDavid van Moolenbroek #endif
265*00b67f09SDavid van Moolenbroek #ifndef ESHUTDOWN
266*00b67f09SDavid van Moolenbroek #define ESHUTDOWN               WSAESHUTDOWN
267*00b67f09SDavid van Moolenbroek #endif
268*00b67f09SDavid van Moolenbroek #ifndef ETOOMANYREFS
269*00b67f09SDavid van Moolenbroek #define ETOOMANYREFS            WSAETOOMANYREFS
270*00b67f09SDavid van Moolenbroek #endif
271*00b67f09SDavid van Moolenbroek #ifndef ETIMEDOUT
272*00b67f09SDavid van Moolenbroek #define ETIMEDOUT               WSAETIMEDOUT
273*00b67f09SDavid van Moolenbroek #endif
274*00b67f09SDavid van Moolenbroek #ifndef ECONNREFUSED
275*00b67f09SDavid van Moolenbroek #define ECONNREFUSED            WSAECONNREFUSED
276*00b67f09SDavid van Moolenbroek #endif
277*00b67f09SDavid van Moolenbroek #ifndef ELOOP
278*00b67f09SDavid van Moolenbroek #define ELOOP                   WSAELOOP
279*00b67f09SDavid van Moolenbroek #endif
280*00b67f09SDavid van Moolenbroek #ifndef EHOSTDOWN
281*00b67f09SDavid van Moolenbroek #define EHOSTDOWN               WSAEHOSTDOWN
282*00b67f09SDavid van Moolenbroek #endif
283*00b67f09SDavid van Moolenbroek #ifndef EHOSTUNREACH
284*00b67f09SDavid van Moolenbroek #define EHOSTUNREACH            WSAEHOSTUNREACH
285*00b67f09SDavid van Moolenbroek #endif
286*00b67f09SDavid van Moolenbroek #ifndef EPROCLIM
287*00b67f09SDavid van Moolenbroek #define EPROCLIM                WSAEPROCLIM
288*00b67f09SDavid van Moolenbroek #endif
289*00b67f09SDavid van Moolenbroek #ifndef EUSERS
290*00b67f09SDavid van Moolenbroek #define EUSERS                  WSAEUSERS
291*00b67f09SDavid van Moolenbroek #endif
292*00b67f09SDavid van Moolenbroek #ifndef EDQUOT
293*00b67f09SDavid van Moolenbroek #define EDQUOT                  WSAEDQUOT
294*00b67f09SDavid van Moolenbroek #endif
295*00b67f09SDavid van Moolenbroek #ifndef ESTALE
296*00b67f09SDavid van Moolenbroek #define ESTALE                  WSAESTALE
297*00b67f09SDavid van Moolenbroek #endif
298*00b67f09SDavid van Moolenbroek #ifndef EREMOTE
299*00b67f09SDavid van Moolenbroek #define EREMOTE                 WSAEREMOTE
300*00b67f09SDavid van Moolenbroek #endif
301*00b67f09SDavid van Moolenbroek 
302*00b67f09SDavid van Moolenbroek 
303*00b67f09SDavid van Moolenbroek /***
304*00b67f09SDavid van Moolenbroek  *** Functions.
305*00b67f09SDavid van Moolenbroek  ***/
306*00b67f09SDavid van Moolenbroek 
307*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS
308*00b67f09SDavid van Moolenbroek 
309*00b67f09SDavid van Moolenbroek isc_result_t
310*00b67f09SDavid van Moolenbroek isc_net_probeipv4(void);
311*00b67f09SDavid van Moolenbroek /*
312*00b67f09SDavid van Moolenbroek  * Check if the system's kernel supports IPv4.
313*00b67f09SDavid van Moolenbroek  *
314*00b67f09SDavid van Moolenbroek  * Returns:
315*00b67f09SDavid van Moolenbroek  *
316*00b67f09SDavid van Moolenbroek  *	ISC_R_SUCCESS		IPv4 is supported.
317*00b67f09SDavid van Moolenbroek  *	ISC_R_NOTFOUND		IPv4 is not supported.
318*00b67f09SDavid van Moolenbroek  *	ISC_R_DISABLED		IPv4 is disabled.
319*00b67f09SDavid van Moolenbroek  *	ISC_R_UNEXPECTED
320*00b67f09SDavid van Moolenbroek  */
321*00b67f09SDavid van Moolenbroek 
322*00b67f09SDavid van Moolenbroek isc_result_t
323*00b67f09SDavid van Moolenbroek isc_net_probeipv6(void);
324*00b67f09SDavid van Moolenbroek /*
325*00b67f09SDavid van Moolenbroek  * Check if the system's kernel supports IPv6.
326*00b67f09SDavid van Moolenbroek  *
327*00b67f09SDavid van Moolenbroek  * Returns:
328*00b67f09SDavid van Moolenbroek  *
329*00b67f09SDavid van Moolenbroek  *	ISC_R_SUCCESS		IPv6 is supported.
330*00b67f09SDavid van Moolenbroek  *	ISC_R_NOTFOUND		IPv6 is not supported.
331*00b67f09SDavid van Moolenbroek  *	ISC_R_DISABLED		IPv6 is disabled.
332*00b67f09SDavid van Moolenbroek  *	ISC_R_UNEXPECTED
333*00b67f09SDavid van Moolenbroek  */
334*00b67f09SDavid van Moolenbroek 
335*00b67f09SDavid van Moolenbroek isc_result_t
336*00b67f09SDavid van Moolenbroek isc_net_probeunix(void);
337*00b67f09SDavid van Moolenbroek /*
338*00b67f09SDavid van Moolenbroek  * Check if UNIX domain sockets are supported.
339*00b67f09SDavid van Moolenbroek  *
340*00b67f09SDavid van Moolenbroek  * Returns:
341*00b67f09SDavid van Moolenbroek  *
342*00b67f09SDavid van Moolenbroek  *	ISC_R_SUCCESS
343*00b67f09SDavid van Moolenbroek  *	ISC_R_NOTFOUND
344*00b67f09SDavid van Moolenbroek  */
345*00b67f09SDavid van Moolenbroek 
346*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPRECVV4      0x01    /* Can receive sent DSCP value IPv4 */
347*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPRECVV6      0x02    /* Can receive sent DSCP value IPv6 */
348*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPSETV4       0x04    /* Can set DSCP on socket IPv4 */
349*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPSETV6       0x08    /* Can set DSCP on socket IPv6 */
350*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPPKTV4       0x10    /* Can set DSCP on per packet IPv4 */
351*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPPKTV6       0x20    /* Can set DSCP on per packet IPv6 */
352*00b67f09SDavid van Moolenbroek #define ISC_NET_DSCPALL         0x3f    /* All valid flags */
353*00b67f09SDavid van Moolenbroek 
354*00b67f09SDavid van Moolenbroek unsigned int
355*00b67f09SDavid van Moolenbroek isc_net_probedscp(void);
356*00b67f09SDavid van Moolenbroek /*%<
357*00b67f09SDavid van Moolenbroek  * Probe the level of DSCP support.
358*00b67f09SDavid van Moolenbroek  */
359*00b67f09SDavid van Moolenbroek 
360*00b67f09SDavid van Moolenbroek isc_result_t
361*00b67f09SDavid van Moolenbroek isc_net_probe_ipv6only(void);
362*00b67f09SDavid van Moolenbroek /*
363*00b67f09SDavid van Moolenbroek  * Check if the system's kernel supports the IPV6_V6ONLY socket option.
364*00b67f09SDavid van Moolenbroek  *
365*00b67f09SDavid van Moolenbroek  * Returns:
366*00b67f09SDavid van Moolenbroek  *
367*00b67f09SDavid van Moolenbroek  *	ISC_R_SUCCESS		the option is supported for both TCP and UDP.
368*00b67f09SDavid van Moolenbroek  *	ISC_R_NOTFOUND		IPv6 itself or the option is not supported.
369*00b67f09SDavid van Moolenbroek  *	ISC_R_UNEXPECTED
370*00b67f09SDavid van Moolenbroek  */
371*00b67f09SDavid van Moolenbroek 
372*00b67f09SDavid van Moolenbroek isc_result_t
373*00b67f09SDavid van Moolenbroek isc_net_probe_ipv6pktinfo(void);
374*00b67f09SDavid van Moolenbroek /*
375*00b67f09SDavid van Moolenbroek  * Check if the system's kernel supports the IPV6_(RECV)PKTINFO socket option
376*00b67f09SDavid van Moolenbroek  * for UDP sockets.
377*00b67f09SDavid van Moolenbroek  *
378*00b67f09SDavid van Moolenbroek  * Returns:
379*00b67f09SDavid van Moolenbroek  *
380*00b67f09SDavid van Moolenbroek  *	ISC_R_SUCCESS		the option is supported.
381*00b67f09SDavid van Moolenbroek  *	ISC_R_NOTFOUND		IPv6 itself or the option is not supported.
382*00b67f09SDavid van Moolenbroek  *	ISC_R_UNEXPECTED
383*00b67f09SDavid van Moolenbroek  */
384*00b67f09SDavid van Moolenbroek 
385*00b67f09SDavid van Moolenbroek void
386*00b67f09SDavid van Moolenbroek isc_net_disableipv4(void);
387*00b67f09SDavid van Moolenbroek 
388*00b67f09SDavid van Moolenbroek void
389*00b67f09SDavid van Moolenbroek isc_net_disableipv6(void);
390*00b67f09SDavid van Moolenbroek 
391*00b67f09SDavid van Moolenbroek void
392*00b67f09SDavid van Moolenbroek isc_net_enableipv4(void);
393*00b67f09SDavid van Moolenbroek 
394*00b67f09SDavid van Moolenbroek void
395*00b67f09SDavid van Moolenbroek isc_net_enableipv6(void);
396*00b67f09SDavid van Moolenbroek 
397*00b67f09SDavid van Moolenbroek isc_result_t
398*00b67f09SDavid van Moolenbroek isc_net_getudpportrange(int af, in_port_t *low, in_port_t *high);
399*00b67f09SDavid van Moolenbroek /*%<
400*00b67f09SDavid van Moolenbroek  * Returns system's default range of ephemeral UDP ports, if defined.
401*00b67f09SDavid van Moolenbroek  * If the range is not available or unknown, ISC_NET_PORTRANGELOW and
402*00b67f09SDavid van Moolenbroek  * ISC_NET_PORTRANGEHIGH will be returned.
403*00b67f09SDavid van Moolenbroek  *
404*00b67f09SDavid van Moolenbroek  * Requires:
405*00b67f09SDavid van Moolenbroek  *
406*00b67f09SDavid van Moolenbroek  *\li	'low' and 'high' must be non NULL.
407*00b67f09SDavid van Moolenbroek  *
408*00b67f09SDavid van Moolenbroek  * Returns:
409*00b67f09SDavid van Moolenbroek  *
410*00b67f09SDavid van Moolenbroek  *\li	*low and *high will be the ports specifying the low and high ends of
411*00b67f09SDavid van Moolenbroek  *	the range.
412*00b67f09SDavid van Moolenbroek  */
413*00b67f09SDavid van Moolenbroek 
414*00b67f09SDavid van Moolenbroek #ifdef ISC_PLATFORM_NEEDNTOP
415*00b67f09SDavid van Moolenbroek const char *
416*00b67f09SDavid van Moolenbroek isc_net_ntop(int af, const void *src, char *dst, size_t size);
417*00b67f09SDavid van Moolenbroek #define inet_ntop isc_net_ntop
418*00b67f09SDavid van Moolenbroek #endif
419*00b67f09SDavid van Moolenbroek 
420*00b67f09SDavid van Moolenbroek #ifdef ISC_PLATFORM_NEEDPTON
421*00b67f09SDavid van Moolenbroek int
422*00b67f09SDavid van Moolenbroek isc_net_pton(int af, const char *src, void *dst);
423*00b67f09SDavid van Moolenbroek #define inet_pton isc_net_pton
424*00b67f09SDavid van Moolenbroek #endif
425*00b67f09SDavid van Moolenbroek 
426*00b67f09SDavid van Moolenbroek int
427*00b67f09SDavid van Moolenbroek isc_net_aton(const char *cp, struct in_addr *addr);
428*00b67f09SDavid van Moolenbroek #define inet_aton isc_net_aton
429*00b67f09SDavid van Moolenbroek 
430*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS
431*00b67f09SDavid van Moolenbroek 
432*00b67f09SDavid van Moolenbroek #endif /* ISC_NET_H */
433