Module Mirage_keySource

Mirage keys.

Release v4.0.0

Sourcemodule Arg : sig ... end
include Functoria.KEY with module Arg := Arg

Configuration Keys

Sourcetype 'a key = 'a Functoria.Key.key

The type for configuration keys. Keys are used to retrieve the cross-stage values they are holding (by indexing contents in the autogenerated Bootgen_var module) but also to parameterize the choice of module implementation.

Sourceval create : string -> 'a Arg.t -> 'a key

create n a is the key named n whose contents is determined by parsing the command-line argument a.

Configuration Values

Sourcetype 'a value = 'a Functoria.Key.value

The type for configure-time and run-time values. Values are either pure or obtained by composing other values. Values might have data dependencies, which form an (implicit) directed and acyclic graph that need to be evaluated.

Sourceval pure : 'a -> 'a value

pure x is a value without any dependency.

Sourceval ($) : ('a -> 'b) value -> 'a value -> 'b value

f $ v is is the value resulting from the application of f'value to v's value. $ is the usual app operator for applicative functor.

Sourceval map : ('a -> 'b) -> 'a value -> 'b value

map f v is pure f $ v.

Sourceval if_ : bool value -> 'a -> 'a -> 'a value

if_ v x y is map (fun b -> if b then x else y) v.

Sourceval match_ : 'a value -> ('a -> 'b) -> 'b value

match_ v pattern is map pattern v.

Sourceval default : 'a value -> 'a

default v returns the default value for v.

Sourceval value : 'a key -> 'a value

value k is the value parsed by k.

Abstract Keys

The type for abstract keys.

Sourceval name : t -> string

name t is the string given as t's name when t was created.

Sourceval v : 'a key -> t

v k is the k with its type hidden.

Sourceval equal : t -> t -> bool

equal is the equality function of untyped keys.

Sourceval hash : t -> int

hash is the hash function for untyped keys.

Sourceval compare : t -> t -> int

compare compares untyped keys.

Sourceval pp : t Fmt.t

pp fmt k prints the name of k.

Sourcemodule Set : sig ... end

Set implements sets over t elements.

Sourceval of_deps : Set.t -> unit value

of_deps keys is a value with keys as data-dependencies.

Sourceval deps : 'a value -> Set.t

deps v are v's data-dependencies.

Sourceval pp_deps : 'a value Fmt.t

pp_deps fmt v prints the name of the dependencies of v.

Stages

Sourceval is_runtime : t -> bool

is_runtime k is true if k's stage is `Run or `Both.

Sourceval is_configure : t -> bool

is_configure k is true if k's stage is `Configure or `Both.

Sourceval filter_stage : Arg.stage -> Set.t -> Set.t

filter_stage s ks is ks but with only keys available at stage s.

Sourcemodule Alias : sig ... end

Alias allows to define virtual keys in terms of other keys at configuration time only.

Sourceval alias : string -> 'a Alias.t -> 'a key

Similar to create but for command-line alias.

Sourceval aliases : t -> Set.t

aliases t is the list of t's aliases.

Parsing context

The type for values holding parsing context.

Sourceval dump_context : context Fmt.t

dump_context dumps the contents of a context.

Sourceval empty_context : context
Sourceval merge_context : default:context -> context -> context
Sourceval add_to_context : 'a key -> 'a -> context -> context

Add a binding to a context.

Sourceval context : ?stage:Arg.stage -> with_required:bool -> Set.t -> context Cmdliner.Term.t

context ~with_required ks is a Cmdliner term that evaluates into a parsing context for command-line arguments. If with_required is false, it will only produce optional keys.

Sourceval mem : context -> 'a value -> bool

mem c v is true iff all the dependencies of v have been evaluated.

Sourceval peek : context -> 'a value -> 'a option

peek c v is Some x if mem v and None otherwise.

Sourceval eval : context -> 'a value -> 'a

eval c v evaluates v in c's context, using default values if necessary.

Sourceval get : context -> 'a key -> 'a

get c k is k's value in c's context. If k is not present in c, it is k's default value.

Sourceval find : context -> 'a key -> 'a option

find c k is k's value in c's context or None if k is not present in c.

pps c fmt ks prints the keys ks using the context c to get their value.

Code Serialization

Sourceval ocaml_name : t -> string

ocaml_name k is the ocaml name of k.

Sourceval serialize_call : t Fmt.t

