1
#ifndef _system_network_h
2
#define _system_network_h
4
Unix SMB/CIFS implementation.
6
networking system include wrappers
8
Copyright (C) Andrew Tridgell 2004
9
Copyright (C) Jelmer Vernooij 2007
11
** NOTE! The following LGPL license applies to the replace
12
** library. This does NOT imply that all of Samba is released
15
This library is free software; you can redistribute it and/or
16
modify it under the terms of the GNU Lesser General Public
17
License as published by the Free Software Foundation; either
18
version 3 of the License, or (at your option) any later version.
20
This library is distributed in the hope that it will be useful,
21
but WITHOUT ANY WARRANTY; without even the implied warranty of
22
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
23
Lesser General Public License for more details.
25
You should have received a copy of the GNU Lesser General Public
26
License along with this library; if not, see <http://www.gnu.org/licenses/>.
30
#ifndef LIBREPLACE_NETWORK_CHECKS
31
#error "AC_LIBREPLACE_NETWORK_CHECKS missing in configure"
34
#ifdef HAVE_SYS_SOCKET_H
35
#include <sys/socket.h>
38
#ifdef HAVE_UNIXSOCKET
42
#ifdef HAVE_NETINET_IN_H
43
#include <netinet/in.h>
45
#ifdef HAVE_ARPA_INET_H
46
#include <arpa/inet.h>
53
#ifdef HAVE_NETINET_TCP_H
54
#include <netinet/tcp.h>
58
* The next three defines are needed to access the IPTOS_* options
62
#ifdef HAVE_NETINET_IN_SYSTM_H
63
#include <netinet/in_systm.h>
66
#ifdef HAVE_NETINET_IN_IP_H
67
#include <netinet/in_ip.h>
70
#ifdef HAVE_NETINET_IP_H
71
#include <netinet/ip.h>
82
#ifdef HAVE_SYS_IOCTL_H
83
#include <sys/ioctl.h>
90
#ifndef HAVE_SOCKLEN_T
91
#define HAVE_SOCKLEN_T
92
typedef int socklen_t;
95
#if !defined (HAVE_INET_NTOA) || defined(REPLACE_INET_NTOA)
96
/* define is in "replace.h" */
97
char *rep_inet_ntoa(struct in_addr ip);
100
#ifndef HAVE_INET_PTON
101
/* define is in "replace.h" */
102
int rep_inet_pton(int af, const char *src, void *dst);
105
#ifndef HAVE_INET_NTOP
106
/* define is in "replace.h" */
107
const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size);
110
#ifndef HAVE_INET_ATON
111
/* define is in "replace.h" */
112
int rep_inet_aton(const char *src, struct in_addr *dst);
116
/* define is in "replace.h" */
117
int rep_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
120
#ifndef HAVE_GETHOSTBYNAME
121
/* define is in "replace.h" */
122
struct hostent *rep_gethostbyname(const char *name);
125
#ifdef HAVE_IFADDRS_H
129
#ifndef HAVE_STRUCT_IFADDRS
131
struct ifaddrs *ifa_next; /* Pointer to next struct */
132
char *ifa_name; /* Interface name */
133
unsigned int ifa_flags; /* Interface flags */
134
struct sockaddr *ifa_addr; /* Interface address */
135
struct sockaddr *ifa_netmask; /* Interface netmask */
137
struct sockaddr *ifa_dstaddr; /* P2P interface destination */
138
void *ifa_data; /* Address specific data */
142
#ifndef HAVE_GETIFADDRS
143
int rep_getifaddrs(struct ifaddrs **);
146
#ifndef HAVE_FREEIFADDRS
147
void rep_freeifaddrs(struct ifaddrs *);
150
#ifndef HAVE_SOCKETPAIR
151
/* define is in "replace.h" */
152
int rep_socketpair(int d, int type, int protocol, int sv[2]);
156
* Some systems have getaddrinfo but not the
157
* defines needed to use it.
160
/* Various macros that ought to be in <netdb.h>, but might not be */
163
#define EAI_BADFLAGS (-1)
164
#define EAI_NONAME (-2)
165
#define EAI_AGAIN (-3)
166
#define EAI_FAIL (-4)
167
#define EAI_FAMILY (-6)
168
#define EAI_SOCKTYPE (-7)
169
#define EAI_SERVICE (-8)
170
#define EAI_MEMORY (-10)
171
#define EAI_SYSTEM (-11)
172
#endif /* !EAI_FAIL */
175
#define AI_PASSIVE 0x0001
179
#define AI_CANONNAME 0x0002
182
#ifndef AI_NUMERICHOST
184
* some platforms don't support AI_NUMERICHOST; define as zero if using
185
* the system version of getaddrinfo...
187
#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
188
#define AI_NUMERICHOST 0
190
#define AI_NUMERICHOST 0x0004
194
#ifndef AI_ADDRCONFIG
196
* logic copied from AI_NUMERICHOST
198
#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
199
#define AI_ADDRCONFIG 0
201
#define AI_ADDRCONFIG 0x0020
205
#ifndef AI_NUMERICSERV
207
* logic copied from AI_NUMERICHOST
209
#if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
210
#define AI_NUMERICSERV 0
212
#define AI_NUMERICSERV 0x0400
216
#ifndef NI_NUMERICHOST
217
#define NI_NUMERICHOST 1
220
#ifndef NI_NUMERICSERV
221
#define NI_NUMERICSERV 2
229
#define NI_NAMEREQD 8
238
#define NI_MAXHOST 1025
242
#define NI_MAXSERV 32
246
* glibc on linux doesn't seem to have MSG_WAITALL
247
* defined. I think the kernel has it though..
250
#define MSG_WAITALL 0
253
#ifndef INADDR_LOOPBACK
254
#define INADDR_LOOPBACK 0x7f000001
258
#define INADDR_NONE 0xffffffff
262
#define EAFNOSUPPORT EINVAL
265
#ifndef INET_ADDRSTRLEN
266
#define INET_ADDRSTRLEN 16
269
#ifndef INET6_ADDRSTRLEN
270
#define INET6_ADDRSTRLEN 46
273
#ifndef HOST_NAME_MAX
274
#define HOST_NAME_MAX 256
277
#ifndef HAVE_SA_FAMILY_T
278
#define HAVE_SA_FAMILY_T
279
typedef unsigned short int sa_family_t;
282
#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
283
#define HAVE_STRUCT_SOCKADDR_STORAGE
284
#ifdef HAVE_STRUCT_SOCKADDR_IN6
285
#define sockaddr_storage sockaddr_in6
286
#define ss_family sin6_family
287
#define HAVE_SS_FAMILY 1
289
#define sockaddr_storage sockaddr_in
290
#define ss_family sin_family
291
#define HAVE_SS_FAMILY 1
295
#ifndef HAVE_SS_FAMILY
296
#ifdef HAVE___SS_FAMILY
297
#define ss_family __ss_family
298
#define HAVE_SS_FAMILY 1
302
#ifndef HAVE_STRUCT_ADDRINFO
303
#define HAVE_STRUCT_ADDRINFO
309
socklen_t ai_addrlen;
310
struct sockaddr *ai_addr;
312
struct addrinfo *ai_next;
314
#endif /* HAVE_STRUCT_ADDRINFO */
316
#if !defined(HAVE_GETADDRINFO)
317
#include "getaddrinfo.h"
320
/* Needed for some systems that don't define it (Solaris). */
322
#define ifr_netmask ifr_addr
325
#ifdef SOCKET_WRAPPER
326
#ifndef SOCKET_WRAPPER_NOT_REPLACE
327
#define SOCKET_WRAPPER_REPLACE
329
#include "../socket_wrapper/socket_wrapper.h"