114 lines
2.7 KiB
C
114 lines
2.7 KiB
C
|
/*
|
||
|
* 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 <io.h>
|
||
|
# include <winsock2.h>
|
||
|
# define CUPS_SOCAST (const char *)
|
||
|
# else
|
||
|
# include <unistd.h>
|
||
|
# include <fcntl.h>
|
||
|
# include <sys/socket.h>
|
||
|
# 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 <net/if.h>
|
||
|
# include <resolv.h>
|
||
|
# ifdef HAVE_GETIFADDRS
|
||
|
# include <ifaddrs.h>
|
||
|
# else
|
||
|
# include <sys/ioctl.h>
|
||
|
# ifdef HAVE_SYS_SOCKIO_H
|
||
|
# include <sys/sockio.h>
|
||
|
# 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_ */
|