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