79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
212 lines
6.8 KiB
Diff
212 lines
6.8 KiB
Diff
From 9a12606bb5caf3e213ce1564445d88325592e642 Mon Sep 17 00:00:00 2001
|
|
From: AlexChen <alex.chen@huawei.com>
|
|
Date: Tue, 19 Oct 2021 14:50:32 +0800
|
|
Subject: [PATCH] Hotpatch: introduce DomainHotpatchManage API
|
|
|
|
Signed-off-by: Hao Wang <wanghao232@huawei.com>
|
|
Signed-off-by: Bihong Yu <yubihong@huawei.com>
|
|
Signed-off-by: AlexChen <alex.chen@huawei.com>
|
|
---
|
|
include/libvirt/libvirt-domain.h | 18 ++++++++++
|
|
scripts/check-aclrules.py | 1 +
|
|
src/driver-hypervisor.h | 8 +++++
|
|
src/libvirt-domain.c | 58 ++++++++++++++++++++++++++++++++
|
|
src/libvirt_public.syms | 4 +++
|
|
src/remote/remote_driver.c | 1 +
|
|
src/remote/remote_protocol.x | 20 ++++++++++-
|
|
7 files changed, 109 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
|
|
index 90cb652db1..f91061724b 100644
|
|
--- a/include/libvirt/libvirt-domain.h
|
|
+++ b/include/libvirt/libvirt-domain.h
|
|
@@ -4991,4 +4991,22 @@ int virDomainBackupBegin(virDomainPtr domain,
|
|
char *virDomainBackupGetXMLDesc(virDomainPtr domain,
|
|
unsigned int flags);
|
|
|
|
+typedef enum {
|
|
+ VIR_DOMAIN_HOTPATCH_NONE = 0, /* No action */
|
|
+ VIR_DOMAIN_HOTPATCH_APPLY, /* Apply hotpatch */
|
|
+ VIR_DOMAIN_HOTPATCH_UNAPPLY, /* Unapply hotpatch */
|
|
+ VIR_DOMAIN_HOTPATCH_QUERY, /* Query hotpatch */
|
|
+
|
|
+# ifdef VIR_ENUM_SENTINELS
|
|
+ VIR_DOMAIN_HOTPATCH_LAST
|
|
+# endif
|
|
+} virDomainHotpatchAction;
|
|
+
|
|
+char *
|
|
+virDomainHotpatchManage(virDomainPtr domain,
|
|
+ int action,
|
|
+ const char *patch,
|
|
+ const char *id,
|
|
+ unsigned int flags);
|
|
+
|
|
#endif /* LIBVIRT_DOMAIN_H */
|
|
diff --git a/scripts/check-aclrules.py b/scripts/check-aclrules.py
|
|
index a1fa473174..e196f81de9 100755
|
|
--- a/scripts/check-aclrules.py
|
|
+++ b/scripts/check-aclrules.py
|
|
@@ -53,6 +53,7 @@ whitelist = {
|
|
"connectURIProbe": True,
|
|
"localOnly": True,
|
|
"domainQemuAttach": True,
|
|
+ "domainHotpatchManage": True,
|
|
}
|
|
|
|
# XXX this vzDomainMigrateConfirm3Params looks
|
|
diff --git a/src/driver-hypervisor.h b/src/driver-hypervisor.h
|
|
index bce023017d..afc21a0b3f 100644
|
|
--- a/src/driver-hypervisor.h
|
|
+++ b/src/driver-hypervisor.h
|
|
@@ -1387,6 +1387,13 @@ typedef char *
|
|
(*virDrvDomainBackupGetXMLDesc)(virDomainPtr domain,
|
|
unsigned int flags);
|
|
|
|
+typedef char *
|
|
+(*virDrvDomainHotpatchManage)(virDomainPtr domain,
|
|
+ int action,
|
|
+ const char *patch,
|
|
+ const char *id,
|
|
+ unsigned int flags);
|
|
+
|
|
typedef struct _virHypervisorDriver virHypervisorDriver;
|
|
typedef virHypervisorDriver *virHypervisorDriverPtr;
|
|
|
|
@@ -1650,4 +1657,5 @@ struct _virHypervisorDriver {
|
|
virDrvDomainAgentSetResponseTimeout domainAgentSetResponseTimeout;
|
|
virDrvDomainBackupBegin domainBackupBegin;
|
|
virDrvDomainBackupGetXMLDesc domainBackupGetXMLDesc;
|
|
+ virDrvDomainHotpatchManage domainHotpatchManage;
|
|
};
|
|
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
|
|
index a12809c2d5..068ab52f54 100644
|
|
--- a/src/libvirt-domain.c
|
|
+++ b/src/libvirt-domain.c
|
|
@@ -12733,3 +12733,61 @@ virDomainBackupGetXMLDesc(virDomainPtr domain,
|
|
virDispatchError(conn);
|
|
return NULL;
|
|
}
|
|
+
|
|
+/**
|
|
+ * virDomainHotpatchManage:
|
|
+ * @domain: a domain object
|
|
+ * @action: the action type from virDomainHotpatchAction
|
|
+ * @patch: the target hotpatch file
|
|
+ * @id: the patch id of the target hotpatch
|
|
+ * @flags: extra flags; not used yet, so callers should always pass 0
|
|
+ *
|
|
+ * Manage hotpatch for the current domain according to @action.
|
|
+ *
|
|
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_APPLY, apply hotpatch
|
|
+ * @patch to the current domain.
|
|
+ *
|
|
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_UNAPPLY, unapply the
|
|
+ * hotpatch which is matched with @id from the current domain.
|
|
+ *
|
|
+ * If the @action is set to VIR_DOMAIN_HOTPATCH_QUERY, query infomations
|
|
+ * of the applied hotpatch of the current domain.
|
|
+ *
|
|
+ * Returns success messages in case of success, NULL otherwise.
|
|
+ */
|
|
+char *
|
|
+virDomainHotpatchManage(virDomainPtr domain,
|
|
+ int action,
|
|
+ const char *patch,
|
|
+ const char *id,
|
|
+ unsigned int flags)
|
|
+{
|
|
+ virConnectPtr conn;
|
|
+
|
|
+ virResetLastError();
|
|
+
|
|
+ virCheckDomainReturn(domain, NULL);
|
|
+ conn = domain->conn;
|
|
+
|
|
+ virCheckReadOnlyGoto(conn->flags, error);
|
|
+
|
|
+ if (action == VIR_DOMAIN_HOTPATCH_APPLY)
|
|
+ virCheckNonNullArgGoto(patch, error);
|
|
+
|
|
+ if (action == VIR_DOMAIN_HOTPATCH_UNAPPLY)
|
|
+ virCheckNonNullArgGoto(id, error);
|
|
+
|
|
+ if (conn->driver->domainHotpatchManage) {
|
|
+ char *ret;
|
|
+ ret = conn->driver->domainHotpatchManage(domain, action, patch, id, flags);
|
|
+ if (!ret)
|
|
+ goto error;
|
|
+
|
|
+ return ret;
|
|
+ }
|
|
+
|
|
+ virReportUnsupportedError();
|
|
+ error:
|
|
+ virDispatchError(conn);
|
|
+ return NULL;
|
|
+}
|
|
diff --git a/src/libvirt_public.syms b/src/libvirt_public.syms
|
|
index 539d2e3943..0ad0b9e489 100644
|
|
--- a/src/libvirt_public.syms
|
|
+++ b/src/libvirt_public.syms
|
|
@@ -873,4 +873,8 @@ LIBVIRT_6.0.0 {
|
|
virDomainBackupGetXMLDesc;
|
|
} LIBVIRT_5.10.0;
|
|
|
|
+LIBVIRT_6.2.0 {
|
|
+ global:
|
|
+ virDomainHotpatchManage;
|
|
+} LIBVIRT_6.0.0;
|
|
# .... define new API here using predicted next version number ....
|
|
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
|
|
index 7bae0c2514..1202d44017 100644
|
|
--- a/src/remote/remote_driver.c
|
|
+++ b/src/remote/remote_driver.c
|
|
@@ -8684,6 +8684,7 @@ static virHypervisorDriver hypervisor_driver = {
|
|
.domainAgentSetResponseTimeout = remoteDomainAgentSetResponseTimeout, /* 5.10.0 */
|
|
.domainBackupBegin = remoteDomainBackupBegin, /* 6.0.0 */
|
|
.domainBackupGetXMLDesc = remoteDomainBackupGetXMLDesc, /* 6.0.0 */
|
|
+ .domainHotpatchManage = remoteDomainHotpatchManage, /* 6.2.0 */
|
|
};
|
|
|
|
static virNetworkDriver network_driver = {
|
|
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
|
|
index 8b05082b61..ee13075ce1 100644
|
|
--- a/src/remote/remote_protocol.x
|
|
+++ b/src/remote/remote_protocol.x
|
|
@@ -3771,6 +3771,18 @@ struct remote_domain_backup_get_xml_desc_ret {
|
|
remote_nonnull_string xml;
|
|
};
|
|
|
|
+struct remote_domain_hotpatch_manage_args {
|
|
+ remote_nonnull_domain dom;
|
|
+ int action;
|
|
+ remote_string patch;
|
|
+ remote_string id;
|
|
+ unsigned int flags;
|
|
+};
|
|
+
|
|
+struct remote_domain_hotpatch_manage_ret {
|
|
+ remote_string info;
|
|
+};
|
|
+
|
|
/*----- Protocol. -----*/
|
|
|
|
/* Define the program number, protocol version and procedure numbers here. */
|
|
@@ -6668,5 +6680,11 @@ enum remote_procedure {
|
|
* @priority: high
|
|
* @acl: domain:read
|
|
*/
|
|
- REMOTE_PROC_DOMAIN_BACKUP_GET_XML_DESC = 422
|
|
+ REMOTE_PROC_DOMAIN_BACKUP_GET_XML_DESC = 422,
|
|
+
|
|
+ /**
|
|
+ * @generate: both
|
|
+ * @acl: domain:read
|
|
+ */
|
|
+ REMOTE_PROC_DOMAIN_HOTPATCH_MANAGE = 800
|
|
};
|
|
--
|
|
2.27.0
|
|
|