xref: /aosp_15_r20/external/libcups/cups/getifaddrs-internal.h (revision 5e7646d21f1134fb0638875d812ef646c12ab91e)
1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker  * getifaddrs definitions for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker  *
4*5e7646d2SAndroid Build Coastguard Worker  * Copyright 2007-2018 by Apple Inc.
5*5e7646d2SAndroid Build Coastguard Worker  * Copyright 1997-2007 by Easy Software Products, all rights reserved.
6*5e7646d2SAndroid Build Coastguard Worker  *
7*5e7646d2SAndroid Build Coastguard Worker  * Licensed under Apache License v2.0.  See the file "LICENSE" for more
8*5e7646d2SAndroid Build Coastguard Worker  * information.
9*5e7646d2SAndroid Build Coastguard Worker  */
10*5e7646d2SAndroid Build Coastguard Worker 
11*5e7646d2SAndroid Build Coastguard Worker #ifndef _CUPS_GETIFADDRS_INTERNAL_H_
12*5e7646d2SAndroid Build Coastguard Worker #  define _CUPS_GETIFADDRS_INTERNAL_H_
13*5e7646d2SAndroid Build Coastguard Worker 
14*5e7646d2SAndroid Build Coastguard Worker /*
15*5e7646d2SAndroid Build Coastguard Worker  * Include necessary headers...
16*5e7646d2SAndroid Build Coastguard Worker  */
17*5e7646d2SAndroid Build Coastguard Worker 
18*5e7646d2SAndroid Build Coastguard Worker #  include "config.h"
19*5e7646d2SAndroid Build Coastguard Worker #  ifdef _WIN32
20*5e7646d2SAndroid Build Coastguard Worker #    define _WINSOCK_DEPRECATED_NO_WARNINGS 1
21*5e7646d2SAndroid Build Coastguard Worker #    include <io.h>
22*5e7646d2SAndroid Build Coastguard Worker #    include <winsock2.h>
23*5e7646d2SAndroid Build Coastguard Worker #    define CUPS_SOCAST (const char *)
24*5e7646d2SAndroid Build Coastguard Worker #  else
25*5e7646d2SAndroid Build Coastguard Worker #    include <unistd.h>
26*5e7646d2SAndroid Build Coastguard Worker #    include <fcntl.h>
27*5e7646d2SAndroid Build Coastguard Worker #    include <sys/socket.h>
28*5e7646d2SAndroid Build Coastguard Worker #    include <netinet/in.h>
29*5e7646d2SAndroid Build Coastguard Worker #    define CUPS_SOCAST
30*5e7646d2SAndroid Build Coastguard Worker #  endif /* _WIN32 */
31*5e7646d2SAndroid Build Coastguard Worker 
32*5e7646d2SAndroid Build Coastguard Worker #  if defined(__APPLE__) && !defined(_SOCKLEN_T)
33*5e7646d2SAndroid Build Coastguard Worker /*
34*5e7646d2SAndroid Build Coastguard Worker  * macOS 10.2.x does not define socklen_t, and in fact uses an int instead of
35*5e7646d2SAndroid Build Coastguard Worker  * unsigned type for length values...
36*5e7646d2SAndroid Build Coastguard Worker  */
37*5e7646d2SAndroid Build Coastguard Worker 
38*5e7646d2SAndroid Build Coastguard Worker typedef int socklen_t;
39*5e7646d2SAndroid Build Coastguard Worker #  endif /* __APPLE__ && !_SOCKLEN_T */
40*5e7646d2SAndroid Build Coastguard Worker 
41*5e7646d2SAndroid Build Coastguard Worker #  ifndef _WIN32
42*5e7646d2SAndroid Build Coastguard Worker #    include <net/if.h>
43*5e7646d2SAndroid Build Coastguard Worker #    include <resolv.h>
44*5e7646d2SAndroid Build Coastguard Worker #    ifdef HAVE_GETIFADDRS
45*5e7646d2SAndroid Build Coastguard Worker #      include <ifaddrs.h>
46*5e7646d2SAndroid Build Coastguard Worker #    else
47*5e7646d2SAndroid Build Coastguard Worker #      include <sys/ioctl.h>
48*5e7646d2SAndroid Build Coastguard Worker #      ifdef HAVE_SYS_SOCKIO_H
49*5e7646d2SAndroid Build Coastguard Worker #        include <sys/sockio.h>
50*5e7646d2SAndroid Build Coastguard Worker #      endif /* HAVE_SYS_SOCKIO_H */
51*5e7646d2SAndroid Build Coastguard Worker #    endif /* HAVE_GETIFADDRS */
52*5e7646d2SAndroid Build Coastguard Worker #  endif /* !_WIN32 */
53*5e7646d2SAndroid Build Coastguard Worker 
54*5e7646d2SAndroid Build Coastguard Worker 
55*5e7646d2SAndroid Build Coastguard Worker /*
56*5e7646d2SAndroid Build Coastguard Worker  * C++ magic...
57*5e7646d2SAndroid Build Coastguard Worker  */
58*5e7646d2SAndroid Build Coastguard Worker 
59*5e7646d2SAndroid Build Coastguard Worker #  ifdef __cplusplus
60*5e7646d2SAndroid Build Coastguard Worker extern "C" {
61*5e7646d2SAndroid Build Coastguard Worker #  endif /* __cplusplus */
62*5e7646d2SAndroid Build Coastguard Worker 
63*5e7646d2SAndroid Build Coastguard Worker 
64*5e7646d2SAndroid Build Coastguard Worker /*
65*5e7646d2SAndroid Build Coastguard Worker  * Some OS's don't have getifaddrs() and freeifaddrs()...
66*5e7646d2SAndroid Build Coastguard Worker  */
67*5e7646d2SAndroid Build Coastguard Worker 
68*5e7646d2SAndroid Build Coastguard Worker #  if !defined(_WIN32) && !defined(HAVE_GETIFADDRS)
69*5e7646d2SAndroid Build Coastguard Worker #    ifdef ifa_dstaddr
70*5e7646d2SAndroid Build Coastguard Worker #      undef ifa_dstaddr
71*5e7646d2SAndroid Build Coastguard Worker #    endif /* ifa_dstaddr */
72*5e7646d2SAndroid Build Coastguard Worker #    ifndef ifr_netmask
73*5e7646d2SAndroid Build Coastguard Worker #      define ifr_netmask ifr_addr
74*5e7646d2SAndroid Build Coastguard Worker #    endif /* !ifr_netmask */
75*5e7646d2SAndroid Build Coastguard Worker 
76*5e7646d2SAndroid Build Coastguard Worker struct ifaddrs				/**** Interface Structure ****/
77*5e7646d2SAndroid Build Coastguard Worker {
78*5e7646d2SAndroid Build Coastguard Worker   struct ifaddrs	*ifa_next;	/* Next interface in list */
79*5e7646d2SAndroid Build Coastguard Worker   char			*ifa_name;	/* Name of interface */
80*5e7646d2SAndroid Build Coastguard Worker   unsigned int		ifa_flags;	/* Flags (up, point-to-point, etc.) */
81*5e7646d2SAndroid Build Coastguard Worker   struct sockaddr	*ifa_addr,	/* Network address */
82*5e7646d2SAndroid Build Coastguard Worker 			*ifa_netmask;	/* Address mask */
83*5e7646d2SAndroid Build Coastguard Worker   union
84*5e7646d2SAndroid Build Coastguard Worker   {
85*5e7646d2SAndroid Build Coastguard Worker     struct sockaddr	*ifu_broadaddr;	/* Broadcast address of this interface. */
86*5e7646d2SAndroid Build Coastguard Worker     struct sockaddr	*ifu_dstaddr;	/* Point-to-point destination address. */
87*5e7646d2SAndroid Build Coastguard Worker   } ifa_ifu;
88*5e7646d2SAndroid Build Coastguard Worker 
89*5e7646d2SAndroid Build Coastguard Worker   void			*ifa_data;	/* Interface statistics */
90*5e7646d2SAndroid Build Coastguard Worker };
91*5e7646d2SAndroid Build Coastguard Worker 
92*5e7646d2SAndroid Build Coastguard Worker #    ifndef ifa_broadaddr
93*5e7646d2SAndroid Build Coastguard Worker #      define ifa_broadaddr ifa_ifu.ifu_broadaddr
94*5e7646d2SAndroid Build Coastguard Worker #    endif /* !ifa_broadaddr */
95*5e7646d2SAndroid Build Coastguard Worker #    ifndef ifa_dstaddr
96*5e7646d2SAndroid Build Coastguard Worker #      define ifa_dstaddr ifa_ifu.ifu_dstaddr
97*5e7646d2SAndroid Build Coastguard Worker #    endif /* !ifa_dstaddr */
98*5e7646d2SAndroid Build Coastguard Worker 
99*5e7646d2SAndroid Build Coastguard Worker extern int	_cups_getifaddrs(struct ifaddrs **addrs) _CUPS_PRIVATE;
100*5e7646d2SAndroid Build Coastguard Worker #    define getifaddrs _cups_getifaddrs
101*5e7646d2SAndroid Build Coastguard Worker extern void	_cups_freeifaddrs(struct ifaddrs *addrs) _CUPS_PRIVATE;
102*5e7646d2SAndroid Build Coastguard Worker #    define freeifaddrs _cups_freeifaddrs
103*5e7646d2SAndroid Build Coastguard Worker #  endif /* !_WIN32 && !HAVE_GETIFADDRS */
104*5e7646d2SAndroid Build Coastguard Worker 
105*5e7646d2SAndroid Build Coastguard Worker 
106*5e7646d2SAndroid Build Coastguard Worker /*
107*5e7646d2SAndroid Build Coastguard Worker  * C++ magic...
108*5e7646d2SAndroid Build Coastguard Worker  */
109*5e7646d2SAndroid Build Coastguard Worker 
110*5e7646d2SAndroid Build Coastguard Worker #  ifdef __cplusplus
111*5e7646d2SAndroid Build Coastguard Worker }
112*5e7646d2SAndroid Build Coastguard Worker #  endif /* __cplusplus */
113*5e7646d2SAndroid Build Coastguard Worker 
114*5e7646d2SAndroid Build Coastguard Worker #endif /* !_CUPS_GETIFADDRS_INTERNAL_H_ */
115