forked from xapi-project/xen-api
-
Notifications
You must be signed in to change notification settings - Fork 0
/
domain.mli
210 lines (156 loc) · 8.05 KB
/
domain.mli
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
(*
* Copyright (C) 2006-2009 Citrix Systems Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published
* by the Free Software Foundation; version 2.1 only. with the special
* exception on linking described in file LICENSE.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*)
(** High-level domain management functions *)
open Device_common
type domid = Xenctrl.domid
exception Restore_signature_mismatch
exception Domain_build_failed
exception Domain_restore_failed
exception Xenguest_protocol_failure of string (* internal protocol failure *)
exception Xenguest_failure of string (* an actual error is reported to us *)
exception Timeout_backend
exception Could_not_read_file of string (* eg linux kernel/ initrd *)
type create_info = {
ssidref: int32;
hvm: bool;
hap: bool;
name: string;
xsdata: (string * string) list;
platformdata: (string * string) list;
bios_strings: (string * string) list;
}
type build_hvm_info = {
shadow_multiplier: float;
timeoffset: string;
video_mib: int;
}
type build_pv_info = {
cmdline: string;
ramdisk: string option;
}
type builder_spec_info = BuildHVM of build_hvm_info | BuildPV of build_pv_info
type build_info = {
memory_max: int64; (* memory max in kilobytes *)
memory_target: int64; (* memory target in kilobytes *)
kernel: string; (* in hvm case, point to hvmloader *)
vcpus: int; (* vcpus max *)
priv: builder_spec_info;
}
type domarch = Arch_HVM | Arch_native | Arch_X64 | Arch_X32
val string_of_domarch : domarch -> string
val domarch_of_string : string -> domarch
(** path to the system hvmloader binary *)
val hvmloader : string
(** Create a fresh (empty) domain with a specific UUID, returning the domain ID *)
val make: xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> create_info -> [`domain] Uuid.t -> domid
(** 'types' of shutdown request *)
type shutdown_reason = PowerOff | Reboot | Suspend | Crash | Halt | S3Suspend | Unknown of int
(** string versions of the shutdown_reasons, suitable for writing into control/shutdown *)
val string_of_shutdown_reason : shutdown_reason -> string
(** decodes the shutdown_reason contained within the xc dominfo struct *)
val shutdown_reason_of_int : int -> shutdown_reason
(** Immediately force shutdown the domain with reason 'shutdown_reason' *)
val hard_shutdown: xc:Xenctrl.handle -> domid -> shutdown_reason -> unit
(** Thrown if the domain has disappeared *)
exception Domain_does_not_exist
(** Tell the domain to shutdown with reason 'shutdown_reason'. Don't wait for an ack *)
val shutdown: xs:Xenstore.Xs.xsh -> domid -> shutdown_reason -> unit
(** Tell the domain to shutdown with reason ''shutdown_reason', waiting for an ack *)
val shutdown_wait_for_ack: ?timeout:float -> xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> domid -> shutdown_reason -> unit
(** send a domain a sysrq *)
val sysrq: xs:Xenstore.Xs.xsh -> domid -> char -> unit
(** Forcibly close all VBD backends and wait for them to indicate they've flushed
(only used by the migrate code) *)
val hard_shutdown_all_vbds: xc:Xenctrl.handle -> xs:Xenstore.Xs.xsh -> ?extra_debug_paths:string list -> device list -> unit
(** destroy a domain *)
val destroy: ?preserve_xs_vm : bool -> xc: Xenctrl.handle -> xs:Xenstore.Xs.xsh -> domid -> unit
(** Pause a domain *)
val pause: xc: Xenctrl.handle -> domid -> unit
(** Unpause a domain *)
val unpause: xc: Xenctrl.handle -> domid -> unit
(* val create_channels : xc:Xenctrl.handle -> domid -> int * int *)
(** Builds a linux guest in a fresh domain created with 'make' *)
val build_linux: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> static_max_kib:Int64.t
-> target_kib:Int64.t -> kernel:string -> cmdline:string
-> ramdisk:string option -> vcpus:int -> domid
-> domarch
(** build an hvm domain in a fresh domain created with 'make' *)
val build_hvm: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> static_max_kib:Int64.t
-> target_kib:Int64.t -> shadow_multiplier:float
-> vcpus:int -> kernel:string
-> timeoffset:string -> video_mib:int -> domid
-> domarch
(** Restore a domain using the info provided *)
val build: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> build_info -> domid -> domarch
(** resume a domain either cooperative or not *)
val resume: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> hvm: bool -> cooperative: bool -> domid -> unit
(** restore a PV domain into a fresh domain created with 'make' *)
val pv_restore: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> static_max_kib:Int64.t
-> target_kib:Int64.t -> vcpus:int -> domid -> Unix.file_descr
-> unit
(** restore an HVM domain from the file descriptor into a fresh domain created
* with 'make' *)
val hvm_restore: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> static_max_kib:Int64.t
-> target_kib:Int64.t -> shadow_multiplier:float
-> vcpus:int -> timeoffset:string
-> domid -> Unix.file_descr
-> unit
(** Restore a domain using the info provided *)
val restore: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> build_info -> domid -> Unix.file_descr -> unit
type suspend_flag = Live | Debug
(** suspend a domain into the file descriptor *)
val suspend: xc: Xenctrl.handle -> xs: Xenstore.Xs.xsh -> hvm: bool -> domid
-> Unix.file_descr -> suspend_flag list
-> ?progress_callback: (float -> unit)
-> (unit -> unit) -> unit
(** send a s3resume event to a domain *)
val send_s3resume: xc: Xenctrl.handle -> domid -> unit
(** send a power button push to a domain *)
val trigger_power: xc: Xenctrl.handle -> domid -> unit
(** send a sleep button push to a domain *)
val trigger_sleep: xc: Xenctrl.handle -> domid -> unit
(** Set cpu affinity of some vcpus of a domain using an boolean array *)
val vcpu_affinity_set: xc: Xenctrl.handle -> domid -> int -> bool array -> unit
(** Get Cpu affinity of some vcpus of a domain *)
val vcpu_affinity_get: xc: Xenctrl.handle -> domid -> int -> bool array
(** Get the uuid from a specific domain *)
val get_uuid: xc: Xenctrl.handle -> Xenctrl.domid -> [`domain] Uuid.t
(** Write the min,max values of memory/target to xenstore for use by a memory policy agent *)
val set_memory_dynamic_range: xs: Xenstore.Xs.xsh -> min:int -> max:int -> domid -> unit
(** Grant a domain access to a range of IO ports *)
val add_ioport: xc: Xenctrl.handle -> domid -> int -> int -> unit
(** Revoke a domain's access to a range of IO ports *)
val del_ioport: xc: Xenctrl.handle -> domid -> int -> int -> unit
(** Grant a domain access to a range of IO memory *)
val add_iomem: xc: Xenctrl.handle -> domid -> int64 -> int64 -> unit
(** Revoke a domain's access to a range of IO memory *)
val del_iomem: xc: Xenctrl.handle -> domid -> int64 -> int64 -> unit
(** Grant a domain access to a physical IRQ *)
val add_irq: xc: Xenctrl.handle -> domid -> int -> unit
(** Revoke a domain's access to a physical IRQ *)
val del_irq: xc: Xenctrl.handle -> domid -> int -> unit
(** Restrict a domain to a maximum machine address width *)
val set_machine_address_size: xc: Xenctrl.handle -> domid -> int option -> unit
(** Suppress spurious page faults for this domain *)
val suppress_spurious_page_faults: xc: Xenctrl.handle -> domid -> unit
(** CPUID related functions *)
type cpuid_reg = Eax | Ebx | Ecx | Edx
type cpuid_rtype = Clear | Set | Default | Same | Keep
type cpuid_config = ((int64 * int64 option) * ((cpuid_reg * (cpuid_rtype array)) list)) list
exception Cpuid_unknown_type of char
val cpuid_reg_of_string : string -> cpuid_reg
val cpuid_rtype_of_char : char -> cpuid_rtype
val cpuid_set : xc: Xenctrl.handle -> hvm: bool -> domid -> cpuid_config -> cpuid_config
val cpuid_apply : xc: Xenctrl.handle -> hvm: bool -> domid -> unit
val cpuid_check : xc: Xenctrl.handle -> cpuid_config -> (bool * ((int64 * int64 option) * (cpuid_reg * cpuid_rtype array) list)) list