- patches.rt/0001-sched-count-of-queued-RT-tasks.patch: Delete.
[linux-flexiantxendom0-3.2.10.git] / include / xen / interface / xsm / acm.h
1 /*
2  * acm.h: Xen access control module interface defintions
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to
6  * deal in the Software without restriction, including without limitation the
7  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8  * sell copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20  * DEALINGS IN THE SOFTWARE.
21  *
22  * Reiner Sailer <sailer@watson.ibm.com>
23  * Copyright (c) 2005, International Business Machines Corporation.
24  */
25
26 #ifndef _XEN_PUBLIC_ACM_H
27 #define _XEN_PUBLIC_ACM_H
28
29 #include "../xen.h"
30
31 /* if ACM_DEBUG defined, all hooks should
32  * print a short trace message (comment it out
33  * when not in testing mode )
34  */
35 /* #define ACM_DEBUG */
36
37 #ifdef ACM_DEBUG
38 #  define printkd(fmt, args...) printk(fmt,## args)
39 #else
40 #  define printkd(fmt, args...)
41 #endif
42
43 /* default ssid reference value if not supplied */
44 #define ACM_DEFAULT_SSID  0x0
45 #define ACM_DEFAULT_LOCAL_SSID  0x0
46
47 /* Internal ACM ERROR types */
48 #define ACM_OK     0
49 #define ACM_UNDEF   -1
50 #define ACM_INIT_SSID_ERROR  -2
51 #define ACM_INIT_SOID_ERROR  -3
52 #define ACM_ERROR          -4
53
54 /* External ACCESS DECISIONS */
55 #define ACM_ACCESS_PERMITTED        0
56 #define ACM_ACCESS_DENIED           -111
57 #define ACM_NULL_POINTER_ERROR      -200
58
59 /*
60    Error codes reported in when trying to test for a new policy
61    These error codes are reported in an array of tuples where
62    each error code is followed by a parameter describing the error
63    more closely, such as a domain id.
64 */
65 #define ACM_EVTCHN_SHARING_VIOLATION       0x100
66 #define ACM_GNTTAB_SHARING_VIOLATION       0x101
67 #define ACM_DOMAIN_LOOKUP                  0x102
68 #define ACM_CHWALL_CONFLICT                0x103
69 #define ACM_SSIDREF_IN_USE                 0x104
70
71
72 /* primary policy in lower 4 bits */
73 #define ACM_NULL_POLICY 0
74 #define ACM_CHINESE_WALL_POLICY 1
75 #define ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY 2
76 #define ACM_POLICY_UNDEFINED 15
77
78 /* combinations have secondary policy component in higher 4bit */
79 #define ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY \
80     ((ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY << 4) | ACM_CHINESE_WALL_POLICY)
81
82 /* policy: */
83 #define ACM_POLICY_NAME(X) \
84  ((X) == (ACM_NULL_POLICY)) ? "NULL" :                        \
85     ((X) == (ACM_CHINESE_WALL_POLICY)) ? "CHINESE WALL" :        \
86     ((X) == (ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "SIMPLE TYPE ENFORCEMENT" : \
87     ((X) == (ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "CHINESE WALL AND SIMPLE TYPE ENFORCEMENT" : \
88      "UNDEFINED"
89
90 /* the following policy versions must be increased
91  * whenever the interpretation of the related
92  * policy's data structure changes
93  */
94 #define ACM_POLICY_VERSION 3
95 #define ACM_CHWALL_VERSION 1
96 #define ACM_STE_VERSION  1
97
98 /* defines a ssid reference used by xen */
99 typedef uint32_t ssidref_t;
100
101 /* hooks that are known to domains */
102 #define ACMHOOK_none          0
103 #define ACMHOOK_sharing       1
104 #define ACMHOOK_authorization 2
105
106 /* -------security policy relevant type definitions-------- */
107
108 /* type identifier; compares to "equal" or "not equal" */
109 typedef uint16_t domaintype_t;
110
111 /* CHINESE WALL POLICY DATA STRUCTURES
112  *
113  * current accumulated conflict type set:
114  * When a domain is started and has a type that is in
115  * a conflict set, the conflicting types are incremented in
116  * the aggregate set. When a domain is destroyed, the 
117  * conflicting types to its type are decremented.
118  * If a domain has multiple types, this procedure works over
119  * all those types.
120  *
121  * conflict_aggregate_set[i] holds the number of
122  *   running domains that have a conflict with type i.
123  *
124  * running_types[i] holds the number of running domains
125  *        that include type i in their ssidref-referenced type set
126  *
127  * conflict_sets[i][j] is "0" if type j has no conflict
128  *    with type i and is "1" otherwise.
129  */
130 /* high-16 = version, low-16 = check magic */
131 #define ACM_MAGIC  0x0001debc
132
133 /* each offset in bytes from start of the struct they
134  * are part of */
135
136 /* V3 of the policy buffer aded a version structure */
137 struct acm_policy_version
138 {
139     uint32_t major;
140     uint32_t minor;
141 };
142
143
144 /* each buffer consists of all policy information for
145  * the respective policy given in the policy code
146  *
147  * acm_policy_buffer, acm_chwall_policy_buffer,
148  * and acm_ste_policy_buffer need to stay 32-bit aligned
149  * because we create binary policies also with external
150  * tools that assume packed representations (e.g. the java tool)
151  */
152 struct acm_policy_buffer {
153     uint32_t magic;
154     uint32_t policy_version; /* ACM_POLICY_VERSION */
155     uint32_t len;
156     uint32_t policy_reference_offset;
157     uint32_t primary_policy_code;
158     uint32_t primary_buffer_offset;
159     uint32_t secondary_policy_code;
160     uint32_t secondary_buffer_offset;
161     struct acm_policy_version xml_pol_version; /* add in V3 */
162 };
163
164
165 struct acm_policy_reference_buffer {
166     uint32_t len;
167 };
168
169 struct acm_chwall_policy_buffer {
170     uint32_t policy_version; /* ACM_CHWALL_VERSION */
171     uint32_t policy_code;
172     uint32_t chwall_max_types;
173     uint32_t chwall_max_ssidrefs;
174     uint32_t chwall_max_conflictsets;
175     uint32_t chwall_ssid_offset;
176     uint32_t chwall_conflict_sets_offset;
177     uint32_t chwall_running_types_offset;
178     uint32_t chwall_conflict_aggregate_offset;
179 };
180
181 struct acm_ste_policy_buffer {
182     uint32_t policy_version; /* ACM_STE_VERSION */
183     uint32_t policy_code;
184     uint32_t ste_max_types;
185     uint32_t ste_max_ssidrefs;
186     uint32_t ste_ssid_offset;
187 };
188
189 struct acm_stats_buffer {
190     uint32_t magic;
191     uint32_t len;
192     uint32_t primary_policy_code;
193     uint32_t primary_stats_offset;
194     uint32_t secondary_policy_code;
195     uint32_t secondary_stats_offset;
196 };
197
198 struct acm_ste_stats_buffer {
199     uint32_t ec_eval_count;
200     uint32_t gt_eval_count;
201     uint32_t ec_denied_count;
202     uint32_t gt_denied_count;
203     uint32_t ec_cachehit_count;
204     uint32_t gt_cachehit_count;
205 };
206
207 struct acm_ssid_buffer {
208     uint32_t len;
209     ssidref_t ssidref;
210     uint32_t policy_reference_offset;
211     uint32_t primary_policy_code;
212     uint32_t primary_max_types;
213     uint32_t primary_types_offset;
214     uint32_t secondary_policy_code;
215     uint32_t secondary_max_types;
216     uint32_t secondary_types_offset;
217 };
218
219 #endif
220
221 /*
222  * Local variables:
223  * mode: C
224  * c-set-style: "BSD"
225  * c-basic-offset: 4
226  * tab-width: 4
227  * indent-tabs-mode: nil
228  * End:
229  */