Add headers for OpenSolaris extensions that glibc implements
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / solaris2 / kopensolaris-gnu / sys / door.h
1 /* Declarations of privilege functions and types.
2    Copyright (C) 2008 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, write to the Free
17    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
18    02111-1307 USA.  */
19
20 #ifndef _SYS_DOOR_H
21 #define _SYS_DOOR_H
22
23 #include <sys/types.h>
24 #include <sys/isa_defs.h>
25
26 #define DOOR_CREATE     0
27 #define DOOR_REVOKE     1
28 #define DOOR_INFO       2
29 #define DOOR_CALL       3
30 #define DOOR_BIND       6
31 #define DOOR_UNBIND     7
32 #define DOOR_UNREFSYS   8
33 #define DOOR_UCRED      9
34 #define DOOR_RETURN     10
35 #define DOOR_GETPARAM   11
36 #define DOOR_SETPARAM   12
37
38 #define DOOR_INVAL      -1
39 #define DOOR_UNREF_DATA ((void *)1)
40
41 #define DOOR_QUERY      -2
42
43 #define DOOR_UNREF              0x01
44 #define DOOR_PRIVATE            0x02
45 #define DOOR_UNREF_MULTI        0x10
46 #define DOOR_REFUSE_DESC        0x40
47 #define DOOR_NO_CANCEL          0x80
48
49 #define DOOR_LOCAL      0x04
50 #define DOOR_REVOKED    0x08
51 #define DOOR_IS_UNREF   0x20
52
53 #define DOOR_CREATE_MASK        (DOOR_UNREF | DOOR_PRIVATE | \
54         DOOR_UNREF_MULTI | DOOR_REFUSE_DESC | DOOR_NO_CANCEL)
55 #define DOOR_KI_CREATE_MASK     (DOOR_UNREF | DOOR_UNREF_MULTI)
56
57 #define DOOR_ATTR_MASK  (DOOR_CREATE_MASK | DOOR_LOCAL | DOOR_REVOKED | \
58         DOOR_IS_UNREF)
59
60 #define DOOR_DESCRIPTOR 0x10000
61 #define DOOR_RELEASE    0x40000
62 #define DOOR_DELAY      0x80000
63 #define DOOR_UNREF_ACTIVE       0x100000
64
65 #define DOOR_PARAM_DESC_MAX     1
66 #define DOOR_PARAM_DATA_MAX     2
67 #define DOOR_PARAM_DATA_MIN     3
68
69 typedef unsigned long long door_ptr_t;
70 typedef unsigned int door_attr_t;
71 typedef unsigned long long door_id_t;
72
73 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
74 # pragma pack(4)
75 #endif
76
77 typedef struct door_info
78   {
79         pid_t di_target;
80         door_ptr_t di_proc;
81         door_ptr_t di_data;
82         door_attr_t di_attributes;
83         door_id_t di_uniquifier;
84         int di_resv[4];
85   } door_info_t;
86
87 typedef struct door_desc
88   {
89         door_attr_t d_attributes;
90         union
91           {
92                 struct
93                   {
94                         int d_descriptor;
95                         door_id_t d_id;
96                   } d_desc;
97                 int d_resv[5];
98           } d_data;
99 } door_desc_t;
100
101 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
102 # pragma pack()
103 #endif
104
105 typedef struct door_cred
106   {
107         uid_t dc_euid;
108         gid_t dc_egid;
109         uid_t dc_ruid;
110         gid_t dc_rgid;
111         pid_t dc_pid;
112         int dc_resv[4];
113   } door_cred_t;
114
115 typedef struct door_arg
116   {
117         char *data_ptr;
118         size_t data_size;
119         door_desc_t *desc_ptr;
120         unsigned int desc_num;
121         char *rbuf;
122         size_t rsize;
123   } door_arg_t;
124
125 struct door_results
126   {
127         void *cookie;
128         char *data_ptr;
129         size_t data_size;
130         door_desc_t *desc_ptr;
131         size_t desc_num;
132         void (*pc)(void);
133         int nservers;
134         door_info_t *door_info;
135   };
136
137 typedef struct door_return_desc
138   {
139     door_desc_t *desc_ptr;
140     unsigned int desc_num;
141   } door_return_desc_t;
142
143 #endif /* _SYS_DOOR_H */