From mirageos-devel-bounces@lists.xenproject.org Sat May 03 06:37:08 2025
Return-path: <mirageos-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 03 May 2025 06:37:08 +0000
Received: from list by lists.xenproject.org with outflank-mailman.974335.1362861 (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uB6Ua-0000cU-BE; Sat, 03 May 2025 06:36:56 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 974335.1362861; Sat, 03 May 2025 06:36:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uB6Ua-0000cN-7Y; Sat, 03 May 2025 06:36:56 +0000
Received: by outflank-mailman (input) for mailman id 974335;
 Thu, 01 May 2025 20:58:27 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=73yC=XR=fit.cvut.cz=belejmir@srs-se1.protection.inumbo.net>)
 id 1uAazC-00006j-C9
 for mirageos-devel@lists.xenproject.org; Thu, 01 May 2025 20:58:26 +0000
Received: from PA4PR04CU001.outbound.protection.outlook.com
 (mail-francecentralazlp170130007.outbound.protection.outlook.com
 [2a01:111:f403:c20a::7])
 by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 021a9b2d-26cf-11f0-9ffb-bf95429c2676;
 Thu, 01 May 2025 22:58:20 +0200 (CEST)
Received: from DUZPR06MB8817.eurprd06.prod.outlook.com (2603:10a6:10:4e2::12)
 by GVXPR06MB8876.eurprd06.prod.outlook.com (2603:10a6:150:11b::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8699.21; Thu, 1 May
 2025 20:58:15 +0000
Received: from DUZPR06MB8817.eurprd06.prod.outlook.com
 ([fe80::e449:d0d8:1c0b:cafa]) by DUZPR06MB8817.eurprd06.prod.outlook.com
 ([fe80::e449:d0d8:1c0b:cafa%2]) with mapi id 15.20.8678.028; Thu, 1 May 2025
 20:58:15 +0000
X-BeenThere: mirageos-devel@lists.xenproject.org
List-Id: Developer list for MirageOS <mirageos-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:mirageos-devel@lists.xenproject.org>
List-Help: <mailto:mirageos-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: mirageos-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "MirageOS-devel" <mirageos-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 021a9b2d-26cf-11f0-9ffb-bf95429c2676
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;
 b=eLu3qyHcbZM/KJuVF9KoQWxvylSQiDRo1wA87sAoKVXkneUo1zINosEnz3leYA9BeIw4P4G09XD+NL2cnCrSa2aDZWUn5ScDLNg6jx/cwSYxgwNP7GQtos0DEqPykGs3w7CcmuCEe1uI5Rve+cOSUdGGmNWnxvofUbVSKK6mSSgHjw8IoKv2pHGj36Bz3RbifqDW1dYNCkincyIT0Fll8PwJYPVFXk58pG9WydVHkI1thTmZenDoyWZ6X4b2d2/qkapWyfhQcv6y/Xk7hNRrVIqii3UtLpeo6JkNsI4w8CbbDWzfyZbCZoFam/q3VGDKFwr2OVBwuWhnFPqI6FpYIA==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
 s=arcselector10001;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=mWMWoB6cWo3+DooVh0kGVeDSPN5ccjZFv6zQtSsrUc8=;
 b=bMkrEsqaRmW+G6td5eR266XJFq3caynmLZ87I7KHJO+wagxMVWBtunBOJvT8sVovRcODJ1RWQynAoZFqECcJ/4QwB2C8XThPDoEzEzRLmEuI6erZGXGiwhVrb778qEc/BO/DGMD//kfmWKTe9Hv34fj0sTFlOZ1L0aLnjgYjPGbJQUoPEbJ3oZj0BD02VTS8pn9jYuqbP7rXBS6mQCNzqk8lxlkPrXLUEFMCL4emfEIkf4KH44+jzwT192RN8r+Ep5GIy+WdXEVE/r6X/5Fb01V8GyAkqMlBH9BpuQu+kOFkVvlN0UpCjjCfwKETmo0z0cvtKw2kHchZ0ZcPQecxHA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=fit.cvut.cz; dmarc=pass action=none header.from=fit.cvut.cz;
 dkim=pass header.d=fit.cvut.cz; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fit.cvut.cz;
 s=selector2;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=mWMWoB6cWo3+DooVh0kGVeDSPN5ccjZFv6zQtSsrUc8=;
 b=di28nFVfoKaaHwZzKFqRZbY/cOvWfIH1T2sKrDr2M2LrTLNgctAohnbztJbMLIRkqR3MnUs8YJ63z15H8Ggtz0TLaVmFOjpR0gkZwXU2bNNgVCVN9xRpk6MuuHwO4seisaKvYcJKetvS/z8KLtDiOSbtnn/K20YMQ8gXtgfshPADT8BbiRT55XG/o7a7viCz8ExyRCI3sFU4vpjWEgdg0kzD3d+vEy9NnJCf9Fjz2TW/fG+O14gHKlv/eoGOoag/68n0VkprgcMTqcwcJ41NSVnBLcpO6VqjHWtEDJ3uDCTIyFDdoK2vEVEYHoMEiHZeP5ByH6FEvBEWZiPu6acXfg==
From: "Belej, Miroslav" <belejmir@fit.cvut.cz>
To: "mirageos-devel@lists.xenproject.org"
	<mirageos-devel@lists.xenproject.org>
Subject: Help with a unikernel webserver
Thread-Topic: Help with a unikernel webserver
Thread-Index: Adu62jgWm+5y4Z7yQlC28pc13BQThg==
Date: Thu, 1 May 2025 20:58:15 +0000
Message-ID:
 <DUZPR06MB8817A4412D8EFE27480128869E822@DUZPR06MB8817.eurprd06.prod.outlook.com>
Accept-Language: en-US, sk-SK
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
authentication-results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=fit.cvut.cz;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: DUZPR06MB8817:EE_|GVXPR06MB8876:EE_
x-ms-office365-filtering-correlation-id: 5969a4e8-2b31-4cdc-de16-08dd88f2e483
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam:
 BCL:0;ARA:13230040|1800799024|376014|366016|38070700018|8096899003;
x-microsoft-antispam-message-info:
 =?Windows-1252?Q?KPyhXweNmOq26PKBa30n7ZMg4w95UXNDJn7ordlVtl2jOTHJjgrL7+kt?=
 =?Windows-1252?Q?9w9sBQy2jKiUXvnst1fKvVEF3mGGIOw4Cl5DOjHH41kDz8WS6uz24TXR?=
 =?Windows-1252?Q?GYHEBeMtHyAbjGO/D+ZC1mpRd14nkcxs0lYJXZPtcIfeDOcj6hToVXzl?=
 =?Windows-1252?Q?U3MpJkMWB7vH1gPCtqgU2zUI0mdgTLli6xEttbXj5stKXCL9BKxtcSTL?=
 =?Windows-1252?Q?EiQl3NWJYIJ6zkLGHcwWGlFOWOfHH1dF+DuCZc2DD2r7kPCaFc4QnS0l?=
 =?Windows-1252?Q?x33NIeaFpfWFfrF51L+NFm85LGzRcCDg8ESmUvQd5TSzWiYdcOuoJJoq?=
 =?Windows-1252?Q?PolHBhbdWailO3526YwvP25c+PLp+oZpRZ7AV3wrQY9TWxd5PHR2fOhJ?=
 =?Windows-1252?Q?RetGrdQGdvv8bCVjOz+pCAtv3OuwlLiA4K300GUJ6RdSf4ZS+LVx/cw6?=
 =?Windows-1252?Q?hG1Ny9m2K0M7L/JFyS09nkB41mf8xpZSGEZY3TTvilOCrkXsTXaCPUvT?=
 =?Windows-1252?Q?09Pqk85/uXx1MUZfbrI2h3LK9ncQRwp32v0xmuqfmh4JuKdZjQdlYMVQ?=
 =?Windows-1252?Q?YFNZ3dZoDblFDF085x4btEqtSvZlB+c87RQc0moTEDQg/mTcTDKlmFcd?=
 =?Windows-1252?Q?c4tE97AsDJ8yFiWZW+KOPyaIWcIjUvSN2F2/YVUkAzXFYL9kDIzX+otK?=
 =?Windows-1252?Q?Br5D8qjmOczO3rK9KB0pm/Ml94RxFQYnT9JgJyHCIWG4jUmbvExo/rWZ?=
 =?Windows-1252?Q?acCEmI4il/PI9ymLgvz531UF6pKR41GN9R2plYWE+tCqyzQ/jEoYSRqH?=
 =?Windows-1252?Q?HXKLDxYRRswz3+Cb6+Vg3EQc9dSRN0rzw6m622DlhdxzWj94wbw7/wyn?=
 =?Windows-1252?Q?c6uZixLxdkxNJm1SSEe+/sYCo+BKUBxiLicr+ySJWsX3ObvoGNgvDi3z?=
 =?Windows-1252?Q?2vSf4cwvnoN/rcvFhwD6mMNvGanylE8/CjmslolpbOtdgMwrMMlF7Yof?=
 =?Windows-1252?Q?I9d2a0FmM1r/agMJEC6itKKRw5bNOUaoPHEfeYI//seTwpN1AognwEMI?=
 =?Windows-1252?Q?s6LWhTfx/nMopRdDVHnNdQudO+c3xsVJKAAW3OG7lHQkMtl0epHmCWk3?=
 =?Windows-1252?Q?GbgoOyN4lMmNb7HiF4XOlin/JdzfsoLsYM5dKtsYHf7+ZywMxfQk4NOK?=
 =?Windows-1252?Q?THC+KTiMqvotlUaQEH7TjJA54TNGeg95mdjiqUYWzxpoXbM0+QX8cEBu?=
 =?Windows-1252?Q?zJGkjok8gxMLn8FRaIgaglCoA0+L5UOU/VpkNb9b9V3PJh+P8W/Ofq1g?=
 =?Windows-1252?Q?N18Naps9Ajkd1UrlFF0sKIuYPCCK7tDGP4LsxXmW1cTCf8sqi1F4zxYW?=
 =?Windows-1252?Q?vndbpbL/gVq9edRSja4Vlun3+www6RmkSagkXPTw7h/qN2aix9jpGgJX?=
 =?Windows-1252?Q?X8Pohr1LKYyHeoRkmligIOn2BueKCj7W3QSNiu+LMhxkKorgoKJV+iBR?=
 =?Windows-1252?Q?3uv+s7gpQDxwUOWq4JsdykAHJlJ4fx+70NvKTS9ePbaLkbuPT4I=3D?=
x-forefront-antispam-report:
 CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DUZPR06MB8817.eurprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(366016)(38070700018)(8096899003);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
 =?Windows-1252?Q?w5dDkMJ87pkbDjAPn0tCYj3Wmw1M6nWGQJGgdQPJKhZlyOG0j0E9k7jF?=
 =?Windows-1252?Q?qctrsITM4yb6BNrSSiHhwzT3Gc0iIHHUkaStiwS9ZO7tucrekmklfCwC?=
 =?Windows-1252?Q?Pc9Bb7VJG8dNr9PqnjztOSLbWxKV31Dd/LBMYeGBLefn2LT+3yuJkXfu?=
 =?Windows-1252?Q?TA/sEfR8zVDUxtnln1Rqg8ZLaWvLghPvMRo21nZFCfDRoxtIe0QMlm10?=
 =?Windows-1252?Q?3ncmPSImcu9npFs2hinKXjw7tF3r4pmYPosXDgXVeWTdPtVQrpTQPQOH?=
 =?Windows-1252?Q?TBhobIEtN47P1JHjkUYuTWTHvKNaYsDgN6FRUjINvz50v+c6TIgj9sEB?=
 =?Windows-1252?Q?wVbzKqOMCGRcWKnxZE8HrwzT18jsS5FXoEt2Yp4IYxJo10GyLynf+Bp6?=
 =?Windows-1252?Q?Pkt1EXZxliK+d+oB7DhKexgswqwuMZdXFJ7I1hZ87z+TQ8SmB4QcIZ6L?=
 =?Windows-1252?Q?bKirxfgOmHacwgxX1TqwGExHBOa6nEny3V3AwwPvXCpDAoLm4SKmCG1E?=
 =?Windows-1252?Q?LZGvOcDrdYVFWm16pqOlxIrnfM/57J0y2A8sFO6cX7WXBAaRLfwx0TRs?=
 =?Windows-1252?Q?sL1DluOjR6HFkIeRdCYiyGX2G6MMSzvgearXtxJYY5cpc4xFI1lAzrOv?=
 =?Windows-1252?Q?H3NZAdayrcl/kqtdKdOGhHDjVcIHzGJd4flCGc+EfFnBoS++ADUwkBVJ?=
 =?Windows-1252?Q?7dNnl7BtKfn4eg+Okwl/W3YMjUaBJ5MeXZeVLO1eir4mP2M23Heo+cU5?=
 =?Windows-1252?Q?j+UkjmD569RI5DMpSA40EwNyjvbaZDIwTNidWlXeSHJWVF8JBd97m6Vv?=
 =?Windows-1252?Q?b58skSkWTDR6GrOOgBhjh2jE4QbOVL6L/x4FRwNRbSTB5p1OUd0PaeeZ?=
 =?Windows-1252?Q?jQq1oZByeBWGI5Nym202lFKPeOt5UL67NbnIIGoqi+10XdD/Flo6m0Cx?=
 =?Windows-1252?Q?Le46lW6EVQvzMdv8zjFh2fHkuiZ8oes4bkEiANE0i/zr2ns5x4tWvdBk?=
 =?Windows-1252?Q?EWB+NlAfjzBix8TPftp4DsdQa1/iQgrgQDC+w3iZ25aiRlrH0itd224T?=
 =?Windows-1252?Q?8RJg36MMb9euvq0Aw/xiGFzeuSARMJs0AXItHMJQqRBKTnI93Qt+P+K+?=
 =?Windows-1252?Q?IY+gqgvzRBlivDq47wiVV+XKfqi1KxBzdTf8B1wiuMVuJtHShzGbcJdH?=
 =?Windows-1252?Q?nR/5JJL6aMFCSVnCZTZbBskJR2ruqbZFlQlaVl41Qt7TNJAVtVBEbXhJ?=
 =?Windows-1252?Q?vEjmpSNxKCeaXbcp56bFvjUvNjPbpvH2izf7C0GA6mzkSoO+Lr/J+i+C?=
 =?Windows-1252?Q?BEJihjIpxU9ccPcrLRStRvNI8zt481IRInqW192ntx+XNyEUJ4rbvo/w?=
 =?Windows-1252?Q?+XmstrPJPL30YjPClbCIguHiky00es+XiM+UUWQJx1WGHx6y+GzyzwTU?=
 =?Windows-1252?Q?CmeR43RphNuv+YuOm5iXEawiwsx0idSEWaQMjXpw8LWvMmdXRbXHPTI5?=
 =?Windows-1252?Q?NbpeWnjOM1k+D223Tq6zRUac4+3V/JDTR07wZGBH9c79KY05EfqFrc01?=
 =?Windows-1252?Q?ZW5FoAOHx/Y5w/wYWjWGXp1zPkaKVtRki/vTBUkoNNLA3vBzfq9/5xz3?=
 =?Windows-1252?Q?mRD6B1jq6R6U6eTIRF+U162LenRVD5iNOQ/YSthAYw9ORY8lzrMi9ao2?=
 =?Windows-1252?Q?YO1ZNlpDW1c=3D?=
Content-Type: multipart/alternative;
	boundary="_000_DUZPR06MB8817A4412D8EFE27480128869E822DUZPR06MB8817eurp_"
MIME-Version: 1.0
X-OriginatorOrg: fit.cvut.cz
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: DUZPR06MB8817.eurprd06.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 5969a4e8-2b31-4cdc-de16-08dd88f2e483
X-MS-Exchange-CrossTenant-originalarrivaltime: 01 May 2025 20:58:15.3655
 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: f345c406-5268-43b0-b19f-5862fa6833f8
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: uvKAyNUYqIMQavzpd6PngC9m3264pXT5twISnNkXCTuDC4/lJ/YTnt5rIsX8nnHuxSjM4bh1mYo99uqs0etM+w==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: GVXPR06MB8876

--_000_DUZPR06MB8817A4412D8EFE27480128869E822DUZPR06MB8817eurp_
Content-Type: text/plain; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

Hi, I am developing a unikernel webserver for my thesis and I would be glad=
 for help, as I am not really good with OCaml. I already have a running and=
 functional webserver, which acts as proxy between user and backend. Right =
now, it uses the same tcp/ip stack for both the user and for forwarding and=
 receiving request from backend. I need to have separate stack for both of =
them. I am using Cohttp_mirage library. Here is the code for the unikernel =
I currently have :
open Lwt.Infix


let target_host =3D "http://192.168.254.11"
let target_port =3D 8081

module Main
        (Pclock : Mirage_clock.PCLOCK)
        (Conduit : Conduit_mirage.S)
        (Resolver : Resolver_mirage.S)
        (Stack : Tcpip.Stack.V4V6) =3D struct

  module Client =3D Cohttp_mirage.Client.Make(Pclock)(Resolver)(Conduit)
  module Server =3D Cohttp_mirage.Server.Make(Conduit)
  (*Define the forwarding logic*)
  let forward_request uri body resolver conduit =3D
    let target_uri =3D Uri.of_string target_host in
    let target_uri =3D Uri.with_port target_uri (Some target_port) in
    let target_uri =3D Uri.with_path target_uri (Uri.path uri ) in
    Logs.info (fun f -> f "Forwarding to %s" (Uri.to_string target_uri));
    let headers =3D Cohttp.Header.init () in
    let body =3D Cohttp_lwt.Body.of_string body in

    let ctx =3D Client.ctx resolver conduit in

    Client.post ~ctx ~headers ~body target_uri >>=3D fun (resp, resp_body) =
->
    Cohttp_lwt.Body.to_string resp_body >|=3D fun body_str ->
    Logs.info (fun f -> f "Received response from %s" (Uri.to_string target=
_uri));
    (resp, body_str)


  (* Define the HTTP server callback *)
  let server_callback _conn req body resolver conduit =3D
    let uri =3D Cohttp.Request.uri req in
    let method_ =3D Cohttp.Request.meth req in
    Logs.info (fun f ->
            f "Received %s request for %s"
            (Cohttp.Code.string_of_method method_)
            (Uri.to_string uri));
    Cohttp_lwt.Body.to_string body >>=3D fun body_str ->
    let response_body =3D "This will be hashed-> " ^ body_str in
    Logs.info (fun f -> f "Response Body: %s" response_body);
    forward_request uri body_str resolver conduit >>=3D fun (response, resp=
onse_body) ->
    Logs.info (fun f -> f "Response body from forwarded request: %s" respon=
se_body);
    Lwt.return (response, Cohttp_lwt.Body.of_string response_body)


    (* Start the HTTP server *)
  let start _pclock _conduit _resolver stack =3D
    Logs.info (fun f -> f "Before port");
    let port =3D 8080 in
    Logs.info (fun f -> f "Defined port");
    Logs.info (fun f -> f "Starting MirageOS HTTP server on port %d" port);
    let callback _conn req body =3D server_callback _conn req body _resolve=
r _conduit in
    let mode : Conduit_mirage.server =3D `TCP port in
    let server =3D Server.make ~callback () in

    Server.listen stack mode server
end

with config.ml :

open Mirage
let stack =3D generic_stackv4v6 default_network

let net =3D netif =93secret=94
let secret_stack =3D generic_stackv4v6 net
(* Main unikernel module *)
let main =3D
        main
        ~packages:[package "cohttp-mirage"]
        "Unikernel.Main"
        (pclock @-> conduit @-> resolver @-> stackv4v6 @-> job)

let () =3D
  register "frontend-server" [ main $ default_posix_clock $ conduit_direct =
stack $ resolver_dns stack $ stack ]

So I would like to use the secret_stack for communicating with the backend.=
 I am thankful for any response.



--_000_DUZPR06MB8817A4412D8EFE27480128869E822DUZPR06MB8817eurp_
Content-Type: text/html; charset="Windows-1252"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3DWindows-1=
252">
<style type=3D"text/css" style=3D"display:none;"> P {margin-top:0;margin-bo=
ttom:0;} </style>
</head>
<body dir=3D"ltr">
<p style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11pt;=
"><span style=3D"color: rgb(0, 0, 0);">Hi, I am developing a unikernel webs=
erver for my thesis and I would be glad for help, as I am not really good w=
ith OCaml. I already have a running
 and functional webserver, which acts as proxy between user and backend. Ri=
ght now, it uses the same tcp/ip stack for both the user and for forwarding=
 and receiving request from backend. I need to have separate stack for both=
 of them. I am using Cohttp_mirage
 library. Here is the code for the unikernel I currently have :<br>
open Lwt.Infix</span></p>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let target_host =3D &quot;http://192.168.254.11&quot;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let target_port =3D 8081</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
module Main</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Pclock : Mirage_clock.PCLOCK)</=
div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Conduit : Conduit_mirage.S)</di=
v>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Resolver : Resolver_mirage.S)</=
div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Stack : Tcpip.Stack.V4V6) =3D s=
truct</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; module Client =3D Cohttp_mirage.Client.Make(Pclock)(Resolver)(Condui=
t)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; module Server =3D Cohttp_mirage.Server.Make(Conduit)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; (*Define the forwarding logic*)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; let forward_request uri body resolver conduit =3D&nbsp;&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let target_uri =3D Uri.of_string target_host in&nbsp;</d=
iv>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let target_uri =3D Uri.with_port target_uri (Some target=
_port) in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let target_uri =3D Uri.with_path target_uri (Uri.path ur=
i ) in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Forwarding to %s&quot; (U=
ri.to_string target_uri));</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let headers =3D Cohttp.Header.init () in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let body =3D Cohttp_lwt.Body.of_string body in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let ctx =3D Client.ctx resolver conduit in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Client.post ~ctx ~headers ~body target_uri &gt;&gt;=3D f=
un (resp, resp_body) -&gt;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Cohttp_lwt.Body.to_string resp_body &gt;|=3D fun body_st=
r -&gt;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Received response from %s=
&quot; (Uri.to_string target_uri));</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; (resp, body_str)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; (* Define the HTTP server callback *)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; let server_callback _conn req body resolver conduit =3D</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let uri =3D Cohttp.Request.uri req in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let method_ =3D Cohttp.Request.meth req in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f &quot;=
Received %s request for %s&quot;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Cohttp.=
Code.string_of_method method_)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Uri.to_=
string uri));</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Cohttp_lwt.Body.to_string body &gt;&gt;=3D fun body_str =
-&gt;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let response_body =3D &quot;This will be hashed-&gt; &qu=
ot; ^ body_str in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Response Body: %s&quot; r=
esponse_body);</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; forward_request uri body_str resolver conduit &gt;&gt;=
=3D fun (response, response_body) -&gt;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Response body from forwar=
ded request: %s&quot; response_body);</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Lwt.return (response, Cohttp_lwt.Body.of_string response=
_body)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; (* Start the HTTP server *)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; let start _pclock _conduit _resolver stack =3D</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Before port&quot;);</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let port =3D 8080 in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Defined port&quot;);</div=
>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Logs.info (fun f -&gt; f &quot;Starting MirageOS HTTP se=
rver on port %d&quot; port);</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let callback _conn req body =3D server_callback _conn re=
q body _resolver _conduit in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let mode : Conduit_mirage.server =3D `TCP port in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; let server =3D Server.make ~callback () in</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp; Server.listen stack mode server</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
end<br>
<br>
with config.ml :</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
<br>
open Mirage</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let stack =3D generic_stackv4v6 default_network</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let net =3D netif =93secret=94</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let secret_stack =3D generic_stackv4v6 net</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
(* Main unikernel module *)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let main =3D</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~packages:[package &quot;cohttp-=
mirage&quot;]</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;Unikernel.Main&quot;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (pclock @-&gt; conduit @-&gt; re=
solver @-&gt; stackv4v6 @-&gt; job)</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
let () =3D</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp; register &quot;frontend-server&quot; [ main $ default_posix_clock $ =
conduit_direct stack $ resolver_dns stack $ stack ]<br>
<br>
So I would like to use the secret_stack for communicating with the backend.=
 I am thankful for any response.</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t; color: rgb(0, 0, 0);">
&nbsp;</div>
<div style=3D"margin: 0in; font-family: Calibri, sans-serif; font-size: 11p=
t;"><br>
</div>
</body>
</html>

--_000_DUZPR06MB8817A4412D8EFE27480128869E822DUZPR06MB8817eurp_--


From mirageos-devel-bounces@lists.xenproject.org Mon May 05 07:27:53 2025
Return-path: <mirageos-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 05 May 2025 07:27:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.975848.1363145 (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uBqEo-00049S-Er; Mon, 05 May 2025 07:27:42 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 975848.1363145; Mon, 05 May 2025 07:27:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uBqEo-00049L-Br; Mon, 05 May 2025 07:27:42 +0000
Received: by outflank-mailman (input) for mailman id 975848;
 Mon, 05 May 2025 07:27:41 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=/nxO=XV=mehnert.org=hannes@srs-se1.protection.inumbo.net>)
 id 1uBqEm-00049F-V3
 for mirageos-devel@lists.xenproject.org; Mon, 05 May 2025 07:27:41 +0000
Received: from mail.mehnert.org (mail.mehnert.org [213.73.89.200])
 by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 6b8a65fb-2982-11f0-9ffb-bf95429c2676;
 Mon, 05 May 2025 09:27:38 +0200 (CEST)
Received: from [192.168.42.80] (i5C74C256.versanet.de [92.116.194.86])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
 client-signature RSA-PSS (2048 bits) client-digest SHA256)
 (Client CN "hannes@mehnert.org", Issuer "mehnert root CA" (not verified))
 by mail.mehnert.org (Postfix) with ESMTPS id 149074716;
 Mon,  5 May 2025 09:27:37 +0200 (CEST)
