xref: /plan9/sys/include/ape/netdb.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1*219b2ee8SDavid du Colombier #ifndef __NETDB_H__
2*219b2ee8SDavid du Colombier #define __NETDB_H__
3*219b2ee8SDavid du Colombier 
4*219b2ee8SDavid du Colombier #ifndef _BSD_EXTENSION
5*219b2ee8SDavid du Colombier     This header file is an extension to ANSI/POSIX
6*219b2ee8SDavid du Colombier #endif
7*219b2ee8SDavid du Colombier 
8*219b2ee8SDavid du Colombier #pragma lib "/$M/lib/ape/libbsd.a"
9*219b2ee8SDavid du Colombier 
10*219b2ee8SDavid du Colombier /*-
11*219b2ee8SDavid du Colombier  * Copyright (c) 1980, 1983, 1988 Regents of the University of California.
12*219b2ee8SDavid du Colombier  * All rights reserved.
13*219b2ee8SDavid du Colombier  *
14*219b2ee8SDavid du Colombier  * Redistribution and use in source and binary forms are permitted
15*219b2ee8SDavid du Colombier  * provided that: (1) source distributions retain this entire copyright
16*219b2ee8SDavid du Colombier  * notice and comment, and (2) distributions including binaries display
17*219b2ee8SDavid du Colombier  * the following acknowledgement:  ``This product includes software
18*219b2ee8SDavid du Colombier  * developed by the University of California, Berkeley and its contributors''
19*219b2ee8SDavid du Colombier  * in the documentation or other materials provided with the distribution
20*219b2ee8SDavid du Colombier  * and in all advertising materials mentioning features or use of this
21*219b2ee8SDavid du Colombier  * software. Neither the name of the University nor the names of its
22*219b2ee8SDavid du Colombier  * contributors may be used to endorse or promote products derived
23*219b2ee8SDavid du Colombier  * from this software without specific prior written permission.
24*219b2ee8SDavid du Colombier  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
25*219b2ee8SDavid du Colombier  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
26*219b2ee8SDavid du Colombier  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27*219b2ee8SDavid du Colombier  *
28*219b2ee8SDavid du Colombier  *	@(#)netdb.h	5.11 (Berkeley) 5/21/90
29*219b2ee8SDavid du Colombier  */
30*219b2ee8SDavid du Colombier 
31*219b2ee8SDavid du Colombier #ifdef __cplusplus
32*219b2ee8SDavid du Colombier extern "C" {
33*219b2ee8SDavid du Colombier #endif
34*219b2ee8SDavid du Colombier 
35*219b2ee8SDavid du Colombier /*
36*219b2ee8SDavid du Colombier  * Structures returned by network data base library.  All addresses are
37*219b2ee8SDavid du Colombier  * supplied in host order, and returned in network order (suitable for
38*219b2ee8SDavid du Colombier  * use in system calls).
39*219b2ee8SDavid du Colombier  */
40*219b2ee8SDavid du Colombier struct	hostent {
41*219b2ee8SDavid du Colombier 	char	*h_name;	/* official name of host */
42*219b2ee8SDavid du Colombier 	char	**h_aliases;	/* alias list */
43*219b2ee8SDavid du Colombier 	int	h_addrtype;	/* host address type */
44*219b2ee8SDavid du Colombier 	int	h_length;	/* length of address */
45*219b2ee8SDavid du Colombier 	char	**h_addr_list;	/* list of addresses from name server */
46*219b2ee8SDavid du Colombier #define	h_addr	h_addr_list[0]	/* address, for backward compatiblity */
47*219b2ee8SDavid du Colombier };
48*219b2ee8SDavid du Colombier 
49*219b2ee8SDavid du Colombier /*
50*219b2ee8SDavid du Colombier  * Assumption here is that a network number
51*219b2ee8SDavid du Colombier  * fits in 32 bits -- probably a poor one.
52*219b2ee8SDavid du Colombier  */
53*219b2ee8SDavid du Colombier struct	netent {
54*219b2ee8SDavid du Colombier 	char		*n_name;	/* official name of net */
55*219b2ee8SDavid du Colombier 	char		**n_aliases;	/* alias list */
56*219b2ee8SDavid du Colombier 	int		n_addrtype;	/* net address type */
57*219b2ee8SDavid du Colombier 	unsigned long	n_net;		/* network # */
58*219b2ee8SDavid du Colombier };
59*219b2ee8SDavid du Colombier 
60*219b2ee8SDavid du Colombier struct	servent {
61*219b2ee8SDavid du Colombier 	char	*s_name;	/* official service name */
62*219b2ee8SDavid du Colombier 	char	**s_aliases;	/* alias list */
63*219b2ee8SDavid du Colombier 	int	s_port;		/* port # */
64*219b2ee8SDavid du Colombier 	char	*s_proto;	/* protocol to use */
65*219b2ee8SDavid du Colombier };
66*219b2ee8SDavid du Colombier 
67*219b2ee8SDavid du Colombier struct	protoent {
68*219b2ee8SDavid du Colombier 	char	*p_name;	/* official protocol name */
69*219b2ee8SDavid du Colombier 	char	**p_aliases;	/* alias list */
70*219b2ee8SDavid du Colombier 	int	p_proto;	/* protocol # */
71*219b2ee8SDavid du Colombier };
72*219b2ee8SDavid du Colombier 
73*219b2ee8SDavid du Colombier /* from 4.0 RPCSRC */
74*219b2ee8SDavid du Colombier struct rpcent {
75*219b2ee8SDavid du Colombier 	char	*r_name;	/* name of server for this rpc program */
76*219b2ee8SDavid du Colombier 	char	**r_aliases;	/* alias list */
77*219b2ee8SDavid du Colombier 	int	r_number;	/* rpc program number */
78*219b2ee8SDavid du Colombier };
79*219b2ee8SDavid du Colombier 
80*219b2ee8SDavid du Colombier extern struct hostent	*gethostbyname(const char *),
81*219b2ee8SDavid du Colombier 			*gethostbyaddr(const void *, int, int),
82*219b2ee8SDavid du Colombier 			*gethostent(void);
83*219b2ee8SDavid du Colombier extern struct netent	*getnetbyname(const char *),
84*219b2ee8SDavid du Colombier 			*getnetbyaddr(long, int),
85*219b2ee8SDavid du Colombier 			*getnetent(void);
86*219b2ee8SDavid du Colombier extern struct servent	*getservbyname(const char *, const char *),
87*219b2ee8SDavid du Colombier 			*getservbyport(int, const char *),
88*219b2ee8SDavid du Colombier 			*getservent(void);
89*219b2ee8SDavid du Colombier extern struct protoent	*getprotobyname(const char *),
90*219b2ee8SDavid du Colombier 			*getprotobynumber(int),
91*219b2ee8SDavid du Colombier 			*getprotoent(void);
92*219b2ee8SDavid du Colombier extern struct rpcent	*getrpcbyname(const char *),
93*219b2ee8SDavid du Colombier 			*getrpcbynumber(int),
94*219b2ee8SDavid du Colombier 			*getrpcent(void);
95*219b2ee8SDavid du Colombier extern void sethostent(int),  endhostent(void),
96*219b2ee8SDavid du Colombier 	    setnetent(int),   endnetent(void),
97*219b2ee8SDavid du Colombier 	    setservent(int),  endservent(void),
98*219b2ee8SDavid du Colombier 	    setprotoent(int), endprotoent(void),
99*219b2ee8SDavid du Colombier 	    setrpcent(int),   endrpcent(void);
100*219b2ee8SDavid du Colombier 
101*219b2ee8SDavid du Colombier /*
102*219b2ee8SDavid du Colombier  * Error return codes from gethostbyname() and gethostbyaddr()
103*219b2ee8SDavid du Colombier  * (left in extern int h_errno).
104*219b2ee8SDavid du Colombier  */
105*219b2ee8SDavid du Colombier extern int h_errno;
106*219b2ee8SDavid du Colombier extern void herror(const char *);
107*219b2ee8SDavid du Colombier extern char *hstrerror(int);
108*219b2ee8SDavid du Colombier 
109*219b2ee8SDavid du Colombier #define	HOST_NOT_FOUND	1 /* Authoritative Answer Host not found */
110*219b2ee8SDavid du Colombier #define	TRY_AGAIN	2 /* Non-Authoritive Host not found, or SERVERFAIL */
111*219b2ee8SDavid du Colombier #define	NO_RECOVERY	3 /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
112*219b2ee8SDavid du Colombier #define	NO_DATA		4 /* Valid name, no data record of requested type */
113*219b2ee8SDavid du Colombier #define	NO_ADDRESS	NO_DATA		/* no address, look for MX record */
114*219b2ee8SDavid du Colombier 
115*219b2ee8SDavid du Colombier #define __HOST_SVC_NOT_AVAIL 99		/* libc internal use only */
116*219b2ee8SDavid du Colombier 
117*219b2ee8SDavid du Colombier #ifdef __cplusplus
118*219b2ee8SDavid du Colombier }
119*219b2ee8SDavid du Colombier #endif
120*219b2ee8SDavid du Colombier 
121*219b2ee8SDavid du Colombier #endif /* !__NETDB_H__ */
122