From nobody Tue Feb 10 04:34:39 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=cloud.com ARC-Seal: i=1; a=rsa-sha256; t=1725883401; cv=none; d=zohomail.com; s=zohoarc; b=OFPk8a7U/wLj93f3IO2CwPpKW1eLO13VsN3mqZFV/UfXjYqPqRBOItKCKk3EWNJF2GWouEJL+NSZsZ4qsLN6ZWAeynxDJl8Tf8rgNaiDzj8Es8zDCqVDGfofZ8BCkrVJkLgh4v6dO4BA6F7KvrWjMbpWu2cZM1dxL8zRRq2akXY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1725883401; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=V5YgYhePmve9+WOG0QJ+xJp2hifKt7rcNXrTDKjPMNw=; b=Jsiyhnf0Dsb+W5aCRm/bSSPGqTRnGOXZhlWCQq+8meArAiX0xU/pwstJh8YDq1lwkuJYrVYkkFFr8+bcvH0/FIec+1KwkHf643UxAua2woxsVZ+D8GAt9fL1R3hqHRabXEU7gljyaIgKvHJeh2Mfvfp5GPHu8GOA88TSvdcoYr0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1725883401698778.8467222827414; Mon, 9 Sep 2024 05:03:21 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.794382.1203294 (Exim 4.92) (envelope-from ) id 1snd6n-00016K-20; Mon, 09 Sep 2024 12:03:05 +0000 Received: by outflank-mailman (output) from mailman id 794382.1203294; Mon, 09 Sep 2024 12:03:05 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1snd6m-00016D-Vf; Mon, 09 Sep 2024 12:03:04 +0000 Received: by outflank-mailman (input) for mailman id 794382; Mon, 09 Sep 2024 12:03:03 +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 ) id 1snd6l-0000ce-Ha for xen-devel@lists.xenproject.org; Mon, 09 Sep 2024 12:03:03 +0000 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [2a00:1450:4864:20::52c]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 770a7cff-6ea3-11ef-a0b5-8be0dac302b0; Mon, 09 Sep 2024 14:03:02 +0200 (CEST) Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-5c241feb80dso10152064a12.0 for ; Mon, 09 Sep 2024 05:03:03 -0700 (PDT) Received: from EMEAENGAAD87503.citrite.net ([185.25.67.249]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-a8d25d65742sm331603066b.216.2024.09.09.05.03.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 09 Sep 2024 05:03:01 -0700 (PDT) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 770a7cff-6ea3-11ef-a0b5-8be0dac302b0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloud.com; s=cloud; t=1725883382; x=1726488182; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V5YgYhePmve9+WOG0QJ+xJp2hifKt7rcNXrTDKjPMNw=; b=MgGAIX6hUaiLb09g1jFQlzIg/AkeAECQhpvsoa0irwd2cJYvDMrEGj+ii/nun8A981 AO6erf6Vz2nLrs/8r5u0pJcVKxRYaea+X1LKQQO09Qbrv6icorWgAgRpjtikdF2t9Obj vBURs3LbmnodxHAOtFQvNcdm7H8Q4n9KxqbSA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725883382; x=1726488182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V5YgYhePmve9+WOG0QJ+xJp2hifKt7rcNXrTDKjPMNw=; b=Gn8LeaC/zSxEi4WmnwQu1jMrU+RVseEeVKNjFxkasal0ONond6uPXUa98URhtxUBlo ragqLJvV2IxCNOm1kBECQ0A6mI/zyQzvrOuZj4zmTp5AjXviA+O7eyAWoyb6rTCeoROs XSiQ3Vv6Fsb7pkPcnWoaR6Xybi1oL4uP8sy3r/KeEPD/+lZBrgl/lUmB8mncRW6yEtXX hzEOZUY+x2SHKM0uPCcd4yN+emJtl4UyQ9uP7A83d3iooqNbt7xqYp6sasYYaj5HDoaW 1POIyjxnuZqJOM+BHdhw8KcQZoTMzD/Sr2W04Pfdmt8nQ/OvcQrWP7uqeygTBnH+TuRv yX0A== X-Gm-Message-State: AOJu0YwJr/3+eA+fmGqWhZunqb6lAiHmBc8ggwYPX5FF39DB4KlWbVL9 zm3V8PiI4JDOCipUxIgpUXiDjRBjG5lO+RK42SMNmZy4AIIn/ABOwSNyqJ+aRsPPRq8KQQ/Zu43 4 X-Google-Smtp-Source: AGHT+IEhKat/dVQxAoOE6/dZlJtqBM9eMnI0VlNRo38sAf0RhyCh7F+7UXxIYtY5adE1nPVHc/monQ== X-Received: by 2002:a17:907:7ba3:b0:a8d:6372:2d38 with SMTP id a640c23a62f3a-a8d63722f43mr166834066b.18.1725883381675; Mon, 09 Sep 2024 05:03:01 -0700 (PDT) From: Andrii Sultanov To: xen-devel@lists.xenproject.org Cc: Andrii Sultanov , Christian Lindig , David Scott , Anthony PERARD , Christian Lindig Subject: [PATCH v3 2/3] tools/oxenstored: Load the plugin for Xenctrl.domain_getinfo Date: Mon, 9 Sep 2024 13:02:41 +0100 Message-Id: <4da0d29b49325f3684c283219144f9fbf3c241d3.1725881488.git.andrii.sultanov@cloud.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @cloud.com) X-ZM-MESSAGEID: 1725883403875116600 Content-Type: text/plain; charset="utf-8" Oxenstored dynamically loads the plugin provided in ocaml/libs/xsd_glue. The plugin is verified to be providing the specified plugin_interface during its loading. If a V2 of the plugin is produced, V1 will still be present, and a new version should only be loaded if it's verified to exist (New oxenstored can run in an environment with only V1 of the plugin). The plugin is not switched to as of yet, the old Xenctrl stubs are still used. Signed-off-by: Andrii Sultanov Acked-by: Christian Lindig --- * This commit is a result of the split of one oxenstored commit into two. * Remove configure and paths.m4 defines as suggested. * Reformat files appropriately * Use libexec/ocaml as the plugin root dir instead of libexec/bin tools/ocaml/xenstored/Makefile | 5 ++++- tools/ocaml/xenstored/domains.ml | 28 ++++++++++++++++++++++++++++ tools/ocaml/xenstored/paths.ml.in | 1 + 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/tools/ocaml/xenstored/Makefile b/tools/ocaml/xenstored/Makefile index fa45305d8c..5e8210a906 100644 --- a/tools/ocaml/xenstored/Makefile +++ b/tools/ocaml/xenstored/Makefile @@ -15,7 +15,8 @@ OCAMLINCLUDE +=3D \ -I $(OCAML_TOPLEVEL)/libs/xb \ -I $(OCAML_TOPLEVEL)/libs/mmap \ -I $(OCAML_TOPLEVEL)/libs/xc \ - -I $(OCAML_TOPLEVEL)/libs/eventchn + -I $(OCAML_TOPLEVEL)/libs/eventchn \ + -I $(OCAML_TOPLEVEL)/libs/xsd_glue =20 LIBS =3D syslog.cma syslog.cmxa poll.cma poll.cmxa syslog_OBJS =3D syslog @@ -59,6 +60,7 @@ INTF =3D symbol.cmi trie.cmi syslog.cmi systemd.cmi poll.= cmi =20 XENSTOREDLIBS =3D \ unix.cmxa \ + dynlink.cmxa \ -ccopt -L -ccopt . syslog.cmxa \ -ccopt -L -ccopt . systemd.cmxa \ -ccopt -L -ccopt . poll.cmxa \ @@ -66,6 +68,7 @@ XENSTOREDLIBS =3D \ -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/eventchn $(OCAML_TOPLEVEL)/libs/e= ventchn/xeneventchn.cmxa \ -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xc $(OCAML_TOPLEVEL)/libs/xc/xenc= trl.cmxa \ -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xb $(OCAML_TOPLEVEL)/libs/xb/xenb= us.cmxa \ + -ccopt -L -ccopt $(OCAML_TOPLEVEL)/libs/xsd_glue $(OCAML_TOPLEVEL)/libs/x= sd_glue/plugin_interface_v1.cmxa \ -ccopt -L -ccopt $(XEN_ROOT)/tools/libs/ctrl =20 PROGRAMS =3D oxenstored diff --git a/tools/ocaml/xenstored/domains.ml b/tools/ocaml/xenstored/domai= ns.ml index 7a3056c364..c233065711 100644 --- a/tools/ocaml/xenstored/domains.ml +++ b/tools/ocaml/xenstored/domains.ml @@ -20,6 +20,34 @@ let warn fmt =3D Logging.warn "domains" fmt =20 let xc =3D Xenctrl.interface_open () =20 +let load_plug fname =3D + let fail_with fmt =3D Printf.ksprintf failwith fmt in + let fname =3D Dynlink.adapt_filename fname in + if Sys.file_exists fname then + try Dynlink.loadfile fname with + | Dynlink.Error err as e -> + error "ERROR loading plugin '%s': %s\n%!" fname + (Dynlink.error_message err); + raise e + | _ -> fail_with "Unknown error while loading plugin" + else fail_with "Plugin file '%s' does not exist" fname + +let () =3D + let plugins_dir =3D Paths.libexec ^ "/ocaml/xsd_glue/xenctrl_plugin/" in + let filepath =3D plugins_dir ^ "domain_getinfo_v1.cmxs" in + debug "Trying to load plugin '%s'\n%!" filepath; + let list_files =3D Sys.readdir plugins_dir in + debug "Directory listing of '%s'\n%!" plugins_dir ; + Array.iter (fun x -> debug "\t%s\n%!" x) list_files; + Dynlink.allow_only [ "Plugin_interface_v1" ]; + load_plug filepath + +module Plugin =3D + (val Plugin_interface_v1.get_plugin_v1 () + : Plugin_interface_v1.Domain_getinfo_V1) + +let handle =3D Plugin.interface_open () + type domains =3D { eventchn: Event.t; table: (Xenctrl.domid, Domain.t) Hashtbl.t; diff --git a/tools/ocaml/xenstored/paths.ml.in b/tools/ocaml/xenstored/path= s.ml.in index 37949dc8f3..acb6ea4ca7 100644 --- a/tools/ocaml/xenstored/paths.ml.in +++ b/tools/ocaml/xenstored/paths.ml.in @@ -2,3 +2,4 @@ let xen_log_dir =3D "@XEN_LOG_DIR@" let xen_config_dir =3D "@XEN_CONFIG_DIR@" let xen_run_dir =3D "@XEN_RUN_DIR@" let xen_run_stored =3D "@XEN_RUN_STORED@" +let libexec =3D "@LIBEXEC@" --=20 2.39.2