root/lib/replace/system/network.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef _system_network_h
   2 #define _system_network_h
   3 /* 
   4    Unix SMB/CIFS implementation.
   5 
   6    networking system include wrappers
   7 
   8    Copyright (C) Andrew Tridgell 2004
   9    Copyright (C) Jelmer Vernooij 2007
  10    
  11      ** NOTE! The following LGPL license applies to the replace
  12      ** library. This does NOT imply that all of Samba is released
  13      ** under the LGPL
  14    
  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.
  19 
  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.
  24 
  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/>.
  27 
  28 */
  29 
  30 #ifndef LIBREPLACE_NETWORK_CHECKS
  31 #error "AC_LIBREPLACE_NETWORK_CHECKS missing in configure"
  32 #endif
  33 
  34 #ifdef HAVE_SYS_SOCKET_H
  35 #include <sys/socket.h>
  36 #endif
  37 
  38 #ifdef HAVE_UNIXSOCKET
  39 #include <sys/un.h>
  40 #endif
  41 
  42 #ifdef HAVE_NETINET_IN_H
  43 #include <netinet/in.h>
  44 #endif
  45 #ifdef HAVE_ARPA_INET_H
  46 #include <arpa/inet.h>
  47 #endif
  48 
  49 #ifdef HAVE_NETDB_H
  50 #include <netdb.h>
  51 #endif
  52 
  53 #ifdef HAVE_NETINET_TCP_H
  54 #include <netinet/tcp.h>
  55 #endif
  56 
  57 /*
  58  * The next three defines are needed to access the IPTOS_* options
  59  * on some systems.
  60  */
  61 
  62 #ifdef HAVE_NETINET_IN_SYSTM_H
  63 #include <netinet/in_systm.h>
  64 #endif
  65 
  66 #ifdef HAVE_NETINET_IN_IP_H
  67 #include <netinet/in_ip.h>
  68 #endif
  69 
  70 #ifdef HAVE_NETINET_IP_H
  71 #include <netinet/ip.h>
  72 #endif
  73 
  74 #ifdef HAVE_NET_IF_H
  75 #include <net/if.h>
  76 #endif
  77 
  78 #ifdef HAVE_UNISTD_H
  79 #include <unistd.h>
  80 #endif
  81 
  82 #ifdef HAVE_SYS_IOCTL_H
  83 #include <sys/ioctl.h>
  84 #endif
  85 
  86 #ifdef HAVE_SYS_UIO_H
  87 #include <sys/uio.h>
  88 #endif
  89 
  90 #ifdef HAVE_STROPTS_H
  91 #include <stropts.h>
  92 #endif
  93 
  94 #ifndef HAVE_SOCKLEN_T
  95 #define HAVE_SOCKLEN_T
  96 typedef int socklen_t;
  97 #endif
  98 
  99 #if !defined (HAVE_INET_NTOA) || defined(REPLACE_INET_NTOA)
 100 /* define is in "replace.h" */
 101 char *rep_inet_ntoa(struct in_addr ip);
 102 #endif
 103 
 104 #ifndef HAVE_INET_PTON
 105 /* define is in "replace.h" */
 106 int rep_inet_pton(int af, const char *src, void *dst);
 107 #endif
 108 
 109 #ifndef HAVE_INET_NTOP
 110 /* define is in "replace.h" */
 111 const char *rep_inet_ntop(int af, const void *src, char *dst, socklen_t size);
 112 #endif
 113 
 114 #ifndef HAVE_INET_ATON
 115 /* define is in "replace.h" */
 116 int rep_inet_aton(const char *src, struct in_addr *dst);
 117 #endif
 118 
 119 #ifndef HAVE_CONNECT
 120 /* define is in "replace.h" */
 121 int rep_connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
 122 #endif
 123 
 124 #ifndef HAVE_GETHOSTBYNAME
 125 /* define is in "replace.h" */
 126 struct hostent *rep_gethostbyname(const char *name);
 127 #endif
 128 
 129 #ifdef HAVE_IFADDRS_H
 130 #include <ifaddrs.h>
 131 #endif
 132 
 133 #ifndef HAVE_STRUCT_IFADDRS
 134 struct ifaddrs {
 135         struct ifaddrs   *ifa_next;         /* Pointer to next struct */
 136         char             *ifa_name;         /* Interface name */
 137         unsigned int     ifa_flags;         /* Interface flags */
 138         struct sockaddr  *ifa_addr;         /* Interface address */
 139         struct sockaddr  *ifa_netmask;      /* Interface netmask */
 140 #undef ifa_dstaddr
 141         struct sockaddr  *ifa_dstaddr;      /* P2P interface destination */
 142         void             *ifa_data;         /* Address specific data */
 143 };
 144 #endif
 145 
 146 #ifndef HAVE_GETIFADDRS
 147 int rep_getifaddrs(struct ifaddrs **);
 148 #endif
 149 
 150 #ifndef HAVE_FREEIFADDRS
 151 void rep_freeifaddrs(struct ifaddrs *);
 152 #endif
 153 
 154 #ifndef HAVE_SOCKETPAIR
 155 /* define is in "replace.h" */
 156 int rep_socketpair(int d, int type, int protocol, int sv[2]);
 157 #endif
 158 
 159 /*
 160  * Some systems have getaddrinfo but not the
 161  * defines needed to use it.
 162  */
 163 
 164 /* Various macros that ought to be in <netdb.h>, but might not be */
 165 
 166 #ifndef EAI_FAIL
 167 #define EAI_BADFLAGS    (-1)
 168 #define EAI_NONAME      (-2)
 169 #define EAI_AGAIN       (-3)
 170 #define EAI_FAIL        (-4)
 171 #define EAI_FAMILY      (-6)
 172 #define EAI_SOCKTYPE    (-7)
 173 #define EAI_SERVICE     (-8)
 174 #define EAI_MEMORY      (-10)
 175 #define EAI_SYSTEM      (-11)
 176 #endif   /* !EAI_FAIL */
 177 
 178 #ifndef AI_PASSIVE
 179 #define AI_PASSIVE      0x0001
 180 #endif
 181 
 182 #ifndef AI_CANONNAME
 183 #define AI_CANONNAME    0x0002
 184 #endif
 185 
 186 #ifndef AI_NUMERICHOST
 187 /*
 188  * some platforms don't support AI_NUMERICHOST; define as zero if using
 189  * the system version of getaddrinfo...
 190  */
 191 #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
 192 #define AI_NUMERICHOST  0
 193 #else
 194 #define AI_NUMERICHOST  0x0004
 195 #endif
 196 #endif
 197 
 198 /*
 199  * Some of the functions in source3/lib/util_sock.c use AI_ADDRCONFIG. On QNX
 200  * 6.3.0, this macro is defined but, if it's used, getaddrinfo will fail. This
 201  * prevents smbd from opening any sockets.
 202  *
 203  * If I undefine AI_ADDRCONFIG on such systems and define it to be 0,
 204  * this works around the issue.
 205  */
 206 #ifdef __QNX__
 207 #include <sys/neutrino.h>
 208 #if _NTO_VERSION == 630
 209 #undef AI_ADDRCONFIG
 210 #endif
 211 #endif
 212 #ifndef AI_ADDRCONFIG
 213 /*
 214  * logic copied from AI_NUMERICHOST
 215  */
 216 #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
 217 #define AI_ADDRCONFIG   0
 218 #else
 219 #define AI_ADDRCONFIG   0x0020
 220 #endif
 221 #endif
 222 
 223 #ifndef AI_NUMERICSERV
 224 /*
 225  * logic copied from AI_NUMERICHOST
 226  */
 227 #if defined(HAVE_STRUCT_ADDRINFO) && defined(HAVE_GETADDRINFO)
 228 #define AI_NUMERICSERV  0
 229 #else
 230 #define AI_NUMERICSERV  0x0400
 231 #endif
 232 #endif
 233 
 234 #ifndef NI_NUMERICHOST
 235 #define NI_NUMERICHOST  1
 236 #endif
 237 
 238 #ifndef NI_NUMERICSERV
 239 #define NI_NUMERICSERV  2
 240 #endif
 241 
 242 #ifndef NI_NOFQDN
 243 #define NI_NOFQDN       4
 244 #endif
 245 
 246 #ifndef NI_NAMEREQD
 247 #define NI_NAMEREQD     8
 248 #endif
 249 
 250 #ifndef NI_DGRAM
 251 #define NI_DGRAM        16
 252 #endif
 253 
 254 
 255 #ifndef NI_MAXHOST
 256 #define NI_MAXHOST      1025
 257 #endif
 258 
 259 #ifndef NI_MAXSERV
 260 #define NI_MAXSERV      32
 261 #endif
 262 
 263 /*
 264  * glibc on linux doesn't seem to have MSG_WAITALL
 265  * defined. I think the kernel has it though..
 266  */
 267 #ifndef MSG_WAITALL
 268 #define MSG_WAITALL 0
 269 #endif
 270 
 271 #ifndef INADDR_LOOPBACK
 272 #define INADDR_LOOPBACK 0x7f000001
 273 #endif
 274 
 275 #ifndef INADDR_NONE
 276 #define INADDR_NONE 0xffffffff
 277 #endif
 278 
 279 #ifndef EAFNOSUPPORT
 280 #define EAFNOSUPPORT EINVAL
 281 #endif
 282 
 283 #ifndef INET_ADDRSTRLEN
 284 #define INET_ADDRSTRLEN 16
 285 #endif
 286 
 287 #ifndef INET6_ADDRSTRLEN
 288 #define INET6_ADDRSTRLEN 46
 289 #endif
 290 
 291 #ifndef HOST_NAME_MAX
 292 #define HOST_NAME_MAX 255
 293 #endif
 294 
 295 #ifndef MAXHOSTNAMELEN
 296 #define MAXHOSTNAMELEN HOST_NAME_MAX
 297 #endif
 298 
 299 #ifndef HAVE_SA_FAMILY_T
 300 #define HAVE_SA_FAMILY_T
 301 typedef unsigned short int sa_family_t;
 302 #endif
 303 
 304 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
 305 #define HAVE_STRUCT_SOCKADDR_STORAGE
 306 #ifdef HAVE_STRUCT_SOCKADDR_IN6
 307 #define sockaddr_storage sockaddr_in6
 308 #define ss_family sin6_family
 309 #define HAVE_SS_FAMILY 1
 310 #else
 311 #define sockaddr_storage sockaddr_in
 312 #define ss_family sin_family
 313 #define HAVE_SS_FAMILY 1
 314 #endif
 315 #endif
 316 
 317 #ifndef HAVE_SS_FAMILY
 318 #ifdef HAVE___SS_FAMILY
 319 #define ss_family __ss_family
 320 #define HAVE_SS_FAMILY 1
 321 #endif
 322 #endif
 323 
 324 #ifndef HAVE_STRUCT_ADDRINFO
 325 #define HAVE_STRUCT_ADDRINFO
 326 struct addrinfo {
 327         int                     ai_flags;
 328         int                     ai_family;
 329         int                     ai_socktype;
 330         int                     ai_protocol;
 331         socklen_t               ai_addrlen;
 332         struct sockaddr         *ai_addr;
 333         char                    *ai_canonname;
 334         struct addrinfo         *ai_next;
 335 };
 336 #endif   /* HAVE_STRUCT_ADDRINFO */
 337 
 338 #if !defined(HAVE_GETADDRINFO)
 339 #include "getaddrinfo.h"
 340 #endif
 341 
 342 /* Needed for some systems that don't define it (Solaris). */
 343 #ifndef ifr_netmask
 344 #define ifr_netmask ifr_addr
 345 #endif
 346 
 347 #ifdef SOCKET_WRAPPER
 348 #ifndef SOCKET_WRAPPER_DISABLE
 349 #ifndef SOCKET_WRAPPER_NOT_REPLACE
 350 #define SOCKET_WRAPPER_REPLACE
 351 #endif /* SOCKET_WRAPPER_NOT_REPLACE */
 352 #include "../socket_wrapper/socket_wrapper.h"
 353 #endif /* SOCKET_WRAPPER_DISABLE */
 354 #endif /* SOCKET_WRAPPER */
 355 
 356 #endif

/* [<][>][^][v][top][bottom][index][help] */