X-BeenThere: mirageos-devel@lists.xenproject.org
List-Id: Developer list for MirageOS <mirageos-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:mirageos-devel@lists.xenproject.org>
List-Help: <mailto:mirageos-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: mirageos-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "MirageOS-devel" <mirageos-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 6b8a65fb-2982-11f0-9ffb-bf95429c2676
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mehnert.org; s=mail;
	t=1746430057; bh=QjdARNJRO/vp+u7FVsnOGa4y8fgPZdMLfKGoZcW+8p8=;
	h=Date:Subject:To:References:From:In-Reply-To;
	b=uo44/dLL0+Afa67MnvfJ2Hjp44WQH1x6YANNkmzn5WrFVgzh40UWL//nXfEhXtx0E
	 qxKNfa6S3IOUSokBTO+9grquKoQJgNZk8vOaJZrnruCOlJRg4+aR7xPd5UZ513ZYJt
	 JkYXeGQgmWdjAqX95T1dYgbZSOP+OolHBD55icFGBzf5nbv4HCUF01W652QCI//VaP
	 rNUQKQZKAe+O+IFk0gV0v33FNP0tb2/dXM0kqynXmqHtnJrKdo014NBqzg7S5LfXtW
	 3H/O44iu+hiSDAcCruxHLGIr5PHNI/Xr/+C7gRNDkw+v2yCtoHCHF6MOWAbG7yu8UH
	 odkXU+uPsDdkQ==
