From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727785306426486.868056654004; Tue, 1 Oct 2024 05:21:46 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5A67C15D4; Tue, 1 Oct 2024 08:21:45 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7D2C015A7; Tue, 1 Oct 2024 08:20:57 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 8D83C123B; Tue, 1 Oct 2024 08:20:53 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 130031221 for ; Tue, 1 Oct 2024 08:20:53 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 401BC20CECC3; Tue, 1 Oct 2024 05:20:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 401BC20CECC3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785251; bh=QJPj3Wsrnv2IeT5+fHl2LLCVkM7JijbuSUi9u9nhTSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IUafE1tuv80zMJyRmFzoZfuPZxfTVn3y4lzchEZJsoOU24I/4JmbxOsn+kn665XR/ 0alPXGPt3E0R3mWbsKurkQ8suK4Gvw3VNj7xXMIr16SW3RU5PWnsM/1oYCIAPLDIdj liCADq0XyS607KLf0BkMZVY7AYZYS55R6BVLODEg= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 1/6] utils: Implement virFileIsNamedPipe Date: Tue, 1 Oct 2024 12:20:45 +0000 Message-Id: <20241001122050.20099-2-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: J6BAC3YN6WJOMXMUFB4OLJLCTU2HMOWE X-Message-ID-Hash: J6BAC3YN6WJOMXMUFB4OLJLCTU2HMOWE X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785306931116600 Content-Type: text/plain; charset="utf-8" virFileIsNamedPipe checks whether passed path is a FIFO file or not. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- src/libvirt_private.syms | 1 + src/util/virfile.c | 8 ++++++++ src/util/virfile.h | 1 + 3 files changed, 10 insertions(+) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 02dacea857..6bf6cfd20b 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2357,6 +2357,7 @@ virFileIsDir; virFileIsExecutable; virFileIsLink; virFileIsMountPoint; +virFileIsNamedPipe; virFileIsRegular; virFileIsSharedFS; virFileIsSharedFSType; diff --git a/src/util/virfile.c b/src/util/virfile.c index d820172405..19b074ed8a 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -2023,6 +2023,14 @@ virFileIsDir(const char *path) } =20 =20 +bool +virFileIsNamedPipe(const char *path) +{ + struct stat s; + return (stat(path, &s) =3D=3D 0) && S_ISFIFO(s.st_mode); +} + + bool virFileIsRegular(const char *path) { diff --git a/src/util/virfile.h b/src/util/virfile.h index 7df3fcb840..4f7ff72483 100644 --- a/src/util/virfile.h +++ b/src/util/virfile.h @@ -215,6 +215,7 @@ void virFileActivateDirOverrideForLib(void); =20 off_t virFileLength(const char *path, int fd) ATTRIBUTE_NONNULL(1); bool virFileIsDir (const char *file) ATTRIBUTE_NONNULL(1); +bool virFileIsNamedPipe (const char *file) ATTRIBUTE_NONNULL(1); bool virFileExists(const char *file) ATTRIBUTE_NONNULL(1) G_NO_INLINE; bool virFileIsExecutable(const char *file) ATTRIBUTE_NONNULL(1); bool virFileIsRegular(const char *file) ATTRIBUTE_NONNULL(1); --=20 2.34.1 From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727785392090788.2501397397077; Tue, 1 Oct 2024 05:23:12 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 08CF21391; Tue, 1 Oct 2024 08:23:10 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id CF538154C; Tue, 1 Oct 2024 08:21:03 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id A3D80123F; Tue, 1 Oct 2024 08:20:54 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id E3A6B1224 for ; Tue, 1 Oct 2024 08:20:53 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id A7BA320CECC4; Tue, 1 Oct 2024 05:20:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com A7BA320CECC4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785251; bh=txp6uPQqMPUrNqkGJyWjwoCxB1aHCAvmqkbGO4ZgTB0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=f4h10NGetYJ3WTP4q2EWoseQxmGmGtgLDJz//Ax82synuaw7iIxwKHc9DTDIP0vZ8 ZSERHxxyWTPZytrEbglUSX5jzaCnZyTSVBb3XbyjFr7NwsxfzygU6DgX72D1QthX39 WD4VIJzdD9CQ3Yy8A54suFJE6xshVYh1n5HDaOWA= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 2/6] ch: pass --event-monitor option to cloud-hypervisor Date: Tue, 1 Oct 2024 12:20:46 +0000 Message-Id: <20241001122050.20099-3-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: TJI5IW75ZHBC7WKA5GIBRYKD4WI3MCOE X-Message-ID-Hash: TJI5IW75ZHBC7WKA5GIBRYKD4WI3MCOE X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785393268116600 Content-Type: text/plain; charset="utf-8" The `--event-monitor` option in cloud-hypervisor outputs events to a specified file. This file can then be used to monitor VM lifecycle, other vmm events and trigger appropriate actions. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- src/ch/ch_monitor.c | 20 ++++++++++++++++---- src/ch/ch_monitor.h | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 3e49902791..8c99fe1019 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -540,7 +540,6 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cf= g) { g_autoptr(virCHMonitor) mon =3D NULL; g_autoptr(virCommand) cmd =3D NULL; - const char *socketdir =3D cfg->stateDir; int socket_fd =3D 0; =20 if (virCHMonitorInitialize() < 0) @@ -556,11 +555,13 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *= cfg) } =20 /* prepare to launch Cloud-Hypervisor socket */ - mon->socketpath =3D g_strdup_printf("%s/%s-socket", socketdir, vm->def= ->name); - if (g_mkdir_with_parents(socketdir, 0777) < 0) { + mon->socketpath =3D g_strdup_printf("%s/%s-socket", cfg->stateDir, vm-= >def->name); + mon->eventmonitorpath =3D g_strdup_printf("%s/%s-event-monitor", + cfg->stateDir, vm->def->name); + if (g_mkdir_with_parents(cfg->stateDir, 0777) < 0) { virReportSystemError(errno, _("Cannot create socket directory '%1$s'"), - socketdir); + cfg->stateDir); return NULL; } =20 @@ -585,6 +586,9 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cf= g) virCommandAddArgFormat(cmd, "fd=3D%d", socket_fd); virCommandPassFD(cmd, socket_fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); =20 + virCommandAddArg(cmd, "--event-monitor"); + virCommandAddArgFormat(cmd, "path=3D%s", mon->eventmonitorpath); + /* launch Cloud-Hypervisor socket */ if (virCommandRunAsync(cmd, &mon->pid) < 0) return NULL; @@ -629,6 +633,14 @@ void virCHMonitorClose(virCHMonitor *mon) g_free(mon->socketpath); } =20 + if (mon->eventmonitorpath) { + if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { + VIR_WARN("Unable to remove CH event monitor file '%s'", + mon->eventmonitorpath); + } + g_free(mon->eventmonitorpath); + } + virObjectUnref(mon); } =20 diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index b35f5ea027..2ef8706b99 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -95,6 +95,8 @@ struct _virCHMonitor { =20 char *socketpath; =20 + char *eventmonitorpath; + pid_t pid; =20 virDomainObj *vm; --=20 2.34.1 From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 17277853376031000.3595122262353; Tue, 1 Oct 2024 05:22:17 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 91C6D164F; Tue, 1 Oct 2024 08:22:16 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 39A341636; Tue, 1 Oct 2024 08:21:00 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 3660C1243; Tue, 1 Oct 2024 08:20:54 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 6019F1231 for ; Tue, 1 Oct 2024 08:20:53 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 1AA8F20CECC5; Tue, 1 Oct 2024 05:20:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 1AA8F20CECC5 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785252; bh=0BNx1Xmluqvj7jhdjmYnl/j5SRx+G72OZ7iveIYACNc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=n+88xgxAkv7+m7YP//x6g82l0oZkFHhD1wurlnZMdE4y/mJ1vhGoMMPxwvEfJjjJX 9BpyZOQuuPPGxIA58F8lvwy7PQemLKg3WDNiVVBGa7815B4xXmQD2tvZ7fmprWn6m9 wmvWwZ1cn3HC06r7z77RrNc5mbDeMF1amhtNRtyY= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 3/6] ch: start a new thread for handling ch events Date: Tue, 1 Oct 2024 12:20:47 +0000 Message-Id: <20241001122050.20099-4-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GZJWL52MMNMZDEO5N2TUXCISTFOY2LGA X-Message-ID-Hash: GZJWL52MMNMZDEO5N2TUXCISTFOY2LGA X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785339168116600 Content-Type: text/plain; charset="utf-8" Use a FIFO(named pipe) for --event-monitor option in CH. Introduce a new thread, `virCHEventHandlerLoop`, to continuously monitor and handle events from cloud-hypervisor. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- po/POTFILES | 1 + src/ch/ch_events.c | 93 +++++++++++++++++++++++++++++++++++++++++++++ src/ch/ch_events.h | 26 +++++++++++++ src/ch/ch_monitor.c | 32 ++++++++++++++-- src/ch/ch_monitor.h | 3 ++ src/ch/meson.build | 2 + 6 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 src/ch/ch_events.c create mode 100644 src/ch/ch_events.h diff --git a/po/POTFILES b/po/POTFILES index 1ed4086d2c..d53307cec4 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -21,6 +21,7 @@ src/bhyve/bhyve_process.c src/ch/ch_conf.c src/ch/ch_domain.c src/ch/ch_driver.c +src/ch/ch_events.c src/ch/ch_interface.c src/ch/ch_monitor.c src/ch/ch_process.c diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c new file mode 100644 index 0000000000..899d4f48c1 --- /dev/null +++ b/src/ch/ch_events.c @@ -0,0 +1,93 @@ +/* + * Copyright Microsoft Corp. 2024 + * + * ch_events.c: Handle Cloud-Hypervisor events + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include + +#include "ch_events.h" +#include "virfile.h" +#include "virlog.h" + +VIR_LOG_INIT("ch.ch_events"); + +static void virCHEventHandlerLoop(void *data) +{ + virCHMonitor *mon =3D data; + virDomainObj *vm =3D NULL; + int event_monitor_fd; + + VIR_DEBUG("Event handler loop thread starting"); + + while ((event_monitor_fd =3D open(mon->eventmonitorpath, O_RDONLY)) < = 0) { + if (errno =3D=3D EINTR) { + /* 100 milli seconds */ + g_usleep(100000); + continue; + } + /* Any other error should be a BUG(kernel/libc/libvirtd) + * (ENOMEM can happen on exceeding per-user limits) + */ + VIR_ERROR(_("Failed to open the event monitor FIFO(%1$s) read end!= "), + mon->eventmonitorpath); + abort(); + } + VIR_DEBUG("Opened the event monitor FIFO(%s)", mon->eventmonitorpath); + + /* Obtain a vm reference */ + vm =3D virObjectRef(mon->vm); + + while (g_atomic_int_get(&mon->event_handler_stop) =3D=3D 0) { + VIR_DEBUG("Reading events from event monitor file..."); + /* Read and process events here */ + } + + VIR_FORCE_CLOSE(event_monitor_fd); + virObjectUnref(vm); + + VIR_DEBUG("Event handler loop thread exiting"); + return; +} + +int virCHStartEventHandler(virCHMonitor *mon) +{ + g_autofree char *name =3D NULL; + name =3D g_strdup_printf("ch-evt-%d", mon->pid); + + virObjectRef(mon); + if (virThreadCreateFull(&mon->event_handler_thread, + false, + virCHEventHandlerLoop, + name, + false, + mon) < 0) { + virObjectUnref(mon); + return -1; + } + virObjectUnref(mon); + + g_atomic_int_set(&mon->event_handler_stop, 0); + return 0; +} + +void virCHStopEventHandler(virCHMonitor *mon) +{ + g_atomic_int_set(&mon->event_handler_stop, 1); +} diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h new file mode 100644 index 0000000000..4c8a48231d --- /dev/null +++ b/src/ch/ch_events.h @@ -0,0 +1,26 @@ +/* + * Copyright Microsoft Corp. 2024 + * + * ch_events.h: header file for handling Cloud-Hypervisor events + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#pragma once + +#include "ch_monitor.h" + +int virCHStartEventHandler(virCHMonitor *mon); +void virCHStopEventHandler(virCHMonitor *mon); diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 8c99fe1019..696d4e4675 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -26,6 +26,7 @@ =20 #include "datatypes.h" #include "ch_conf.h" +#include "ch_events.h" #include "ch_interface.h" #include "ch_monitor.h" #include "domain_interface.h" @@ -572,6 +573,27 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *c= fg) return NULL; } =20 + /* Event monitor file to listen for VM state changes */ + mon->eventmonitorpath =3D g_strdup_printf("%s/%s-event-monitor-fifo", + cfg->stateDir, vm->def->name); + if (virFileExists(mon->eventmonitorpath)) { + VIR_WARN("Monitor file (%s) already exists, trying to delete!", + mon->eventmonitorpath); + if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to remove the file: %1$s"), + mon->eventmonitorpath); + return NULL; + } + } + + if (mkfifo(mon->eventmonitorpath, S_IWUSR | S_IRUSR) < 0 && + errno !=3D EEXIST) { + virReportSystemError(errno, "%s", + _("Cannot create monitor FIFO")); + return NULL; + } + cmd =3D virCommandNew(vm->def->emulator); virCommandSetUmask(cmd, 0x002); socket_fd =3D chMonitorCreateSocket(mon->socketpath); @@ -593,12 +615,15 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *= cfg) if (virCommandRunAsync(cmd, &mon->pid) < 0) return NULL; =20 - /* get a curl handle */ - mon->handle =3D curl_easy_init(); - /* now has its own reference */ mon->vm =3D virObjectRef(vm); =20 + if (virCHStartEventHandler(mon) < 0) + return NULL; + + /* get a curl handle */ + mon->handle =3D curl_easy_init(); + return g_steal_pointer(&mon); } =20 @@ -633,6 +658,7 @@ void virCHMonitorClose(virCHMonitor *mon) g_free(mon->socketpath); } =20 + virCHStopEventHandler(mon); if (mon->eventmonitorpath) { if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { VIR_WARN("Unable to remove CH event monitor file '%s'", diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index 2ef8706b99..878a185f29 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -97,6 +97,9 @@ struct _virCHMonitor { =20 char *eventmonitorpath; =20 + virThread event_handler_thread; + int event_handler_stop; + pid_t pid; =20 virDomainObj *vm; diff --git a/src/ch/meson.build b/src/ch/meson.build index 633966aac7..684beac1f2 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -7,6 +7,8 @@ ch_driver_sources =3D [ 'ch_domain.h', 'ch_driver.c', 'ch_driver.h', + 'ch_events.c', + 'ch_driver.h', 'ch_interface.c', 'ch_interface.h', 'ch_monitor.c', --=20 2.34.1 From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727785372485566.1316703360877; Tue, 1 Oct 2024 05:22:52 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 5D2041243; Tue, 1 Oct 2024 08:22:51 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 86B611653; Tue, 1 Oct 2024 08:21:02 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 72CCE1223; Tue, 1 Oct 2024 08:20:54 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id BD4641221 for ; Tue, 1 Oct 2024 08:20:53 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 8199920CECBF; Tue, 1 Oct 2024 05:20:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 8199920CECBF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785252; bh=+nCWYLVek+YU5lJ7zw+xQEBTrCNp4P/VpQNS13JcWRw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=jVvMeGpEY7AXvNH5WDeLzveaNYgepNI8F7eRKx9MzFLN81Wgtwy16NfGPihJEytjO BHyx9fKJEWPTfBjJDX+2nEzpxYtrjA4IUt1+MazNHzufcHfWcCg6umlxpkIFxlExdQ JqKQ91VFr7XOkV871AjdndQt4shVtqQuDlpsd0Lc= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 4/6] ch: events: Read and parse cloud-hypervisor events Date: Tue, 1 Oct 2024 12:20:48 +0000 Message-Id: <20241001122050.20099-5-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: NCZTEGTVI6K5TV42QTDPI4ROWZPV65HV X-Message-ID-Hash: NCZTEGTVI6K5TV42QTDPI4ROWZPV65HV X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785373310116600 Content-Type: text/plain; charset="utf-8" Implement `chReadProcessEvents` and `chProcessEvents` to read events from event monitor FIFO file and parse them accordingly. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- src/ch/ch_events.c | 157 +++++++++++++++++++++++++++++++++++++++++++- src/ch/ch_events.h | 2 + src/ch/ch_monitor.h | 6 ++ 3 files changed, 164 insertions(+), 1 deletion(-) diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c index 899d4f48c1..ba82581463 100644 --- a/src/ch/ch_events.c +++ b/src/ch/ch_events.c @@ -28,6 +28,157 @@ =20 VIR_LOG_INIT("ch.ch_events"); =20 +/** + * virCHProcessEvents: + * @mon: the CH monitor object + * + * Parse the events from the event buffer and process them + * Example event: + * { + * "timestamp": { + * "secs": 0, + * "nanos": 29228206 + * }, + * "source": "vm", + * "event": "booted", + * "properties": null + * } + * + * Returns: 0 on success, -1 on failure + */ +static int virCHProcessEvents(virCHMonitor *mon) +{ + char *buf =3D mon->event_buffer.buffer; + ssize_t sz =3D mon->event_buffer.buf_fill_sz; + virJSONValue *obj =3D NULL; + int blocks =3D 0; + size_t i =3D 0; + char *json_start; + ssize_t start_index =3D -1; + ssize_t end_index =3D -1; + char tmp; + int ret =3D 0; + + while (i < sz) { + if (buf[i] =3D=3D '{') { + blocks++; + if (blocks =3D=3D 1) + start_index =3D i; + } else if (buf[i] =3D=3D '}' && blocks > 0) { + blocks--; + if (blocks =3D=3D 0) { + /* valid json document */ + end_index =3D i; + + /* We may hit a corner case where a valid JSON + * doc happens to end right at the end of the buffer. + * virJSONValueFromString needs '\0' end the JSON doc. + * So we need to adjust the buffer accordingly. + */ + if (end_index =3D=3D CH_EVENT_BUFFER_SZ - 1) { + if (start_index =3D=3D 0) { + /* We have a valid JSON doc same as the buffer + * size. As per protocol, max JSON doc should be + * less than the buffer size. So this is an error. + * Ignore this JSON doc. + */ + VIR_WARN("Invalid JSON doc size. Expected <=3D %d", + CH_EVENT_BUFFER_SZ); + start_index =3D -1; + ret =3D -1; + break; + } + + /* Move the valid JSON doc to the start of the buffer = so + * that we can safely fit a '\0' at the end. + */ + memmove(buf, buf+start_index, end_index-start_index+1); + end_index -=3D start_index; + start_index =3D 0; + } + + /* temporarily null terminate the JSON doc */ + tmp =3D buf[end_index + 1]; + buf[end_index + 1] =3D '\0'; + json_start =3D buf + start_index; + + if ((obj =3D virJSONValueFromString(json_start))) { + /* Process the event string (obj) here */ + virJSONValueFree(obj); + } else { + VIR_WARN("Invalid JSON event doc: %s", json_start); + ret =3D -1; + } + + /* replace the original character */ + buf[end_index + 1] =3D tmp; + start_index =3D -1; + } + } + + i++; + } + + if (start_index =3D=3D -1) { + /* We have processed all the JSON docs in the buffer */ + mon->event_buffer.buf_fill_sz =3D 0; + } else if (start_index > 0) { + /* We have an incomplete JSON doc at the end of the buffer + * Move it to the start of the buffer + */ + mon->event_buffer.buf_fill_sz =3D sz - start_index; + memmove(buf, buf+start_index, mon->event_buffer.buf_fill_sz); + } + + return ret; +} + +static void virCHReadProcessEvents(virCHMonitor *mon, + int event_monitor_fd) +{ + size_t max_sz =3D CH_EVENT_BUFFER_SZ; + char *buf =3D mon->event_buffer.buffer; + virDomainObj *vm =3D mon->vm; + bool incomplete =3D false; + size_t sz =3D 0; + + memset(buf, 0, max_sz); + do { + ssize_t ret; + + ret =3D read(event_monitor_fd, buf + sz, max_sz - sz); + if (ret =3D=3D 0 || (ret < 0 && errno =3D=3D EINTR)) { + g_usleep(G_USEC_PER_SEC); + continue; + } else if (ret < 0) { + /* We should never reach here. read(2) says possible errors + * are EINTR, EAGAIN, EBADF, EFAULT, EINVAL, EIO, EISDIR + * We handle EINTR gracefully. There is some serious issue + * if we encounter any of the other errors(either in our code + * or in the system). Better to bail out. + */ + VIR_ERROR(_("Failed to read ch events!: %1$s"), g_strerror(err= no)); + VIR_FORCE_CLOSE(event_monitor_fd); + abort(); + } + + sz +=3D ret; + mon->event_buffer.buf_fill_sz =3D sz; + + if (virCHProcessEvents(mon) < 0) + VIR_WARN("Failed to parse and process events"); + + if (mon->event_buffer.buf_fill_sz !=3D 0) + incomplete =3D true; + else + incomplete =3D false; + sz =3D mon->event_buffer.buf_fill_sz; + + } while (virDomainObjIsActive(vm) && (sz < max_sz) && incomplete); + + return; +} + static void virCHEventHandlerLoop(void *data) { virCHMonitor *mon =3D data; @@ -51,14 +202,18 @@ static void virCHEventHandlerLoop(void *data) } VIR_DEBUG("Opened the event monitor FIFO(%s)", mon->eventmonitorpath); =20 + mon->event_buffer.buffer =3D g_malloc_n(sizeof(char), CH_EVENT_BUFFER_= SZ); + mon->event_buffer.buf_fill_sz =3D 0; + /* Obtain a vm reference */ vm =3D virObjectRef(mon->vm); =20 while (g_atomic_int_get(&mon->event_handler_stop) =3D=3D 0) { VIR_DEBUG("Reading events from event monitor file..."); - /* Read and process events here */ + virCHReadProcessEvents(mon, event_monitor_fd); } =20 + g_free(mon->event_buffer.buffer); VIR_FORCE_CLOSE(event_monitor_fd); virObjectUnref(vm); =20 diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h index 4c8a48231d..2e9cdf03bb 100644 --- a/src/ch/ch_events.h +++ b/src/ch/ch_events.h @@ -22,5 +22,7 @@ =20 #include "ch_monitor.h" =20 +#define CH_EVENT_BUFFER_SZ PIPE_BUF + int virCHStartEventHandler(virCHMonitor *mon); void virCHStopEventHandler(virCHMonitor *mon); diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index 878a185f29..d31b924d0e 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -99,6 +99,12 @@ struct _virCHMonitor { =20 virThread event_handler_thread; int event_handler_stop; + struct { + /* Buffer to hold the data read from pipe */ + char *buffer; + /* Size of the data read from pipe into buffer */ + size_t buf_fill_sz; + } event_buffer; =20 pid_t pid; =20 --=20 2.34.1 From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1727785427198985.0364449200206; Tue, 1 Oct 2024 05:23:47 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 241F2123F; Tue, 1 Oct 2024 08:23:46 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 59EBC164E; Tue, 1 Oct 2024 08:21:06 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 52312123B; Tue, 1 Oct 2024 08:20:55 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 9A9301231 for ; Tue, 1 Oct 2024 08:20:54 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id E86C720CECC6; Tue, 1 Oct 2024 05:20:52 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com E86C720CECC6 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785253; bh=LTE1Nw98VAJpHQk6Nw7xqZHO1Q87Nq4r7ZE+1/ckBuE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=mJAj8QCXG5fcXA0mwuvXnKnjXjhzCQrIOIpIB0DhjDO36B1Ftz1xl6BbkGUvrXCxK ZYtwVo9RQbCkOVdYhDNDGIi8KDegoJDoJoB0lMCmk+gxhvRtoWxwug4O6H4+dMpBIg e4ZCa1oRtBhS8scGAsZkGdbemhM2kfT3AJh1NmW8= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 5/6] ch: events: facilitate lifecycle events handling Date: Tue, 1 Oct 2024 12:20:49 +0000 Message-Id: <20241001122050.20099-6-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: MZVEKO3RVUWEJFR3PSWXC363V2MT6LSL X-Message-ID-Hash: MZVEKO3RVUWEJFR3PSWXC363V2MT6LSL X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785427424116600 Content-Type: text/plain; charset="utf-8" Implement `virCHProcessEvent` that maps event string to corresponding event type and take appropriate actions. As part of this, handle the shutdown event by correctly updating the domain state. this change also facilitates the handling of other VM lifecycle events, such as booting, rebooting, pause, resume, etc. Signed-off-by: Purna Pavan Chandra Aekkaladevi --- src/ch/ch_events.c | 103 ++++++++++++++++++++++++++++++++++++++++++++- src/ch/ch_events.h | 26 ++++++++++++ 2 files changed, 128 insertions(+), 1 deletion(-) diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c index ba82581463..25d0de97cd 100644 --- a/src/ch/ch_events.c +++ b/src/ch/ch_events.c @@ -22,12 +22,110 @@ =20 #include =20 +#include "ch_domain.h" #include "ch_events.h" +#include "ch_process.h" #include "virfile.h" #include "virlog.h" =20 VIR_LOG_INIT("ch.ch_events"); =20 +VIR_ENUM_IMPL(virCHEvent, + VIR_CH_EVENT_LAST, + "vmm:starting", + "vmm:shutdown", + "vm:booting", + "vm:booted", + "vm:rebooting", + "vm:rebooted", + "vm:shutdown", + "vm:deleted", + "vm:pausing", + "vm:paused", + "vm:resuming", + "vm:resumed", + "vm:snapshotting", + "vm:snapshotted", + "vm:restoring", + "vm:restored", +); + +static int virCHEventStopProcess(virDomainObj *vm, + virDomainShutoffReason reason) +{ + virCHDriver *driver =3D ((virCHDomainObjPrivate *)vm->privateData)->d= river; + + if (virDomainObjBeginJob(vm, VIR_JOB_MODIFY)) + return -1; + virCHProcessStop(driver, vm, reason); + virDomainObjEndJob(vm); + + return 0; +} + +static int virCHProcessEvent(virCHMonitor *mon, + virJSONValue *eventJSON) +{ + const char *event; + const char *source; + virCHEvent ev; + g_autofree char *timestamp =3D NULL; + g_autofree char *full_event =3D NULL; + virDomainObj *vm =3D mon->vm; + int ret =3D 0; + + if (virJSONValueObjectHasKey(eventJSON, "source") =3D=3D 0) { + VIR_WARN("Invalid JSON from monitor, no source key"); + return -1; + } + if (virJSONValueObjectHasKey(eventJSON, "event") =3D=3D 0) { + VIR_WARN("Invalid JSON from monitor, no event key"); + return -1; + } + source =3D virJSONValueObjectGetString(eventJSON, "source"); + event =3D virJSONValueObjectGetString(eventJSON, "event"); + full_event =3D g_strdup_printf("%s:%s", source, event); + ev =3D virCHEventTypeFromString(full_event); + VIR_DEBUG("Source: %s Event: %s, ev: %d", source, event, ev); + + switch (ev) { + case VIR_CH_EVENT_VMM_STARTING: + case VIR_CH_EVENT_VM_BOOTING: + case VIR_CH_EVENT_VM_BOOTED: + case VIR_CH_EVENT_VM_REBOOTING: + case VIR_CH_EVENT_VM_REBOOTED: + case VIR_CH_EVENT_VM_PAUSING: + case VIR_CH_EVENT_VM_PAUSED: + case VIR_CH_EVENT_VM_RESUMING: + case VIR_CH_EVENT_VM_RESUMED: + case VIR_CH_EVENT_VM_SNAPSHOTTING: + case VIR_CH_EVENT_VM_SNAPSHOTTED: + case VIR_CH_EVENT_VM_RESTORING: + case VIR_CH_EVENT_VM_RESTORED: + case VIR_CH_EVENT_VM_DELETED: + break; + case VIR_CH_EVENT_VMM_SHUTDOWN: + virObjectLock(vm); + if (virCHEventStopProcess(vm, VIR_DOMAIN_SHUTOFF_SHUTDOWN)) { + VIR_WARN("Failed to mark the VM(%s) as SHUTDOWN!", + vm->def->name); + ret =3D -1; + } + virObjectUnlock(vm); + break; + case VIR_CH_EVENT_VM_SHUTDOWN: + virObjectLock(vm); + virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOF= F_SHUTDOWN); + virObjectUnlock(vm); + break; + case VIR_CH_EVENT_LAST: + default: + VIR_WARN("Unknown event: %s", full_event); + } + + return ret; +} + /** * virCHProcessEvents: * @mon: the CH monitor object @@ -103,7 +201,10 @@ static int virCHProcessEvents(virCHMonitor *mon) json_start =3D buf + start_index; =20 if ((obj =3D virJSONValueFromString(json_start))) { - /* Process the event string (obj) here */ + if (virCHProcessEvent(mon, obj) < 0) { + VIR_WARN("Failed to process JSON event doc: %s", j= son_start); + ret =3D -1; + } virJSONValueFree(obj); } else { VIR_WARN("Invalid JSON event doc: %s", json_start); diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h index 2e9cdf03bb..3b360628f7 100644 --- a/src/ch/ch_events.h +++ b/src/ch/ch_events.h @@ -24,5 +24,31 @@ =20 #define CH_EVENT_BUFFER_SZ PIPE_BUF =20 +typedef enum { + /* source: vmm */ + VIR_CH_EVENT_VMM_STARTING =3D 0, + VIR_CH_EVENT_VMM_SHUTDOWN, + + /* source: vm */ + VIR_CH_EVENT_VM_BOOTING, + VIR_CH_EVENT_VM_BOOTED, + VIR_CH_EVENT_VM_REBOOTING, + VIR_CH_EVENT_VM_REBOOTED, + VIR_CH_EVENT_VM_SHUTDOWN, + VIR_CH_EVENT_VM_DELETED, + VIR_CH_EVENT_VM_PAUSING, + VIR_CH_EVENT_VM_PAUSED, + VIR_CH_EVENT_VM_RESUMING, + VIR_CH_EVENT_VM_RESUMED, + VIR_CH_EVENT_VM_SNAPSHOTTING, + VIR_CH_EVENT_VM_SNAPSHOTTED, + VIR_CH_EVENT_VM_RESTORING, + VIR_CH_EVENT_VM_RESTORED, + + VIR_CH_EVENT_LAST +} virCHEvent; + +VIR_ENUM_DECL(virCHEvent); + int virCHStartEventHandler(virCHMonitor *mon); void virCHStopEventHandler(virCHMonitor *mon); --=20 2.34.1 From nobody Tue Mar 11 11:19:58 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 172778540795947.03075878471668; Tue, 1 Oct 2024 05:23:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id D52D815F6; Tue, 1 Oct 2024 08:23:26 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 17323156B; Tue, 1 Oct 2024 08:21:05 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 0605B123A; Tue, 1 Oct 2024 08:20:55 -0400 (EDT) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 871AA1221 for ; Tue, 1 Oct 2024 08:20:54 -0400 (EDT) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 5AC6520CECC7; Tue, 1 Oct 2024 05:20:53 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.6 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 5AC6520CECC7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1727785253; bh=DNNF1JWBIguZmTBB1Er2ZedZW7xe6TngOUI9QC3D2pE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d0KJ9lQHlqHiYb02mwrYqaCPNCWGAballFN3w08JY3VFePzkLtGcXz1eAvCiMirAe Qw2EMF7uvAM2NmgoNF883+H9cAihU/RNfVzdvtUuiQlJTSez5WFjAjwUdblYXv0WbT nU1MyfwWVvqVkKtX/EuzWasUFcm6AnQmv8oyIpw4= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v2 6/6] NEWS: Mention event handling support in ch driver Date: Tue, 1 Oct 2024 12:20:50 +0000 Message-Id: <20241001122050.20099-7-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> References: <20241001122050.20099-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: CLDIT5MNE7XRKHXQBFJ7ALHCVVCMQ5NW X-Message-ID-Hash: CLDIT5MNE7XRKHXQBFJ7ALHCVVCMQ5NW X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: paekkaladevi@microsoft.com, prasad.krishnan@microsoft.com, liuwe@microsoft.com, prapal@linux.microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1727785409334116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Purna Pavan Chandra Signed-off-by: Purna Pavan Chandra Aekkaladevi --- NEWS.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index 437e032b90..cd5f67c603 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -17,6 +17,13 @@ v10.9.0 (unreleased) =20 * **New features** =20 + * ch: Support handling events from cloud-hypervisor + + The ch driver now supports handling events from the cloud-hypervisor. + Events include VM lifecyle operations such as shutdown, pause, resume, + etc. Libvirt will now read these events and take actions such as + updating domain state, etc. + * **Improvements** =20 * **Bug fixes** --=20 2.34.1