1181624Skmacy/*
2181624Skmacy * acm_ops.h: Xen access control module hypervisor commands
3181624Skmacy *
4181624Skmacy * Permission is hereby granted, free of charge, to any person obtaining a copy
5181624Skmacy * of this software and associated documentation files (the "Software"), to
6181624Skmacy * deal in the Software without restriction, including without limitation the
7181624Skmacy * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8181624Skmacy * sell copies of the Software, and to permit persons to whom the Software is
9181624Skmacy * furnished to do so, subject to the following conditions:
10181624Skmacy *
11181624Skmacy * The above copyright notice and this permission notice shall be included in
12181624Skmacy * all copies or substantial portions of the Software.
13181624Skmacy *
14181624Skmacy * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15181624Skmacy * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16181624Skmacy * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17181624Skmacy * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18181624Skmacy * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19181624Skmacy * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20181624Skmacy * DEALINGS IN THE SOFTWARE.
21181624Skmacy *
22181624Skmacy * Reiner Sailer <sailer@watson.ibm.com>
23181624Skmacy * Copyright (c) 2005,2006 International Business Machines Corporation.
24181624Skmacy */
25181624Skmacy
26181624Skmacy#ifndef __XEN_PUBLIC_ACM_OPS_H__
27181624Skmacy#define __XEN_PUBLIC_ACM_OPS_H__
28181624Skmacy
29181624Skmacy#include "xen.h"
30181624Skmacy#include "acm.h"
31181624Skmacy
32181624Skmacy/*
33181624Skmacy * Make sure you increment the interface version whenever you modify this file!
34181624Skmacy * This makes sure that old versions of acm tools will stop working in a
35181624Skmacy * well-defined way (rather than crashing the machine, for instance).
36181624Skmacy */
37181624Skmacy#define ACM_INTERFACE_VERSION   0xAAAA000A
38181624Skmacy
39181624Skmacy/************************************************************************/
40181624Skmacy
41181624Skmacy/*
42181624Skmacy * Prototype for this hypercall is:
43181624Skmacy *  int acm_op(int cmd, void *args)
44181624Skmacy * @cmd  == ACMOP_??? (access control module operation).
45181624Skmacy * @args == Operation-specific extra arguments (NULL if none).
46181624Skmacy */
47181624Skmacy
48181624Skmacy
49181624Skmacy#define ACMOP_setpolicy         1
50181624Skmacystruct acm_setpolicy {
51181624Skmacy    /* IN */
52181624Skmacy    XEN_GUEST_HANDLE_64(void) pushcache;
53181624Skmacy    uint32_t pushcache_size;
54181624Skmacy};
55181624Skmacy
56181624Skmacy
57181624Skmacy#define ACMOP_getpolicy         2
58181624Skmacystruct acm_getpolicy {
59181624Skmacy    /* IN */
60181624Skmacy    XEN_GUEST_HANDLE_64(void) pullcache;
61181624Skmacy    uint32_t pullcache_size;
62181624Skmacy};
63181624Skmacy
64181624Skmacy
65181624Skmacy#define ACMOP_dumpstats         3
66181624Skmacystruct acm_dumpstats {
67181624Skmacy    /* IN */
68181624Skmacy    XEN_GUEST_HANDLE_64(void) pullcache;
69181624Skmacy    uint32_t pullcache_size;
70181624Skmacy};
71181624Skmacy
72181624Skmacy
73181624Skmacy#define ACMOP_getssid           4
74181624Skmacy#define ACM_GETBY_ssidref  1
75181624Skmacy#define ACM_GETBY_domainid 2
76181624Skmacystruct acm_getssid {
77181624Skmacy    /* IN */
78181624Skmacy    uint32_t get_ssid_by; /* ACM_GETBY_* */
79181624Skmacy    union {
80181624Skmacy        domaintype_t domainid;
81181624Skmacy        ssidref_t    ssidref;
82181624Skmacy    } id;
83181624Skmacy    XEN_GUEST_HANDLE_64(void) ssidbuf;
84181624Skmacy    uint32_t ssidbuf_size;
85181624Skmacy};
86181624Skmacy
87181624Skmacy#define ACMOP_getdecision      5
88181624Skmacystruct acm_getdecision {
89181624Skmacy    /* IN */
90181624Skmacy    uint32_t get_decision_by1; /* ACM_GETBY_* */
91181624Skmacy    uint32_t get_decision_by2; /* ACM_GETBY_* */
92181624Skmacy    union {
93181624Skmacy        domaintype_t domainid;
94181624Skmacy        ssidref_t    ssidref;
95181624Skmacy    } id1;
96181624Skmacy    union {
97181624Skmacy        domaintype_t domainid;
98181624Skmacy        ssidref_t    ssidref;
99181624Skmacy    } id2;
100181624Skmacy    uint32_t hook;
101181624Skmacy    /* OUT */
102181624Skmacy    uint32_t acm_decision;
103181624Skmacy};
104181624Skmacy
105181624Skmacy
106181624Skmacy#define ACMOP_chgpolicy        6
107181624Skmacystruct acm_change_policy {
108181624Skmacy    /* IN */
109181624Skmacy    XEN_GUEST_HANDLE_64(void) policy_pushcache;
110181624Skmacy    uint32_t policy_pushcache_size;
111181624Skmacy    XEN_GUEST_HANDLE_64(void) del_array;
112181624Skmacy    uint32_t delarray_size;
113181624Skmacy    XEN_GUEST_HANDLE_64(void) chg_array;
114181624Skmacy    uint32_t chgarray_size;
115181624Skmacy    /* OUT */
116181624Skmacy    /* array with error code */
117181624Skmacy    XEN_GUEST_HANDLE_64(void) err_array;
118181624Skmacy    uint32_t errarray_size;
119181624Skmacy};
120181624Skmacy
121181624Skmacy#define ACMOP_relabeldoms       7
122181624Skmacystruct acm_relabel_doms {
123181624Skmacy    /* IN */
124181624Skmacy    XEN_GUEST_HANDLE_64(void) relabel_map;
125181624Skmacy    uint32_t relabel_map_size;
126181624Skmacy    /* OUT */
127181624Skmacy    XEN_GUEST_HANDLE_64(void) err_array;
128181624Skmacy    uint32_t errarray_size;
129181624Skmacy};
130181624Skmacy
131181624Skmacy/* future interface to Xen */
132181624Skmacystruct xen_acmctl {
133181624Skmacy    uint32_t cmd;
134181624Skmacy    uint32_t interface_version;
135181624Skmacy    union {
136181624Skmacy        struct acm_setpolicy     setpolicy;
137181624Skmacy        struct acm_getpolicy     getpolicy;
138181624Skmacy        struct acm_dumpstats     dumpstats;
139181624Skmacy        struct acm_getssid       getssid;
140181624Skmacy        struct acm_getdecision   getdecision;
141181624Skmacy        struct acm_change_policy change_policy;
142181624Skmacy        struct acm_relabel_doms  relabel_doms;
143181624Skmacy    } u;
144181624Skmacy};
145181624Skmacy
146181624Skmacytypedef struct xen_acmctl xen_acmctl_t;
147181624SkmacyDEFINE_XEN_GUEST_HANDLE(xen_acmctl_t);
148181624Skmacy
149181624Skmacy#endif /* __XEN_PUBLIC_ACM_OPS_H__ */
150181624Skmacy
151181624Skmacy/*
152181624Skmacy * Local variables:
153181624Skmacy * mode: C
154181624Skmacy * c-set-style: "BSD"
155181624Skmacy * c-basic-offset: 4
156181624Skmacy * tab-width: 4
157181624Skmacy * indent-tabs-mode: nil
158181624Skmacy * End:
159181624Skmacy */
160