diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-05-06 11:04:39 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-05-06 11:04:39 +0100 |
commit | f44af660412c358c2fd8c9fd15496b4b6e0018d7 (patch) | |
tree | d5bd373776217689d401d93d8d82d5c062d05fb8 /tools/ocaml/xenstored/domain.ml | |
parent | ea8ddf27e5c825229946a8e8b3e0f7ee28903983 (diff) | |
download | xen-f44af660412c358c2fd8c9fd15496b4b6e0018d7.tar.gz xen-f44af660412c358c2fd8c9fd15496b4b6e0018d7.tar.bz2 xen-f44af660412c358c2fd8c9fd15496b4b6e0018d7.zip |
ocaml: Add xenstored implementation.
Signed-off-by: Vincent Hanquez <vincent.hanquez@eu.citrix.com>
Diffstat (limited to 'tools/ocaml/xenstored/domain.ml')
-rw-r--r-- | tools/ocaml/xenstored/domain.ml | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tools/ocaml/xenstored/domain.ml b/tools/ocaml/xenstored/domain.ml new file mode 100644 index 0000000000..258d172a5f --- /dev/null +++ b/tools/ocaml/xenstored/domain.ml @@ -0,0 +1,62 @@ +(* + * Copyright (C) 2006-2007 XenSource Ltd. + * Copyright (C) 2008 Citrix Ltd. + * Author Vincent Hanquez <vincent.hanquez@eu.citrix.com> + * + * 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. + *) + +open Printf + +let debug fmt = Logs.debug "general" fmt + +type t = +{ + id: Xc.domid; + mfn: nativeint; + remote_port: int; + interface: Mmap.mmap_interface; + eventchn: Event.t; + mutable port: int; +} + +let get_path dom = "/local/domain/" ^ (sprintf "%u" dom.id) +let get_id domain = domain.id +let get_interface d = d.interface +let get_mfn d = d.mfn +let get_remote_port d = d.remote_port + +let dump d chan = + fprintf chan "dom,%d,%nd,%d\n" d.id d.mfn d.port + +let notify dom = Event.notify dom.eventchn dom.port; () + +let bind_interdomain dom = + dom.port <- Event.bind_interdomain dom.eventchn dom.id dom.remote_port; + debug "domain %d bound port %d" dom.id dom.port + + +let close dom = + debug "domain %d unbound port %d" dom.id dom.port; + Event.unbind dom.eventchn dom.port; + Mmap.unmap dom.interface; + () + +let make id mfn remote_port interface eventchn = { + id = id; + mfn = mfn; + remote_port = remote_port; + interface = interface; + eventchn = eventchn; + port = -1 +} + +let is_dom0 d = d.id = 0 |