Message-ID: <8648e09a-a706-43ec-b82c-4cb7554a1523@mehnert.org>
Date: Mon, 5 May 2025 09:27:36 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: Help with a unikernel webserver
Content-Language: en-US
To: "Belej, Miroslav" <belejmir@fit.cvut.cz>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>
References: <DUZPR06MB8817A4412D8EFE27480128869E822@DUZPR06MB8817.eurprd06.prod.outlook.com>
From: Hannes Mehnert <hannes@mehnert.org>
Autocrypt: addr=hannes@mehnert.org; keydata=
 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
In-Reply-To: <DUZPR06MB8817A4412D8EFE27480128869E822@DUZPR06MB8817.eurprd06.prod.outlook.com>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit

Dear Miroslav,


thanks for reaching out.

So, your config.ml:
 > open Mirage
 > let stack = generic_stackv4v6 default_network
 >
 > let net = netif “secret”
 > let secret_stack = generic_stackv4v6 net
 > (* Main unikernel module *)
 > let main =
 >          main
 >          ~packages:[package "cohttp-mirage"]
 >          "Unikernel.Main"
 >          (pclock @-> conduit @-> resolver @-> stackv4v6 @-> job)
 >
 > let () =
 >    register "frontend-server" [ main $ default_posix_clock $ 
conduit_direct stack $ resolver_dns stack $ stack ]