serialize_call fmt k outputs Key_gen.n () to fmt, where n is k's OCaml name.

Sourceval serialize : context -> t Fmt.t

serialize ctx ppf k outputs the Cmdliner runes to parse command-line arguments represented by k at runtime.

Sourceval abstract : 'a key -> t
  • deprecated Use Mirage.Key.v.
Sourcetype mode_unix = [
  1. | `Unix
  2. | `MacOSX
]
Sourcetype mode_xen = [
  1. | `Xen
  2. | `Qubes
]
Sourcetype mode_solo5 = [
  1. | `Hvt
  2. | `Spt
  3. | `Virtio
  4. | `Muen
  5. | `Genode
]
Sourcetype mode = [
  1. | mode_unix
  2. | mode_xen
  3. | mode_solo5
]

Mirage keys

Sourceval target : mode key

-t TARGET: Key setting the configuration mode for the current project. Is one of "unix", "macosx", "xen", "qubes", "virtio", "hvt", "muen", "genode" or "spt".

Sourceval pp_target : mode Fmt.t

Pretty printer for the mode.

Sourceval is_unix : bool value

Is true iff the target key is a UNIXish system ("unix" or "macosx").

Sourceval is_solo5 : bool value

Is true iff the target key is a Solo5-based target.

Sourceval is_xen : bool value

Is true iff the target key is a Xen-based system ("xen" or "qubes").

Sourceval tracing_size : int -> int key

--tracing-size: Key setting the tracing ring buffer size.

OCaml runtime keys

The OCaml runtime is usually configurable via the OCAMLRUNPARAM environment variable. We provide boot parameters covering these options.

Sourceval backtrace : bool key

--backtrace: Output a backtrace if an uncaught exception terminated the unikernel.

Sourceval randomize_hashtables : bool key

--randomize-hashtables: Randomize all hash tables.

GC control

The OCaml garbage collector can be configured, as described in detail in GC control.

The following keys allow boot time configuration.

Sourceval allocation_policy : [ `Next_fit | `First_fit | `Best_fit ] key
Sourceval minor_heap_size : int option key
Sourceval major_heap_increment : int option key
Sourceval space_overhead : int option key
Sourceval max_space_overhead : int option key
Sourceval gc_verbosity : int option key
Sourceval gc_window_size : int option key
Sourceval custom_major_ratio : int option key
Sourceval custom_minor_ratio : int option key
Sourceval custom_minor_max_size : int option key

Generic keys

Some keys have a group optional argument. This group argument allows to give several keys a prefix.

For example, if we have two ip stacks, one external and one internal, We can use the group option to name them in and out. This way, the available keys will be --in-ip and --out-ip.

If a key has another, non-optional argument. It is the default value.

Keys are always named the same as their command line option.

File system keys

Sourceval kv_ro : ?group:string -> unit -> [ `Archive | `Crunch | `Direct | `Fat ] key

The type of key value store. Is one of "archive", "crunch", "direct", or "fat".

Sourceval block : ?group:string -> unit -> [ `XenstoreId | `BlockFile | `Ramdisk ] key

Block device keys

PRNG key

Sourceval prng : [ `Stdlib | `Nocrypto ] key

The type of pseudo random number generator to use by default.

Stack keys

Sourceval dhcp : ?group:string -> unit -> bool key

Enable dhcp. Is either true or false.

Sourceval net : ?group:string -> unit -> [ `Direct | `Socket ] option key

The type of stack. Is either "direct" or "socket".

Network keys

Sourceval interface : ?group:string -> string -> string key

A network interface.

Sourcemodule V4 : sig ... end

Ipv4 keys.

Sourcemodule V6 : sig ... end

Ipv6 keys.

Sourceval ipv4_only : ?group:string -> unit -> bool key

An option for dual stack to only use IPv4.

Sourceval ipv6_only : ?group:string -> unit -> bool key

An option for dual stack to only use IPv6.

Sourceval resolver : ?default:Ipaddr.t -> unit -> Ipaddr.t option key

The address of the DNS resolver to use.

Sourceval resolver_port : ?default:int -> unit -> int key

The port of the DNS resolver.

Sourceval syslog : Ipaddr.t option -> Ipaddr.t option key

The address to send syslog frames to.

Sourceval syslog_port : int option -> int option key

The port to send syslog frames to.

Sourceval syslog_hostname : string -> string key

The hostname to use in syslog frames.