1(* 2 * Copyright (C) 2006-2007 XenSource Ltd. 3 * Copyright (C) 2008 Citrix Ltd. 4 * Author Vincent Hanquez <vincent.hanquez@eu.citrix.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU Lesser General Public License as published 8 * by the Free Software Foundation; version 2.1 only. with the special 9 * exception on linking described in file LICENSE. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU Lesser General Public License for more details. 15 *) 16 17exception Timeout 18 19(** Throws this rather than a miscellaneous Unix.connect failed *) 20exception Failed_to_connect 21 22(** perms contains 3 things: 23 - owner domid. 24 - other perm: applied to domain that is not owner or in ACL. 25 - ACL: list of per-domain permission 26 *) 27type perms = Xsraw.perms 28 29type domid = int 30type con 31 32type xsh = { 33 con : con; 34 debug: string list -> string; 35 directory : string -> string list; 36 read : string -> string; 37 readv : string -> string list -> string list; 38 write : string -> string -> unit; 39 writev : string -> (string * string) list -> unit; 40 mkdir : string -> unit; 41 rm : string -> unit; 42 getperms : string -> perms; 43 setperms : string -> perms -> unit; 44 setpermsv : string -> string list -> perms -> unit; 45 introduce : domid -> nativeint -> int -> unit; 46 release : domid -> unit; 47 resume : domid -> unit; 48 getdomainpath : domid -> string; 49 watch : string -> string -> unit; 50 unwatch : string -> string -> unit; 51} 52 53(** get operations provide a vector of xenstore function that apply to one 54 connection *) 55val get_operations : con -> xsh 56 57(** create a transaction with a vector of function that can be applied 58 into the transaction. *) 59val transaction : xsh -> (Xst.ops -> 'a) -> 'a 60 61(** watch manipulation on a connection *) 62val has_watchevents : xsh -> bool 63val get_watchevent : xsh -> string * string 64val read_watchevent : xsh -> string * string 65 66(** get_fd return the fd of the connection to be able to select on it. 67 NOTE: it works only for socket-based connection *) 68val get_fd : xsh -> Unix.file_descr 69 70(** wait for watchevent with a timeout. Until the callback return true, 71 every watch during the time specified, will be pass to the callback. 72 NOTE: it works only when use with a socket-based connection *) 73val read_watchevent_timeout : xsh -> float -> (string * string -> bool) -> unit 74 75(** register a set of watches, then wait for watchevent. 76 remove all watches previously set before giving back the hand. *) 77val monitor_paths : xsh 78 -> (string * string) list 79 -> float 80 -> (string * string -> bool) 81 -> unit 82 83(** open a socket-based xenstored connection *) 84val daemon_open : unit -> xsh 85 86(** open a mmap-based xenstored connection *) 87val domain_open : unit -> xsh 88 89(** close any xenstored connection *) 90val close : xsh -> unit 91