Here, you'll need to use & provide the "secret_stack":

let main =
          main
          ~packages:[package "cohttp-mirage"]
          "Unikernel.Main"
          (pclock @-> conduit @-> conduit @-> resolver @-> stackv4v6 @-> 
job)

let () =
    register "frontend-server" [ main $ default_posix_clock $ 
conduit_direct stack $ conduit_direct secret_stack $ resolver_dns 
secret_stack $ stack ]


Which will then result in your unikernel being a bit modified:
 > module Main
 >          (Pclock : Mirage_clock.PCLOCK)
 >          (Conduit : Conduit_mirage.S)
 >          (Resolver : Resolver_mirage.S)
 >          (Stack : Tcpip.Stack.V4V6) = struct
 >
 >    module Client = Cohttp_mirage.Client.Make(Pclock)(Resolver)(Conduit)
 >    module Server = Cohttp_mirage.Server.Make(Conduit)

will now be:

module Main
          (Pclock : Mirage_clock.PCLOCK)
          (Conduit : Conduit_mirage.S)
          (Secret_conduit : Conduit_mirage.S)
          (Secret_resolver : Resolver_mirage.S)
          (Stack : Tcpip.Stack.V4V6) = struct

    module Client = 
Cohttp_mirage.Client.Make(Pclock)(Secret_resolver)(Secret_conduit)
    module Server = Cohttp_mirage.Server.Make(Conduit)


