1 | #ifndef␉_ledger_user_␊ |
2 | #define␉_ledger_user_␊ |
3 | ␊ |
4 | /* Module ledger */␊ |
5 | ␊ |
6 | #include <string.h>␊ |
7 | #include <mach/ndr.h>␊ |
8 | #include <mach/boolean.h>␊ |
9 | #include <mach/kern_return.h>␊ |
10 | #include <mach/notify.h>␊ |
11 | #include <mach/mach_types.h>␊ |
12 | #include <mach/message.h>␊ |
13 | #include <mach/mig_errors.h>␊ |
14 | #include <mach/port.h>␊ |
15 | ␊ |
16 | #ifdef AUTOTEST␊ |
17 | #ifndef FUNCTION_PTR_T␊ |
18 | #define FUNCTION_PTR_T␊ |
19 | typedef void (*function_ptr_t)(mach_port_t, char *, mach_msg_type_number_t);␊ |
20 | typedef struct {␊ |
21 | char *name;␊ |
22 | function_ptr_t function;␊ |
23 | } function_table_entry;␊ |
24 | typedef function_table_entry *function_table_t;␊ |
25 | #endif /* FUNCTION_PTR_T */␊ |
26 | #endif /* AUTOTEST */␊ |
27 | ␊ |
28 | #ifndef␉ledger_MSG_COUNT␊ |
29 | #define␉ledger_MSG_COUNT␉4␊ |
30 | #endif␉/* ledger_MSG_COUNT */␊ |
31 | ␊ |
32 | #include <mach/std_types.h>␊ |
33 | #include <mach/mig.h>␊ |
34 | #include <mach/mach_types.h>␊ |
35 | ␊ |
36 | #ifdef __BeforeMigUserHeader␊ |
37 | __BeforeMigUserHeader␊ |
38 | #endif /* __BeforeMigUserHeader */␊ |
39 | ␊ |
40 | #include <sys/cdefs.h>␊ |
41 | __BEGIN_DECLS␊ |
42 | ␊ |
43 | ␊ |
44 | /* Routine ledger_create */␊ |
45 | #ifdef␉mig_external␊ |
46 | mig_external␊ |
47 | #else␊ |
48 | extern␊ |
49 | #endif␉/* mig_external */␊ |
50 | kern_return_t ledger_create␊ |
51 | (␊ |
52 | ␉ledger_t parent_ledger,␊ |
53 | ␉ledger_t ledger_ledger,␊ |
54 | ␉ledger_t *new_ledger,␊ |
55 | ␉ledger_item_t transfer␊ |
56 | );␊ |
57 | ␊ |
58 | /* Routine ledger_terminate */␊ |
59 | #ifdef␉mig_external␊ |
60 | mig_external␊ |
61 | #else␊ |
62 | extern␊ |
63 | #endif␉/* mig_external */␊ |
64 | kern_return_t ledger_terminate␊ |
65 | (␊ |
66 | ␉ledger_t ledger␊ |
67 | );␊ |
68 | ␊ |
69 | /* Routine ledger_transfer */␊ |
70 | #ifdef␉mig_external␊ |
71 | mig_external␊ |
72 | #else␊ |
73 | extern␊ |
74 | #endif␉/* mig_external */␊ |
75 | kern_return_t ledger_transfer␊ |
76 | (␊ |
77 | ␉ledger_t parent_ledger,␊ |
78 | ␉ledger_t child_ledger,␊ |
79 | ␉ledger_item_t transfer␊ |
80 | );␊ |
81 | ␊ |
82 | /* Routine ledger_read */␊ |
83 | #ifdef␉mig_external␊ |
84 | mig_external␊ |
85 | #else␊ |
86 | extern␊ |
87 | #endif␉/* mig_external */␊ |
88 | kern_return_t ledger_read␊ |
89 | (␊ |
90 | ␉ledger_t ledger,␊ |
91 | ␉ledger_item_t *balance,␊ |
92 | ␉ledger_item_t *limit␊ |
93 | );␊ |
94 | ␊ |
95 | __END_DECLS␊ |
96 | ␊ |
97 | /********************** Caution **************************/␊ |
98 | /* The following data types should be used to calculate */␊ |
99 | /* maximum message sizes only. The actual message may be */␊ |
100 | /* smaller, and the position of the arguments within the */␊ |
101 | /* message layout may vary from what is presented here. */␊ |
102 | /* For example, if any of the arguments are variable- */␊ |
103 | /* sized, and less than the maximum is sent, the data */␊ |
104 | /* will be packed tight in the actual message to reduce */␊ |
105 | /* the presence of holes. */␊ |
106 | /********************** Caution **************************/␊ |
107 | ␊ |
108 | /* typedefs for all requests */␊ |
109 | ␊ |
110 | #ifndef __Request__ledger_subsystem__defined␊ |
111 | #define __Request__ledger_subsystem__defined␊ |
112 | ␊ |
113 | #ifdef __MigPackStructs␊ |
114 | #pragma pack(4)␊ |
115 | #endif␊ |
116 | ␉typedef struct {␊ |
117 | ␉␉mach_msg_header_t Head;␊ |
118 | ␉␉/* start of the kernel processed data */␊ |
119 | ␉␉mach_msg_body_t msgh_body;␊ |
120 | ␉␉mach_msg_port_descriptor_t ledger_ledger;␊ |
121 | ␉␉/* end of the kernel processed data */␊ |
122 | ␉␉NDR_record_t NDR;␊ |
123 | ␉␉ledger_item_t transfer;␊ |
124 | ␉} __Request__ledger_create_t;␊ |
125 | #ifdef __MigPackStructs␊ |
126 | #pragma pack()␊ |
127 | #endif␊ |
128 | ␊ |
129 | #ifdef __MigPackStructs␊ |
130 | #pragma pack(4)␊ |
131 | #endif␊ |
132 | ␉typedef struct {␊ |
133 | ␉␉mach_msg_header_t Head;␊ |
134 | ␉} __Request__ledger_terminate_t;␊ |
135 | #ifdef __MigPackStructs␊ |
136 | #pragma pack()␊ |
137 | #endif␊ |
138 | ␊ |
139 | #ifdef __MigPackStructs␊ |
140 | #pragma pack(4)␊ |
141 | #endif␊ |
142 | ␉typedef struct {␊ |
143 | ␉␉mach_msg_header_t Head;␊ |
144 | ␉␉/* start of the kernel processed data */␊ |
145 | ␉␉mach_msg_body_t msgh_body;␊ |
146 | ␉␉mach_msg_port_descriptor_t child_ledger;␊ |
147 | ␉␉/* end of the kernel processed data */␊ |
148 | ␉␉NDR_record_t NDR;␊ |
149 | ␉␉ledger_item_t transfer;␊ |
150 | ␉} __Request__ledger_transfer_t;␊ |
151 | #ifdef __MigPackStructs␊ |
152 | #pragma pack()␊ |
153 | #endif␊ |
154 | ␊ |
155 | #ifdef __MigPackStructs␊ |
156 | #pragma pack(4)␊ |
157 | #endif␊ |
158 | ␉typedef struct {␊ |
159 | ␉␉mach_msg_header_t Head;␊ |
160 | ␉} __Request__ledger_read_t;␊ |
161 | #ifdef __MigPackStructs␊ |
162 | #pragma pack()␊ |
163 | #endif␊ |
164 | #endif /* !__Request__ledger_subsystem__defined */␊ |
165 | ␊ |
166 | /* union of all requests */␊ |
167 | ␊ |
168 | #ifndef __RequestUnion__ledger_subsystem__defined␊ |
169 | #define __RequestUnion__ledger_subsystem__defined␊ |
170 | union __RequestUnion__ledger_subsystem {␊ |
171 | ␉__Request__ledger_create_t Request_ledger_create;␊ |
172 | ␉__Request__ledger_terminate_t Request_ledger_terminate;␊ |
173 | ␉__Request__ledger_transfer_t Request_ledger_transfer;␊ |
174 | ␉__Request__ledger_read_t Request_ledger_read;␊ |
175 | };␊ |
176 | #endif /* !__RequestUnion__ledger_subsystem__defined */␊ |
177 | /* typedefs for all replies */␊ |
178 | ␊ |
179 | #ifndef __Reply__ledger_subsystem__defined␊ |
180 | #define __Reply__ledger_subsystem__defined␊ |
181 | ␊ |
182 | #ifdef __MigPackStructs␊ |
183 | #pragma pack(4)␊ |
184 | #endif␊ |
185 | ␉typedef struct {␊ |
186 | ␉␉mach_msg_header_t Head;␊ |
187 | ␉␉/* start of the kernel processed data */␊ |
188 | ␉␉mach_msg_body_t msgh_body;␊ |
189 | ␉␉mach_msg_port_descriptor_t new_ledger;␊ |
190 | ␉␉/* end of the kernel processed data */␊ |
191 | ␉} __Reply__ledger_create_t;␊ |
192 | #ifdef __MigPackStructs␊ |
193 | #pragma pack()␊ |
194 | #endif␊ |
195 | ␊ |
196 | #ifdef __MigPackStructs␊ |
197 | #pragma pack(4)␊ |
198 | #endif␊ |
199 | ␉typedef struct {␊ |
200 | ␉␉mach_msg_header_t Head;␊ |
201 | ␉␉NDR_record_t NDR;␊ |
202 | ␉␉kern_return_t RetCode;␊ |
203 | ␉} __Reply__ledger_terminate_t;␊ |
204 | #ifdef __MigPackStructs␊ |
205 | #pragma pack()␊ |
206 | #endif␊ |
207 | ␊ |
208 | #ifdef __MigPackStructs␊ |
209 | #pragma pack(4)␊ |
210 | #endif␊ |
211 | ␉typedef struct {␊ |
212 | ␉␉mach_msg_header_t Head;␊ |
213 | ␉␉NDR_record_t NDR;␊ |
214 | ␉␉kern_return_t RetCode;␊ |
215 | ␉} __Reply__ledger_transfer_t;␊ |
216 | #ifdef __MigPackStructs␊ |
217 | #pragma pack()␊ |
218 | #endif␊ |
219 | ␊ |
220 | #ifdef __MigPackStructs␊ |
221 | #pragma pack(4)␊ |
222 | #endif␊ |
223 | ␉typedef struct {␊ |
224 | ␉␉mach_msg_header_t Head;␊ |
225 | ␉␉NDR_record_t NDR;␊ |
226 | ␉␉kern_return_t RetCode;␊ |
227 | ␉␉ledger_item_t balance;␊ |
228 | ␉␉ledger_item_t limit;␊ |
229 | ␉} __Reply__ledger_read_t;␊ |
230 | #ifdef __MigPackStructs␊ |
231 | #pragma pack()␊ |
232 | #endif␊ |
233 | #endif /* !__Reply__ledger_subsystem__defined */␊ |
234 | ␊ |
235 | /* union of all replies */␊ |
236 | ␊ |
237 | #ifndef __ReplyUnion__ledger_subsystem__defined␊ |
238 | #define __ReplyUnion__ledger_subsystem__defined␊ |
239 | union __ReplyUnion__ledger_subsystem {␊ |
240 | ␉__Reply__ledger_create_t Reply_ledger_create;␊ |
241 | ␉__Reply__ledger_terminate_t Reply_ledger_terminate;␊ |
242 | ␉__Reply__ledger_transfer_t Reply_ledger_transfer;␊ |
243 | ␉__Reply__ledger_read_t Reply_ledger_read;␊ |
244 | };␊ |
245 | #endif /* !__RequestUnion__ledger_subsystem__defined */␊ |
246 | ␊ |
247 | #ifndef subsystem_to_name_map_ledger␊ |
248 | #define subsystem_to_name_map_ledger \␊ |
249 | { "ledger_create", 5000 },\␊ |
250 | { "ledger_terminate", 5001 },\␊ |
251 | { "ledger_transfer", 5002 },\␊ |
252 | { "ledger_read", 5003 }␊ |
253 | #endif␊ |
254 | ␊ |
255 | #ifdef __AfterMigUserHeader␊ |
256 | __AfterMigUserHeader␊ |
257 | #endif /* __AfterMigUserHeader */␊ |
258 | ␊ |
259 | #endif␉ /* _ledger_user_ */␊ |
260 | |