1 /*-------------------------------------------------------------------------
2  *
3  * ip.h
4  *	  Definitions for IPv6-aware network access.
5  *
6  * These definitions are used by both frontend and backend code.  Be careful
7  * what you include here!
8  *
9  * Copyright (c) 2003-2016, PostgreSQL Global Development Group
10  *
11  * src/include/libpq/ip.h
12  *
13  *-------------------------------------------------------------------------
14  */
15 #ifndef IP_H
16 #define IP_H
17 
18 #include "getaddrinfo.h"		/* pgrminclude ignore */
19 #include "libpq/pqcomm.h"		/* pgrminclude ignore */
20 
21 
22 #ifdef	HAVE_UNIX_SOCKETS
23 #define IS_AF_UNIX(fam) ((fam) == AF_UNIX)
24 #else
25 #define IS_AF_UNIX(fam) (0)
26 #endif
27 
28 typedef void (*PgIfAddrCallback) (struct sockaddr * addr,
29 											  struct sockaddr * netmask,
30 											  void *cb_data);
31 
32 extern int pg_getaddrinfo_all(const char *hostname, const char *servname,
33 				   const struct addrinfo * hintp,
34 				   struct addrinfo ** result);
35 extern void pg_freeaddrinfo_all(int hint_ai_family, struct addrinfo * ai);
36 
37 extern int pg_getnameinfo_all(const struct sockaddr_storage * addr, int salen,
38 				   char *node, int nodelen,
39 				   char *service, int servicelen,
40 				   int flags);
41 
42 extern int pg_range_sockaddr(const struct sockaddr_storage * addr,
43 				  const struct sockaddr_storage * netaddr,
44 				  const struct sockaddr_storage * netmask);
45 
46 extern int pg_sockaddr_cidr_mask(struct sockaddr_storage * mask,
47 					  char *numbits, int family);
48 
49 extern int	pg_foreach_ifaddr(PgIfAddrCallback callback, void *cb_data);
50 
51 #endif   /* IP_H */
52