Coda Distributed File System
rpc2_addrinfo.h
Go to the documentation of this file.
1/* BLURB lgpl
2
3 Coda File System
4 Release 5
5
6 Copyright (c) 2003 Carnegie Mellon University
7 Additional copyrights listed below
8
9This code is distributed "AS IS" without warranty of any kind under
10the terms of the GNU Library General Public Licence Version 2, as
11shown in the file LICENSE. The technical and financial contributors to
12Coda are listed in the file CREDITS.
13
14 Additional copyrights
15
16#*/
17
18#ifndef _RPC2_ADDRINFO_H_
19#define _RPC2_ADDRINFO_H_
20
21#include <sys/types.h>
22#include <netinet/in.h>
23
24/* struct addrinfo wrappers, by using our own versions we can support systems
25 * that don't have these useful functions yet and can avoid allocation problems
26 * when copying the struct around. But to simplify things we should definitely
27 * try to keep the layout identical if the system already has getaddrinfo. */
33 size_t ai_addrlen;
34 struct sockaddr *ai_addr;
37 int ai_priority; /* used by coda_getaddrinfo when looking up SRV records */
39};
40
41/* These functions match their non RPC2_ counterparts */
42int RPC2_getaddrinfo(const char *node, const char *service,
43 const struct RPC2_addrinfo *hints,
44 struct RPC2_addrinfo **res);
45void RPC2_freeaddrinfo(struct RPC2_addrinfo *res);
46const char *RPC2_gai_strerror(int errcode);
47
48/* flag bits for ai_flags */
49#define RPC2_AI_PASSIVE 0x0001
50#define RPC2_AI_CANONNAME 0x0002
51#define RPC2_AI_NUMERICHOST 0x0004
52
53/* errorcodes returned by RPC2_getaddrinfo */
54#define RPC2_EAI_BADFLAGS -1
55#define RPC2_EAI_NONAME -2
56#define RPC2_EAI_AGAIN -3
57#define RPC2_EAI_FAIL -4
58#define RPC2_EAI_FAMILY -6
59#define RPC2_EAI_SOCKTYPE -7
60#define RPC2_EAI_SERVICE -8
61#define RPC2_EAI_MEMORY -10
62#define RPC2_EAI_SYSTEM -11
63/* #define RPC2_EAI_NODATA -3 ** deprecated by RFC3493 */
64/* #define RPC2_EAI_ADDRFAMILY -9 ** deprecated by RFC3493 */
65
66/* copyaddrinfo is in my opinion missing from the getaddrinfo suite */
67/* cmpaddrinfo tests whether 'host' matches any of the entries in 'node' */
68struct RPC2_addrinfo *RPC2_allocaddrinfo(const struct sockaddr *addr,
69 size_t addrlen, int socktype,
70 int protocol);
71struct RPC2_addrinfo *RPC2_copyaddrinfo(const struct RPC2_addrinfo *node);
72int RPC2_cmpaddrinfo(const struct RPC2_addrinfo *node,
73 const struct RPC2_addrinfo *host);
74
75/* this one is inspired by inet_ntop, but this adds the portnumber to the
76 * output and only works for addrinfo structs. */
77void RPC2_formataddrinfo(const struct RPC2_addrinfo *host, char *buf,
78 size_t buflen);
79
80/* The maximum size that the previous buffer can be,
81 * '[' + inet6 addr + ']:' + portnumber + '\0' */
82#define RPC2_ADDRSTRLEN (1 + 46 + 2 + 10 + 1)
83
84#endif /* _RPC2_ADDRINFO_H */
int RPC2_cmpaddrinfo(const struct RPC2_addrinfo *node, const struct RPC2_addrinfo *host)
Definition: rpc2_addrinfo.c:257
void RPC2_formataddrinfo(const struct RPC2_addrinfo *host, char *buf, size_t buflen)
Definition: rpc2_addrinfo.c:351
void RPC2_freeaddrinfo(struct RPC2_addrinfo *res)
Definition: rpc2_addrinfo.c:489
struct RPC2_addrinfo * RPC2_copyaddrinfo(const struct RPC2_addrinfo *node)
Definition: rpc2_addrinfo.c:222
const char * RPC2_gai_strerror(int errcode)
Definition: rpc2_addrinfo.c:501
int RPC2_getaddrinfo(const char *node, const char *service, const struct RPC2_addrinfo *hints, struct RPC2_addrinfo **res)
Definition: rpc2_addrinfo.c:359
struct RPC2_addrinfo * RPC2_allocaddrinfo(const struct sockaddr *addr, size_t addrlen, int socktype, int protocol)
Definition: rpc2_addrinfo.c:202
Definition: rpc2_addrinfo.h:28
struct sockaddr * ai_addr
Definition: rpc2_addrinfo.h:34
char * ai_canonname
Definition: rpc2_addrinfo.h:35
int ai_protocol
Definition: rpc2_addrinfo.h:32
int ai_priority
Definition: rpc2_addrinfo.h:37
struct RPC2_addrinfo * ai_next
Definition: rpc2_addrinfo.h:36
int ai_family
Definition: rpc2_addrinfo.h:30
int ai_flags
Definition: rpc2_addrinfo.h:29
int ai_weight
Definition: rpc2_addrinfo.h:38
int ai_socktype
Definition: rpc2_addrinfo.h:31
size_t ai_addrlen
Definition: rpc2_addrinfo.h:33