package albatross

  1. Overview
  2. Docs

A tree data structure including policies and dynamic usage.

Considering delegation of resources to someone, and further delegation to others - using a process which is not controlled by the authority - requires runtime tracking of these delegations and the actual usage:

If Alice may create 2 virtual machines, and she delegates the same capability further to both Bob and Charlie, the authority must still enforce that Alice, Bob, and Charlie are able to run 2 virtual machines in total, rather than 2 each.

type t = private {
  1. policies : Vmm_core.Policy.t Vmm_trie.t;
  2. block_devices : (int * bool) Vmm_trie.t;
  3. unikernels : Vmm_core.Unikernel.t Vmm_trie.t;
}

The type of the resource tree.

val empty : t

empty is the empty tree.

val find_unikernel : t -> Vmm_core.Name.t -> Vmm_core.Unikernel.t option

find_unikernel t name is either Some unikernel or None.

val find_policy : t -> Vmm_core.Name.path -> Vmm_core.Policy.t option

find_policy t path is either Some policy or None.

val find_block : t -> Vmm_core.Name.t -> (int * bool) option

find_block t name is either Some (size, active) or None.

val check_unikernel : t -> Vmm_core.Name.t -> Vmm_core.Unikernel.config -> (unit, [> `Msg of string ]) Stdlib.result

check_unikernel t name unikernel checks whether unikernel under name in t would be allowed under the current policies.

val insert_unikernel : t -> Vmm_core.Name.t -> Vmm_core.Unikernel.t -> t

insert_unikernel t name unikernel inserts unikernel under name in t, and returns the new t. The caller has to ensure (using check_unikernel) that an unikernel with the same name does not yet exist, and the block device is not in use.

  • raises Invalid_argument

    if block device is already in use, or unikernel already exists.

val insert_policy : t -> Vmm_core.Name.path -> Vmm_core.Policy.t -> (t, [> `Msg of string ]) Stdlib.result

insert_policy t path policy inserts policy under path in t, and returns the new t or an error.

val check_block : t -> Vmm_core.Name.t -> int -> (unit, [> `Msg of string ]) Stdlib.result

check_block t name size checks whether size under name in t would be allowed under the current policies.

val insert_block : t -> Vmm_core.Name.t -> int -> (t, [> `Msg of string ]) Stdlib.result

insert_block t name size inserts size under name in t, and returns the new t or an error.

val remove_unikernel : t -> Vmm_core.Name.t -> (t, [> `Msg of string ]) Stdlib.result

remove_unikernel t name removes unikernel name from t.

val remove_policy : t -> Vmm_core.Name.path -> (t, [> `Msg of string ]) Stdlib.result

remove_policy t path removes policy path from t.

val remove_block : t -> Vmm_core.Name.t -> (t, [> `Msg of string ]) Stdlib.result

remove_block t name removes block name from t.

val pp : t Fmt.t

pp is a pretty printer for t.

OCaml

Innovation. Community. Security.