• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*--------------------------------------------------------------------*/
2 /*--- Solaris-specific kernel interface for the repository cache   ---*/
3 /*--- protocol.                             vki-solaris-repcache.h ---*/
4 /*--------------------------------------------------------------------*/
5 
6 /*
7    This file is part of Valgrind, a dynamic binary instrumentation
8    framework.
9 
10    Copyright (C) 2015-2015 Ivo Raisr
11       ivosh@ivosh.net
12 
13    This program is free software; you can redistribute it and/or
14    modify it under the terms of the GNU General Public License as
15    published by the Free Software Foundation; either version 2 of the
16    License, or (at your option) any later version.
17 
18    This program is distributed in the hope that it will be useful, but
19    WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
21    General Public License for more details.
22 
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
26    02111-1307, USA.
27 
28    The GNU General Public License is contained in the file COPYING.
29 */
30 
31 /* Copyright 2015-2015, Tomas Jedlicka <jedlickat@gmail.com>. */
32 
33 #ifndef __VKI_SOLARIS_REPCACHE_H
34 #define __VKI_SOLARIS_REPCACHE_H
35 
36 /* From <repcache_protocol.h> which is consolidation private. */
37 #define VKI_REPOSITORY_DOOR_BASEVER (('R' << 24) | ('e' << 16) | ('p' << 8))
38 
39 #if (SOLARIS_REPCACHE_PROTOCOL_VERSION == 21)
40 #define VKI_REPOSITORY_DOOR_VERSION (21 + VKI_REPOSITORY_DOOR_BASEVER)
41 enum vki_rep_protocol_requestid {
42    VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
43    VKI_REP_PROTOCOL_ENTITY_SETUP,
44    VKI_REP_PROTOCOL_ENTITY_NAME,
45    VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
46    VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
47    VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
48    VKI_REP_PROTOCOL_ENTITY_GET,
49    VKI_REP_PROTOCOL_ENTITY_UPDATE,
50    VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
51    VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
52    VKI_REP_PROTOCOL_ENTITY_DELETE,
53    VKI_REP_PROTOCOL_ENTITY_RESET,
54    VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
55    VKI_REP_PROTOCOL_ITER_SETUP,
56    VKI_REP_PROTOCOL_ITER_START,
57    VKI_REP_PROTOCOL_ITER_READ,
58    VKI_REP_PROTOCOL_ITER_READ_VALUE,
59    VKI_REP_PROTOCOL_ITER_RESET,
60    VKI_REP_PROTOCOL_ITER_TEARDOWN,
61    VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
62    VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
63    VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
64    VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
65    VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
66    VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
67    VKI_REP_PROTOCOL_PROPERTYGRP_SETUP_WAIT,
68    VKI_REP_PROTOCOL_PROPERTYGRP_TX_START,
69    VKI_REP_PROTOCOL_PROPERTYGRP_TX_COMMIT,
70    VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
71    VKI_REP_PROTOCOL_CLIENT_WAIT,
72    VKI_REP_PROTOCOL_BACKUP,
73    VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
74    VKI_REP_PROTOCOL_SWITCH,
75 };
76 #elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 23)
77 #define VKI_REPOSITORY_DOOR_VERSION (23 + VKI_REPOSITORY_DOOR_BASEVER)
78 enum vki_rep_protocol_requestid {
79    VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
80    VKI_REP_PROTOCOL_ENTITY_SETUP,
81    VKI_REP_PROTOCOL_ENTITY_NAME,
82    VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
83    VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
84    VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
85    VKI_REP_PROTOCOL_ENTITY_GET,
86    VKI_REP_PROTOCOL_ENTITY_UPDATE,
87    VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
88    VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
89    VKI_REP_PROTOCOL_ENTITY_DELETE,
90    VKI_REP_PROTOCOL_ENTITY_UNDELETE,
91    VKI_REP_PROTOCOL_ENTITY_REMOVE,
92    VKI_REP_PROTOCOL_ENTITY_DELCUST,
93    VKI_REP_PROTOCOL_BUNDLE_REMOVE,
94    VKI_REP_PROTOCOL_ENTITY_RESET,
95    VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
96    VKI_REP_PROTOCOL_ITER_SETUP,
97    VKI_REP_PROTOCOL_ITER_START,
98    VKI_REP_PROTOCOL_ITER_READ,
99    VKI_REP_PROTOCOL_ITER_READ_VALUE,
100    VKI_REP_PROTOCOL_ITER_RESET,
101    VKI_REP_PROTOCOL_ITER_TEARDOWN,
102    VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
103    VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
104    VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
105    VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
106    VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
107    VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
108    VKI_REP_PROTOCOL_PG_SETUP_WAIT,
109    VKI_REP_PROTOCOL_PG_TX_START,
110    VKI_REP_PROTOCOL_PG_TX_COMMIT,
111    VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
112    VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
113    VKI_REP_PROTOCOL_CLIENT_WAIT,
114    VKI_REP_PROTOCOL_BACKUP,
115    VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
116    VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
117    VKI_REP_PROTOCOL_SET_TX_DECORATION,
118    VKI_REP_PROTOCOL_SWITCH,
119    VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
120    VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
121    VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
122    VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
123    VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
124    VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
125    VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
126 };
127 #elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 25)
128 #define VKI_REPOSITORY_DOOR_VERSION (25 + VKI_REPOSITORY_DOOR_BASEVER)
129 enum vki_rep_protocol_requestid {
130    VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
131    VKI_REP_PROTOCOL_ENTITY_SETUP,
132    VKI_REP_PROTOCOL_ENTITY_NAME,
133    VKI_REP_PROTOCOL_ENTITY_FMRI,
134    VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
135    VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
136    VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
137    VKI_REP_PROTOCOL_ENTITY_GET_ROOT,
138    VKI_REP_PROTOCOL_ENTITY_GET,
139    VKI_REP_PROTOCOL_ENTITY_UPDATE,
140    VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
141    VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
142    VKI_REP_PROTOCOL_ENTITY_DELETE,
143    VKI_REP_PROTOCOL_ENTITY_UNDELETE,
144    VKI_REP_PROTOCOL_ENTITY_REMOVE,
145    VKI_REP_PROTOCOL_ENTITY_DELCUST,
146    VKI_REP_PROTOCOL_BUNDLE_REMOVE,
147    VKI_REP_PROTOCOL_ENTITY_RESET,
148    VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
149    VKI_REP_PROTOCOL_ITER_SETUP,
150    VKI_REP_PROTOCOL_ITER_START,
151    VKI_REP_PROTOCOL_ITER_READ,
152    VKI_REP_PROTOCOL_ITER_READ_VALUE,
153    VKI_REP_PROTOCOL_ITER_RESET,
154    VKI_REP_PROTOCOL_ITER_TEARDOWN,
155    VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
156    VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
157    VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
158    VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
159    VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
160    VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
161    VKI_REP_PROTOCOL_PG_SETUP_WAIT,
162    VKI_REP_PROTOCOL_PG_TX_START,
163    VKI_REP_PROTOCOL_PG_TX_COMMIT,
164    VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
165    VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
166    VKI_REP_PROTOCOL_CLIENT_WAIT,
167    VKI_REP_PROTOCOL_BACKUP,
168    VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
169    VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
170    VKI_REP_PROTOCOL_SET_TX_DECORATION,
171    VKI_REP_PROTOCOL_SWITCH,
172    VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
173    VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
174    VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
175    VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
176    VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
177    VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
178    VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
179 };
180 #elif (SOLARIS_REPCACHE_PROTOCOL_VERSION == 26)
181 #define VKI_REPOSITORY_DOOR_VERSION (26 + VKI_REPOSITORY_DOOR_BASEVER)
182 enum vki_rep_protocol_requestid {
183    VKI_REP_PROTOCOL_CLOSE = ('C' << 8),
184    VKI_REP_PROTOCOL_ENTITY_SETUP,
185    VKI_REP_PROTOCOL_ENTITY_NAME,
186    VKI_REP_PROTOCOL_ENTITY_FMRI,
187    VKI_REP_PROTOCOL_ENTITY_PARENT_TYPE,
188    VKI_REP_PROTOCOL_ENTITY_GET_CHILD,
189    VKI_REP_PROTOCOL_ENTITY_GET_PARENT,
190    VKI_REP_PROTOCOL_ENTITY_GET_ROOT,
191    VKI_REP_PROTOCOL_ENTITY_GET,
192    VKI_REP_PROTOCOL_ENTITY_UPDATE,
193    VKI_REP_PROTOCOL_ENTITY_CREATE_CHILD,
194    VKI_REP_PROTOCOL_ENTITY_CREATE_PG,
195    VKI_REP_PROTOCOL_ENTITY_DELETE,
196    VKI_REP_PROTOCOL_ENTITY_UNDELETE,
197    VKI_REP_PROTOCOL_ENTITY_REMOVE,
198    VKI_REP_PROTOCOL_ENTITY_DELCUST,
199    VKI_REP_PROTOCOL_BUNDLE_REMOVE,
200    VKI_REP_PROTOCOL_ENTITY_RESET,
201    VKI_REP_PROTOCOL_ENTITY_TEARDOWN,
202    VKI_REP_PROTOCOL_ITER_SETUP,
203    VKI_REP_PROTOCOL_ITER_START,
204    VKI_REP_PROTOCOL_ITER_READ,
205    VKI_REP_PROTOCOL_ITER_READ_VALUE,
206    VKI_REP_PROTOCOL_ITER_RESET,
207    VKI_REP_PROTOCOL_ITER_TEARDOWN,
208    VKI_REP_PROTOCOL_NEXT_SNAPLEVEL,
209    VKI_REP_PROTOCOL_SNAPSHOT_TAKE,
210    VKI_REP_PROTOCOL_SNAPSHOT_TAKE_NAMED,
211    VKI_REP_PROTOCOL_SNAPSHOT_ATTACH,
212    VKI_REP_PROTOCOL_PROPERTY_GET_TYPE,
213    VKI_REP_PROTOCOL_PROPERTY_GET_VALUE,
214    VKI_REP_PROTOCOL_PG_SETUP_WAIT,
215    VKI_REP_PROTOCOL_PG_TX_START,
216    VKI_REP_PROTOCOL_PG_TX_COMMIT,
217    VKI_REP_PROTOCOL_PROP_BUNDLE_REMOVE,
218    VKI_REP_PROTOCOL_CLIENT_ADD_NOTIFY,
219    VKI_REP_PROTOCOL_CLIENT_WAIT,
220    VKI_REP_PROTOCOL_BACKUP,
221    VKI_REP_PROTOCOL_SET_AUDIT_ANNOTATION,
222    VKI_REP_PROTOCOL_UNSET_AUDIT_ANNOTATION,
223    VKI_REP_PROTOCOL_SET_TX_DECORATION,
224    VKI_REP_PROTOCOL_SWITCH,
225    VKI_REP_PROTOCOL_DECORATION_GET_LAYER,
226    VKI_REP_PROTOCOL_DECORATION_GET_TYPE,
227    VKI_REP_PROTOCOL_DECORATION_GET_VALUE,
228    VKI_REP_PROTOCOL_DECORATION_GET_BUNDLE,
229    VKI_REP_PROTOCOL_ENTITY_INCONFLICT,
230    VKI_REP_PROTOCOL_ENTITY_IS_MASKED,
231    VKI_REP_PROTOCOL_CLIENT_REMOVE_NOTIFY,
232    VKI_REP_PROTOCOL_MAX_REQUEST
233 };
234 #else
235 #error Unsupported repcache protocol version
236 #endif
237 
238 #define VKI_REPOSITORY_DOOR_NAME "/system/volatile/repository_door"
239 #define VKI_REP_PROTOCOL_NAME_LEN 120
240 enum vki_repository_door_requestid {
241    VKI_REPOSITORY_DOOR_REQUEST_CONNECT = (('M' << 8) | 1)
242 };
243 enum vki_repository_door_statusid {
244    VKI_REPOSITORY_DOOR_SUCCESS                = 0,
245    VKI_REPOSITORY_DOOR_FAIL_BAD_REQUEST       = 1,
246    VKI_REPOSITORY_DOOR_FAIL_VERSION_MISMATCH  = 2,
247    VKI_REPOSITORY_DOOR_FAIL_BAD_FLAG          = 3,
248    VKI_REPOSITORY_DOOR_FAIL_NO_RESOURCES      = 4,
249    VKI_REPOSITORY_DOOR_FAIL_PERMISSION_DENIED = 5
250 };
251 typedef struct vki_repository_door_request {
252    vki_uint32_t rdr_version;
253    enum vki_repository_door_requestid rdr_request;
254    vki_uint32_t rdr_flags;
255    vki_uint32_t rdr_debug;
256 } vki_repository_door_request_t;
257 typedef struct vki_repository_door_response {
258    enum vki_repository_door_statusid rdr_status;
259 } vki_repository_door_response_t;
260 typedef struct vki_rep_protocol_request {
261    enum vki_rep_protocol_requestid rpr_request;
262 } vki_rep_protocol_request_t;
263 struct vki_rep_protocol_entity_setup {
264    enum vki_rep_protocol_requestid rpr_request;
265    vki_uint32_t rpr_entityid;
266    vki_uint32_t rpr_entitytype;
267 };
268 struct vki_rep_protocol_entity_name {
269    enum vki_rep_protocol_requestid rpr_request;
270    vki_uint32_t rpr_entityid;
271    vki_uint32_t rpr_answertype;
272 };
273 struct vki_rep_protocol_entity_get {
274    enum vki_rep_protocol_requestid rpr_request;
275    vki_uint32_t rpr_entityid;
276    vki_uint32_t rpr_object;
277 };
278 struct vki_rep_protocol_entity_get_child {
279    enum vki_rep_protocol_requestid rpr_request;
280    vki_uint32_t rpr_entityid;
281    vki_uint32_t rpr_childid;
282    char rpr_name[VKI_REP_PROTOCOL_NAME_LEN];
283 };
284 struct vki_rep_protocol_entity_parent {
285    enum vki_rep_protocol_requestid rpr_request;
286    vki_uint32_t rpr_entityid;
287    vki_uint32_t rpr_outid;
288 };
289 struct vki_rep_protocol_entity_root {
290    enum vki_rep_protocol_requestid rpr_request;
291    vki_uint32_t rpr_entityid;
292    vki_uint32_t rpr_outid;
293 };
294 struct vki_rep_protocol_entity_reset {
295    enum vki_rep_protocol_requestid rpr_request;
296    vki_uint32_t rpr_entityid;
297 };
298 struct vki_rep_protocol_entity_teardown {
299    enum vki_rep_protocol_requestid rpr_request;
300    vki_uint32_t rpr_entityid;
301 };
302 struct vki_rep_protocol_iter_read {
303    enum vki_rep_protocol_requestid rpr_request;
304    vki_uint32_t rpr_iterid;
305    vki_uint32_t rpr_sequence;
306    vki_uint32_t rpr_entityid;
307 };
308 struct vki_rep_protocol_iter_read_value {
309    enum vki_rep_protocol_requestid rpr_request;
310    vki_uint32_t rpr_iterid;
311    vki_uint32_t rpr_sequence;
312 };
313 struct vki_rep_protocol_iter_request {
314    enum vki_rep_protocol_requestid rpr_request;
315    vki_uint32_t rpr_iterid;
316 };
317 struct vki_rep_protocol_iter_start {
318    enum vki_rep_protocol_requestid rpr_request;
319    vki_uint32_t rpr_iterid;
320    vki_uint32_t rpr_entity;
321    vki_uint32_t rpr_itertype;
322    vki_uint32_t rpr_flags;
323    char rpr_pattern[VKI_REP_PROTOCOL_NAME_LEN];
324 };
325 struct vki_rep_protocol_property_request {
326    enum vki_rep_protocol_requestid rpr_request;
327    vki_uint32_t rpr_entityid;
328 };
329 
330 
331 
332 
333 #endif /* __VKI_SOLARIS_REPCACHE_21_H */
334