And then, also your "start" function is slightly adapted:
 >    let start _pclock _conduit _resolver stack =

will be:
    let start _pclock _conduit _secret_conduit _secret_resolver stack =


And then your HTTP client will use the secret network stack, while the 
server uses the default one.

Hope this helps,

Hannes


On 01/05/2025 22:58, Belej, Miroslav wrote:
> Hi, I am developing a unikernel webserver for my thesis and I would be glad for help, as I am not really good with OCaml. I already have a running and functional webserver, which acts as proxy between user and backend. Right now, it uses the same tcp/ip stack for both the user and for forwarding and receiving request from backend. I need to have separate stack for both of them. I am using Cohttp_mirage library. Here is the code for the unikernel I currently have :
> open Lwt.Infix
> 
> 
> let target_host = "http://192.168.254.11"
> let target_port = 8081
> 
> module Main
>          (Pclock : Mirage_clock.PCLOCK)
>          (Conduit : Conduit_mirage.S)
>          (Resolver : Resolver_mirage.S)
>          (Stack : Tcpip.Stack.V4V6) = struct
> 
>    module Client = Cohttp_mirage.Client.Make(Pclock)(Resolver)(Conduit)
>    module Server = Cohttp_mirage.Server.Make(Conduit)
>    (*Define the forwarding logic*)
>    let forward_request uri body resolver conduit =
>      let target_uri = Uri.of_string target_host in
>      let target_uri = Uri.with_port target_uri (Some target_port) in
>      let target_uri = Uri.with_path target_uri (Uri.path uri ) in
>      Logs.info (fun f -> f "Forwarding to %s" (Uri.to_string target_uri));
>      let headers = Cohttp.Header.init () in
>      let body = Cohttp_lwt.Body.of_string body in
> 
>      let ctx = Client.ctx resolver conduit in
> 
>      Client.post ~ctx ~headers ~body target_uri >>= fun (resp, resp_body) ->
>      Cohttp_lwt.Body.to_string resp_body >|= fun body_str ->
>      Logs.info (fun f -> f "Received response from %s" (Uri.to_string target_uri));
>      (resp, body_str)
> 
> 
>    (* Define the HTTP server callback *)
>    let server_callback _conn req body resolver conduit =
>      let uri = Cohttp.Request.uri req in
>      let method_ = Cohttp.Request.meth req in
>      Logs.info (fun f ->
>              f "Received %s request for %s"
>              (Cohttp.Code.string_of_method method_)
>              (Uri.to_string uri));
>      Cohttp_lwt.Body.to_string body >>= fun body_str ->
>      let response_body = "This will be hashed-> " ^ body_str in
>      Logs.info (fun f -> f "Response Body: %s" response_body);
>      forward_request uri body_str resolver conduit >>= fun (response, response_body) ->
>      Logs.info (fun f -> f "Response body from forwarded request: %s" response_body);
>      Lwt.return (response, Cohttp_lwt.Body.of_string response_body)
> 
> 
>      (* Start the HTTP server *)
>    let start _pclock _conduit _resolver stack =
>      Logs.info (fun f -> f "Before port");
>      let port = 8080 in
>      Logs.info (fun f -> f "Defined port");
>      Logs.info (fun f -> f "Starting MirageOS HTTP server on port %d" port);
>      let callback _conn req body = server_callback _conn req body _resolver _conduit in
>      let mode : Conduit_mirage.server = `TCP port in
>      let server = Server.make ~callback () in
> 
>      Server.listen stack mode server
> end
> 
> with config.ml :
> 
> open Mirage
> let stack = generic_stackv4v6 default_network
> 
> let net = netif “secret”
> let secret_stack = generic_stackv4v6 net
> (* Main unikernel module *)
> let main =
>          main
>          ~packages:[package "cohttp-mirage"]
>          "Unikernel.Main"
>          (pclock @-> conduit @-> resolver @-> stackv4v6 @-> job)
> 
> let () =
>    register "frontend-server" [ main $ default_posix_clock $ conduit_direct stack $ resolver_dns stack $ stack ]
> 
> So I would like to use the secret_stack for communicating with the backend. I am thankful for any response.



From mirageos-devel-bounces@lists.xenproject.org Fri May 23 09:26:09 2025
Return-path: <mirageos-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 23 May 2025 09:26:09 +0000
Received: from list by lists.xenproject.org with outflank-mailman.995500.1377879 (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uIOf8-0004wB-1m; Fri, 23 May 2025 09:25:58 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 995500.1377879; Fri, 23 May 2025 09:25:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uIOf7-0004w4-V2; Fri, 23 May 2025 09:25:57 +0000
Received: by outflank-mailman (input) for mailman id 995500;
 Fri, 23 May 2025 09:25:55 +0000
Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254]
 helo=se1-gles-sth1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=0J3q=YH=irisa.fr=lucas.aubard@srs-se1.protection.inumbo.net>)
 id 1uIOf5-0004vv-UK
 for mirageos-devel@lists.xenproject.org; Fri, 23 May 2025 09:25:55 +0000
Received: from mail2-relais-roc.national.inria.fr
 (mail2-relais-roc.national.inria.fr [192.134.164.83])
 by se1-gles-sth1.inumbo.com (Halon) with ESMTPS
 id ec68bc1c-37b7-11f0-a2fb-13f23c93f187;
 Fri, 23 May 2025 11:25:54 +0200 (CEST)
Received: from zcs2-store3.inria.fr ([128.93.142.8])
 by mail2-relais-roc.national.inria.fr with ESMTP; 23 May 2025 11:25:53 +0200
X-BeenThere: mirageos-devel@lists.xenproject.org
List-Id: Developer list for MirageOS <mirageos-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:mirageos-devel@lists.xenproject.org>
List-Help: <mailto:mirageos-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: mirageos-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "MirageOS-devel" <mirageos-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: ec68bc1c-37b7-11f0-a2fb-13f23c93f187
Authentication-Results: mail2-relais-roc.national.inria.fr; dkim=none (message not signed) header.i=none; spf=Pass smtp.mailfrom=lucas.aubard@irisa.fr; spf=None smtp.helo=postmaster@zcs2-store3.inria.fr
Received-SPF: Pass (mail2-relais-roc.national.inria.fr: domain of
  lucas.aubard@irisa.fr designates 128.93.142.8 as permitted
  sender) identity=mailfrom; client-ip=128.93.142.8;
  receiver=mail2-relais-roc.national.inria.fr;
  envelope-from="lucas.aubard@irisa.fr";
  x-sender="lucas.aubard@irisa.fr"; x-conformance=spf_only;
  x-record-type="v=spf1"; x-record-text="v=spf1
  ip4:128.93.142.0/24 ip4:192.134.164.0/24 ip4:128.93.162.160
  ip4:89.107.174.7 mx ~all"
Received-SPF: None (mail2-relais-roc.national.inria.fr: no sender
  authenticity information available from domain of
  postmaster@zcs2-store3.inria.fr) identity=helo;
  client-ip=128.93.142.8;
  receiver=mail2-relais-roc.national.inria.fr;
  envelope-from="lucas.aubard@irisa.fr";
  x-sender="postmaster@zcs2-store3.inria.fr";
  x-conformance=spf_only
X-IronPort-AV: E=Sophos;i="6.15,308,1739833200"; 
   d="scan'208";a="223547110"
X-MGA-submission: =?us-ascii?q?MDGKiB3230OfN0EDfP0UC9J6yfiYkE8nm7ikNB?=
 =?us-ascii?q?7H9QJNEd8edf2nNOJYfDXD/PX7ZL96GQFVp0O8wESBVGETivJZj5TQxQ?=
 =?us-ascii?q?WfkaxWvHCcTD9dDGXQGNTGJuZVvLu4U+cclJPc88G33mFUqhfMjm10XH?=
 =?us-ascii?q?/4mNLgp/nKGexUvhfpVpqSBg=3D=3D?=
Date: Fri, 23 May 2025 11:25:52 +0200 (CEST)
From: Lucas Aubard <lucas.aubard@irisa.fr>
To: Anil Madhavapeddy <avsm2@cl.cam.ac.uk>
Cc: mirageos-devel <mirageos-devel@lists.xenproject.org>, 
	Johan Mazel <Johan.Mazel@ssi.gouv.fr>, 
	gilles guette <gilles.guette@imt-atlantique.fr>, 
	Pierre Chifflier <Pierre.Chifflier@ssi.gouv.fr>
Message-ID: <1159741276.14710869.1747992352783.JavaMail.zimbra@irisa.fr>
In-Reply-To: <AD89A625-1B49-439E-A845-29B1FF0FF835@cl.cam.ac.uk>
References: <530642224.595613.1743087821949.JavaMail.zimbra@irisa.fr> <5ba1b75e-1359-4b9b-88c7-2ce885e0c105@mehnert.org> <1455111118.10665780.1744788505794.JavaMail.zimbra@irisa.fr> <AD89A625-1B49-439E-A845-29B1FF0FF835@cl.cam.ac.uk>
Subject: Re: Failed TCP connection reset when processing overlapping data
 segments
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Originating-IP: [131.254.15.46]
X-Mailer: Zimbra 10.1.6_GA_4744 (ZimbraWebClient - FF138 (Linux)/10.1.6_GA_4744)
Thread-Topic: Failed TCP connection reset when processing overlapping data segments
Thread-Index: d5mif/SINoER4xfT6e4lB13hqXR/tw==

Dear Anil,=20

Sorry I missed your answer!

I think the three reasons that you cite may be relevant but I do not have a=
ny relevant information on these three aspects.

To extend what I said about OS behaviors, we observe that some embedded sta=
cks (lwIP, uIP, picoTCP) ignore overlapping data segments just as mirage-tc=
pip. However, this behavior choice is probably due to the resource constrai=
nts.

I compared RFC793 and RFC9293 regarding the two sentences (in parts 3.10 an=
d 4) that I cited in my previous mail, and both sentences are present in bo=
th documents. So, I do not think that anything changed since 2013.
My main argument for accepting overlapping segment is the fact that these t=
wo sentences are present in the RFCs but I do not have any additional evide=
nce.

Best regards,=20
Lucas Aubard.

----- Mail original -----
> De: "Anil Madhavapeddy" <avsm2@cl.cam.ac.uk>
> =C3=80: "Lucas Aubard" <lucas.aubard@irisa.fr>
> Cc: "Hannes Mehnert" <hannes@mehnert.org>, "mirageos-devel" <mirageos-dev=
el@lists.xenproject.org>, "Johan Mazel"
> <Johan.Mazel@ssi.gouv.fr>, "gilles guette" <gilles.guette@imt-atlantique.=
fr>, "Pierre Chifflier"
> <Pierre.Chifflier@ssi.gouv.fr>
> Envoy=C3=A9: Mercredi 16 Avril 2025 15:20:05
> Objet: Re: Failed TCP connection reset when processing overlapping data s=
egments

>> On Apr 16, 2025, at 8:28=E2=80=AFAM, Lucas Aubard <lucas.aubard@irisa.fr=
> wrote:
>>=20
>> The behavior you describe for processing overlapping data segments makes=
 sense
>> to me.
>=20
> I must admit I'm still in the dark as to why this makes more sense today =
to do
> this than in 2013, when we dropped that data in preference for an unambig=
uous
> retransmission in case the stack was under attack. What's changed such th=
at we
> can now accept overlapping TCP segments for the same data?
>=20
> There are a few reasons I can think of that may explain it (but I haven't
> checked):
> - perhaps datacenter Linux wants to avoid retransmissions at all costs
> - perhaps the security model has been revved somehow to delegate this to =
the
> higher levels of the stack (DTLS)
> - or perhaps out of order transmissions are more common (multipath?) so w=
e now
> need to deal with it.
>=20
> I'm not really sure which of these are true or not, but without determini=
ng
> this, it seems unwise to depend on other stacks' behavior here.
>=20
> best,
> Anil


From mirageos-devel-bounces@lists.xenproject.org Tue May 27 14:53:53 2025
Return-path: <mirageos-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 27 May 2025 14:53:53 +0000
Received: from list by lists.xenproject.org with outflank-mailman.998498.1379212 (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uJvgQ-0001ne-Sl; Tue, 27 May 2025 14:53:38 +0000
X-Outflank-Mailman: Message body and most headers restored to incoming version
Received: by outflank-mailman (output) from mailman id 998498.1379212; Tue, 27 May 2025 14:53:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.92)
	(envelope-from <mirageos-devel-bounces@lists.xenproject.org>)
	id 1uJvgQ-0001nX-Pn; Tue, 27 May 2025 14:53:38 +0000
Received: by outflank-mailman (input) for mailman id 998498;
 Tue, 27 May 2025 14:53:36 +0000
Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50]
 helo=se1-gles-flk1.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from
 <SRS0=pXiL=YL=mehnert.org=hannes@srs-se1.protection.inumbo.net>)
 id 1uJvgO-0001nQ-Cu
 for mirageos-devel@lists.xenproject.org; Tue, 27 May 2025 14:53:36 +0000
Received: from mail.mehnert.org (mail.mehnert.org [213.73.89.200])
 by se1-gles-flk1.inumbo.com (Halon) with ESMTPS
 id 5aa2a035-3b0a-11f0-b894-0df219b8e170;
 Tue, 27 May 2025 16:53:31 +0200 (CEST)
Received: from [192.168.42.80] (i5C74C0C5.versanet.de [92.116.192.197])
 (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
 client-signature RSA-PSS (2048 bits) client-digest SHA256)
 (Client CN "hannes@mehnert.org", Issuer "mehnert root CA" (not verified))
 by mail.mehnert.org (Postfix) with ESMTPS id 9BBF3D8B1
 for <mirageos-devel@lists.xenproject.org>;
 Tue, 27 May 2025 16:53:29 +0200 (CEST)
X-BeenThere: mirageos-devel@lists.xenproject.org
List-Id: Developer list for MirageOS <mirageos-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:mirageos-devel@lists.xenproject.org>
List-Help: <mailto:mirageos-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/mirageos-devel>, 
 <mailto:mirageos-devel-request@lists.xenproject.org?subject=subscribe>
Errors-To: mirageos-devel-bounces@lists.xenproject.org
Precedence: list
Sender: "MirageOS-devel" <mirageos-devel-bounces@lists.xenproject.org>
X-Inumbo-ID: 5aa2a035-3b0a-11f0-b894-0df219b8e170
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mehnert.org; s=mail;
	t=1748357609; bh=PVzjAbnX6tx7D3nCSjTFmthldWoctqk2oldB13X4MPM=;
	h=Date:Subject:From:To:References:In-Reply-To;
	b=GNATR+vDYlPHZoWKGjw9hFedGh+4jM0Qk/Mfdx5+NosuUnZZaIvB2pkrqBHXfay2P
	 1iXjgyph9YsL+Mle61gIzhklyJ0Ab6ytVENhziDUzlJSvLIo79L+7ln03bj3KtFolR
	 CARgMs6Q/UetxkQYyYWjvAJsxf5O6ULNDc+MydFA4zx2EPnQpnRn1/f8I73x755cvH
	 /nZHAXYViaQIEgYzrRpef87xKXeoI7HtrCZahI+7+xpCfyHpBzusSJqFK7+xegsvG0
	 IxIIl4lOvYEgAZ54bDlof59UcfkIxxP0T8Cqx9fnTkx4jN6HcrQBRKAdAVr8h8B6pw
	 SEYaS2lAVHlzw==
Message-ID: <26981899-bd43-4999-9ac6-68cfc6a5e88f@mehnert.org>
Date: Tue, 27 May 2025 16:53:28 +0200
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: next meeting: Monday June 2nd 10:00 - 12:00 CEST
From: Hannes Mehnert <hannes@mehnert.org>
To: mirageos-devel@lists.xenproject.org
References: <5da4c9e7-5753-46d2-ba32-f1d88f4ea87d@mehnert.org>
 <45c98f33-830a-47fa-95bb-9e1653922fef@mehnert.org>
Content-Language: en-US
Autocrypt: addr=hannes@mehnert.org; keydata=
 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
In-Reply-To: <45c98f33-830a-47fa-95bb-9e1653922fef@mehnert.org>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Dear everyone,

due to Internet connectivity and failure to remind ourselves there was 
no meeting last week.

Let's meet next Monday again.


Looking forward to see you there,

Hannes

On 29/04/2025 12:45, Hannes Mehnert wrote:
> Hello again,
> 
> our next meeting is on May 19th (in 2.5 weeks) -- live from the retreat 
> (let's see how that goes). We'll be at https://meet.jit.si/MirageOS -- 
> see our shared pad at https://pad.data.coop/To6IOSeNSOK9kFVlgo7XWw?both# 
> for notes and agenda (add your talking points there) :)


