xref: /aosp_15_r20/external/musl/src/network/lookup.h (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #ifndef LOOKUP_H
2*c9945492SAndroid Build Coastguard Worker #define LOOKUP_H
3*c9945492SAndroid Build Coastguard Worker 
4*c9945492SAndroid Build Coastguard Worker #include <stdint.h>
5*c9945492SAndroid Build Coastguard Worker #include <stddef.h>
6*c9945492SAndroid Build Coastguard Worker #include <features.h>
7*c9945492SAndroid Build Coastguard Worker #include <netinet/in.h>
8*c9945492SAndroid Build Coastguard Worker #include <netdb.h>
9*c9945492SAndroid Build Coastguard Worker 
10*c9945492SAndroid Build Coastguard Worker struct aibuf {
11*c9945492SAndroid Build Coastguard Worker 	struct addrinfo ai;
12*c9945492SAndroid Build Coastguard Worker 	union sa {
13*c9945492SAndroid Build Coastguard Worker 		struct sockaddr_in sin;
14*c9945492SAndroid Build Coastguard Worker 		struct sockaddr_in6 sin6;
15*c9945492SAndroid Build Coastguard Worker 	} sa;
16*c9945492SAndroid Build Coastguard Worker 	volatile int lock[1];
17*c9945492SAndroid Build Coastguard Worker 	short slot, ref;
18*c9945492SAndroid Build Coastguard Worker };
19*c9945492SAndroid Build Coastguard Worker 
20*c9945492SAndroid Build Coastguard Worker struct address {
21*c9945492SAndroid Build Coastguard Worker 	int family;
22*c9945492SAndroid Build Coastguard Worker 	unsigned scopeid;
23*c9945492SAndroid Build Coastguard Worker 	uint8_t addr[16];
24*c9945492SAndroid Build Coastguard Worker 	int sortkey;
25*c9945492SAndroid Build Coastguard Worker };
26*c9945492SAndroid Build Coastguard Worker 
27*c9945492SAndroid Build Coastguard Worker struct service {
28*c9945492SAndroid Build Coastguard Worker 	uint16_t port;
29*c9945492SAndroid Build Coastguard Worker 	unsigned char proto, socktype;
30*c9945492SAndroid Build Coastguard Worker };
31*c9945492SAndroid Build Coastguard Worker 
32*c9945492SAndroid Build Coastguard Worker #define MAXNS 3
33*c9945492SAndroid Build Coastguard Worker 
34*c9945492SAndroid Build Coastguard Worker struct resolvconf {
35*c9945492SAndroid Build Coastguard Worker 	struct address ns[MAXNS];
36*c9945492SAndroid Build Coastguard Worker 	unsigned nns, attempts, ndots;
37*c9945492SAndroid Build Coastguard Worker 	unsigned timeout;
38*c9945492SAndroid Build Coastguard Worker };
39*c9945492SAndroid Build Coastguard Worker 
40*c9945492SAndroid Build Coastguard Worker /* The limit of 48 results is a non-sharp bound on the number of addresses
41*c9945492SAndroid Build Coastguard Worker  * that can fit in one 512-byte DNS packet full of v4 results and a second
42*c9945492SAndroid Build Coastguard Worker  * packet full of v6 results. Due to headers, the actual limit is lower. */
43*c9945492SAndroid Build Coastguard Worker #define MAXADDRS 48
44*c9945492SAndroid Build Coastguard Worker #define MAXSERVS 2
45*c9945492SAndroid Build Coastguard Worker 
46*c9945492SAndroid Build Coastguard Worker hidden int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int proto, int socktype, int flags);
47*c9945492SAndroid Build Coastguard Worker hidden int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags);
48*c9945492SAndroid Build Coastguard Worker hidden int __lookup_ipliteral(struct address buf[static 1], const char *name, int family);
49*c9945492SAndroid Build Coastguard Worker 
50*c9945492SAndroid Build Coastguard Worker hidden int __get_resolv_conf(struct resolvconf *, char *, size_t);
51*c9945492SAndroid Build Coastguard Worker hidden int __res_msend_rc(int, const unsigned char *const *, const int *, unsigned char *const *, int *, int, const struct resolvconf *);
52*c9945492SAndroid Build Coastguard Worker 
53*c9945492SAndroid Build Coastguard Worker hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *, int), void *);
54*c9945492SAndroid Build Coastguard Worker 
55*c9945492SAndroid Build Coastguard Worker #endif
56