PCI: adds device-specific data pointer
[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 #include <parlib.h>
10
11 #include <sys/types.h>
12 #include <sys/stat.h>
13 #include <unistd.h>
14 #include <sys/socket.h>
15
16 #include <netinet/in.h>
17
18
19 typedef struct Rock Rock;
20
21 enum
22 {
23         Ctlsize=        128,
24
25         /* states */
26         Sopen=  0,
27         Sbound,
28         Sconnected,
29
30         /* types of name */
31         Tsys=   0,
32         Tip,
33         Tdom,
34 };
35
36 /*
37  *  since BSD programs expect to perform both control and data functions
38  *  through a single fd, we need to hide enough info under a rock to
39  *  be able to open the control file when we need it.
40  */
41 struct Rock
42 {
43         Rock            *next;
44         unsigned long   dev;            /* inode & dev of data file */
45         unsigned long   inode;          /* ... */
46         int             domain;         /* from socket call */
47         int             stype;          /* ... */
48         int             protocol;       /* ... */
49         struct sockaddr addr;           /* address from bind */
50         int             reserved;       /* use a priveledged port # (< 1024) */
51         struct sockaddr raddr;          /* peer address */
52         char            ctl[Ctlsize];   /* name of control file (if any) */
53         int             other;          /* fd of the remote end for Unix domain */
54 };
55
56 extern Rock*    _sock_findrock(int, struct stat*);
57 extern Rock*    _sock_newrock(int);
58 extern void     _sock_srvname(char*, char*);
59 extern int      _sock_srv(char*, int);
60 extern int      _sock_data(int, char*, int, int, int, Rock**);
61 extern int      _sock_ipattr(const char*);
62 extern void     _sock_ingetaddr(Rock*, struct sockaddr_in*, int*, char*);
63
64 extern void     _syserrno(void);