/* * getifaddrs definitions for CUPS. * * Copyright 2007-2018 by Apple Inc. * Copyright 1997-2007 by Easy Software Products, all rights reserved. * * Licensed under Apache License v2.0. See the file "LICENSE" for more * information. */ #ifndef _CUPS_GETIFADDRS_INTERNAL_H_ # define _CUPS_GETIFADDRS_INTERNAL_H_ /* * Include necessary headers... */ # include "config.h" # ifdef _WIN32 # define _WINSOCK_DEPRECATED_NO_WARNINGS 1 # include # include # define CUPS_SOCAST (const char *) # else # include # include # include # define CUPS_SOCAST # endif /* _WIN32 */ # if defined(__APPLE__) && !defined(_SOCKLEN_T) /* * macOS 10.2.x does not define socklen_t, and in fact uses an int instead of * unsigned type for length values... */ typedef int socklen_t; # endif /* __APPLE__ && !_SOCKLEN_T */ # ifndef _WIN32 # include # include # ifdef HAVE_GETIFADDRS # include # else # include # ifdef HAVE_SYS_SOCKIO_H # include # endif /* HAVE_SYS_SOCKIO_H */ # endif /* HAVE_GETIFADDRS */ # endif /* !_WIN32 */ /* * C++ magic... */ # ifdef __cplusplus extern "C" { # endif /* __cplusplus */ /* * Some OS's don't have getifaddrs() and freeifaddrs()... */ # if !defined(_WIN32) && !defined(HAVE_GETIFADDRS) # ifdef ifa_dstaddr # undef ifa_dstaddr # endif /* ifa_dstaddr */ # ifndef ifr_netmask # define ifr_netmask ifr_addr # endif /* !ifr_netmask */ struct ifaddrs /**** Interface Structure ****/ { struct ifaddrs *ifa_next; /* Next interface in list */ char *ifa_name; /* Name of interface */ unsigned int ifa_flags; /* Flags (up, point-to-point, etc.) */ struct sockaddr *ifa_addr, /* Network address */ *ifa_netmask; /* Address mask */ union { struct sockaddr *ifu_broadaddr; /* Broadcast address of this interface. */ struct sockaddr *ifu_dstaddr; /* Point-to-point destination address. */ } ifa_ifu; void *ifa_data; /* Interface statistics */ }; # ifndef ifa_broadaddr # define ifa_broadaddr ifa_ifu.ifu_broadaddr # endif /* !ifa_broadaddr */ # ifndef ifa_dstaddr # define ifa_dstaddr ifa_ifu.ifu_dstaddr # endif /* !ifa_dstaddr */ extern int _cups_getifaddrs(struct ifaddrs **addrs) _CUPS_PRIVATE; # define getifaddrs _cups_getifaddrs extern void _cups_freeifaddrs(struct ifaddrs *addrs) _CUPS_PRIVATE; # define freeifaddrs _cups_freeifaddrs # endif /* !_WIN32 && !HAVE_GETIFADDRS */ /* * C++ magic... */ # ifdef __cplusplus } # endif /* __cplusplus */ #endif /* !_CUPS_GETIFADDRS_INTERNAL_H_ */