Materials for the LambdaNantes 4 workshop: An Introduction to Unikernels with OCaml!
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add a simple web-server

xvw 5ecd007e 6d654d35

+63
+26
unikernels/web_hello_server/dune
··· 1 + (executable 2 + (name main) 3 + (package unikernels) 4 + (public_name unikernels.web_hello_server) 5 + (link_flags :standard -cclib "-z solo5-abi=hvt") 6 + (foreign_stubs 7 + (language c) 8 + (names web_hello_manifest)) 9 + (libraries mkernel mirage-crypto-rng-mkernel mnet gmp vifu)) 10 + 11 + (rule 12 + (targets web_hello_manifest.c) 13 + (deps web_hello_manifest.json) 14 + (enabled_if 15 + (= %{context_name} "solo5")) 16 + (action 17 + (run solo5-elftool gen-manifest web_hello_manifest.json web_hello_manifest.c))) 18 + 19 + (rule 20 + (targets web_hello_manifest.c) 21 + (enabled_if 22 + (= %{context_name} "default")) 23 + (action 24 + (write-file web_hello_manifest.c ""))) 25 + 26 + (vendored_dirs vendors)
+36
unikernels/web_hello_server/main.ml
··· 1 + (* Initialize a Secure Random Number generator. *) 2 + let rng = 3 + Mkernel.map 4 + (fun () -> 5 + Mirage_crypto_rng_mkernel.initialize (module Mirage_crypto_rng.Fortuna)) 6 + [] 7 + ;; 8 + 9 + (* An helper for finalizing resources (because Miou, the Scheduler, ask 10 + for every task to be terminated) *) 11 + let ( let@ ) finally fn = Fun.protect ~finally fn 12 + let clean_rng rng () = Mirage_crypto_rng_mkernel.kill rng 13 + let clean_stack stack () = Mnet.kill stack 14 + 15 + let handler req _server () = 16 + let open Vifu.Response.Syntax in 17 + let* () = Vifu.Response.with_text req "Hello, Lambda Nantes!\n" in 18 + Vifu.Response.respond `OK 19 + ;; 20 + 21 + (* Route of the application *) 22 + let routes = 23 + let open Vifu.Uri in 24 + Vifu.Route.[ get (rel /?? any) --> handler ] 25 + ;; 26 + 27 + (* Main program *) 28 + let () = 29 + let ipv4 = Ipaddr.V4.Prefix.of_string_exn "10.0.0.2/24" in 30 + Mkernel.run 31 + [ rng; Mnet.stack ~name:"service" ipv4 ] 32 + (fun rng (stack, tcp, _) () -> 33 + let@ () = clean_rng rng in 34 + let@ () = clean_stack stack in 35 + Vifu.run ~cfg:(Vifu.Config.v 80) tcp routes ()) 36 + ;;
+1
unikernels/web_hello_server/web_hello_manifest.json
··· 1 + {"type":"solo5.manifest","version":1,"devices":[{"type":"NET_BASIC","name":"service"}]}