[PATCH 2/2] Adds some resolv functionality (XCC)
[akaros.git] / user / bsd / priv.h
1 /* 
2  * This file is part of the UCB release of Plan 9. It is subject to the license
3  * terms in the LICENSE file found in the top-level directory of this
4  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
5  * part of the UCB release of Plan 9, including this file, may be copied,
6  * modified, propagated, or distributed except according to the terms contained
7  * in the LICENSE file.
8  */
9 #ifndef BSD_PRIV_H
10 #define BSD_PRIV_H
11
12 #include <parlib.h>
13
14 #include <sys/types.h>
15 #include <sys/stat.h>
16 #include <unistd.h>
17 #include <sys/socket.h>
18
19 #include <netinet/in.h>
20 #include <netdb.h>
21
22 __BEGIN_DECLS
23
24 typedef struct Rock Rock;
25
26 enum
27 {
28         Ctlsize=        128,
29
30         /* states */
31         Sopen=  0,
32         Sbound,
33         Sconnected,
34
35         /* types of name */
36         Tsys=   0,
37         Tip,
38         Tdom,
39 };
40
41 /*
42  *  since BSD programs expect to perform both control and data functions
43  *  through a single fd, we need to hide enough info under a rock to
44  *  be able to open the control file when we need it.
45  */
46 struct Rock
47 {
48         Rock            *next;
49         unsigned long   dev;            /* inode & dev of data file */
50         unsigned long   inode;          /* ... */
51         int             domain;         /* from socket call */
52         int             stype;          /* ... */
53         int             protocol;       /* ... */
54         struct sockaddr addr;           /* address from bind */
55         int             reserved;       /* use a priveledged port # (< 1024) */
56         struct sockaddr raddr;          /* peer address */
57         char            ctl[Ctlsize];   /* name of control file (if any) */
58         int             other;          /* fd of the remote end for Unix domain */
59 };
60
61 extern Rock*    _sock_findrock(int, struct stat*);
62 extern Rock*    _sock_newrock(int);
63 extern void     _sock_srvname(char*, char*);
64 extern int      _sock_srv(char*, int);
65 extern int      _sock_data(int, char*, int, int, int, Rock**);
66 extern int      _sock_ipattr(const char*);
67 extern void     _sock_ingetaddr(Rock*, struct sockaddr_in*, int*, char*);
68
69 extern void     _syserrno(void);
70
71 __END_DECLS
72
73 #endif /* BSD_PRIV_H */