diff --git a/projects/miragesdk/src/sdk/IO.ml b/projects/miragesdk/src/sdk/IO.ml index 7271e8962..13790e6d7 100644 --- a/projects/miragesdk/src/sdk/IO.ml +++ b/projects/miragesdk/src/sdk/IO.ml @@ -35,7 +35,7 @@ let pp ppf (Flow (name, _, _)) = Fmt.string ppf name type t = flow -let forward ~src ~dst = +let forward ?(verbose=false) ~src ~dst = let rec loop () = read src >>= function | Ok `Eof -> @@ -45,8 +45,12 @@ let forward ~src ~dst = Log.err (fun l -> l "forward[%a => %a] %a" pp src pp dst pp_error e); Lwt.return_unit | Ok (`Data buf) -> - Log.debug (fun l -> l "forward[%a => %a] %d bytes" - pp src pp dst @@ Cstruct.len buf); + Log.debug (fun l -> + let payload = + if verbose then Fmt.strf "[%S]" @@ Cstruct.to_string buf + else Fmt.strf "%d bytes" (Cstruct.len buf) + in + l "forward[%a => %a] %s" pp src pp dst payload); write dst buf >>= function | Ok () -> loop () | Error e -> @@ -56,8 +60,8 @@ let forward ~src ~dst = in loop () -let proxy f1 f2 = +let proxy ?verbose f1 f2 = Lwt.join [ - forward ~src:f1 ~dst:f2; - forward ~src:f2 ~dst:f1; + forward ?verbose ~src:f1 ~dst:f2; + forward ?verbose ~src:f2 ~dst:f1; ] diff --git a/projects/miragesdk/src/sdk/IO.mli b/projects/miragesdk/src/sdk/IO.mli index 2883e34d2..fa1e0450d 100644 --- a/projects/miragesdk/src/sdk/IO.mli +++ b/projects/miragesdk/src/sdk/IO.mli @@ -12,10 +12,14 @@ val create: (module Mirage_flow_lwt.S with type flow = 'a) -> 'a -> string -> fl val pp: flow Fmt.t (** [pp] is the pretty-printer for IO flows. *) -val forward: src:t -> dst:t -> unit Lwt.t -(** [forward ~src ~dst] forwards writes from [src] to [dst]. Block - until either [src] or [dst] is closed. *) +val forward: ?verbose:bool -> src:t -> dst:t -> unit Lwt.t +(** [forward ?verbose ~src ~dst] forwards writes from [src] to + [dst]. Block until either [src] or [dst] is closed. If [verbose] + is set (by default it is not), show the raw flow in debug mode, + otherwise just show the lenght. *) -val proxy: t -> t -> unit Lwt.t -(** [proxy x y] is the same as [forward x y <*> forward y x]. Block - until both flows are closed. *) +val proxy: ?verbose:bool -> t -> t -> unit Lwt.t +(** [proxy ?verbose x y] is the same as [forward x y <*> forward y + x]. Block until both flows are closed. If [verbose] is set (by + default it is not), show the raw flow in debug mode, otherwise + just show the lenght. *) diff --git a/projects/miragesdk/src/sdk/init.ml b/projects/miragesdk/src/sdk/init.ml index 1ef40cb05..d0590cd28 100644 --- a/projects/miragesdk/src/sdk/init.ml +++ b/projects/miragesdk/src/sdk/init.ml @@ -291,11 +291,11 @@ let exec_and_forward ?(handlers=block_for_ever) ~pid ~cmd ~net ~ctl t = Lwt.pick ([ wait (); (* data *) - IO.proxy net priv_net; + IO.proxy ~verbose:true net priv_net; (* redirect the calf stdout to the shim stdout *) - IO.forward ~src:priv_stdout ~dst:Fd.(flow stdout); - IO.forward ~src:priv_stderr ~dst:Fd.(flow stderr); + IO.forward ~verbose:false ~src:priv_stdout ~dst:Fd.(flow stdout); + IO.forward ~verbose:false ~src:priv_stderr ~dst:Fd.(flow stderr); (* TODO: Init.Fd.forward ~src:Init.Pipe.(priv metrics) ~dst:Init.Fd.metric; *) ctl priv_ctl;