Signed-off-by: Nikolai Barybin <nikolai.barybin(a)virtuozzo.com>
---
src/conf/domain_conf.c | 64 ++++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 2 ++
src/libvirt_private.syms | 2 ++
3 files changed, 68 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 99ecb03067..89dceacf79 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -303,6 +303,15 @@ VIR_ENUM_IMPL(virDomainLifecycleAction,
"coredump-restart",
);
+VIR_ENUM_IMPL(virDomainCoreDumpFormat,
+ VIR_DOMAIN_CORE_DUMP_FORMAT_LAST,
+ "raw",
+ "kdump-zlib",
+ "kdump-lzo",
+ "kdump-snappy",
+ "win-dmp",
+);
+
VIR_ENUM_IMPL(virDomainLockFailure,
VIR_DOMAIN_LOCK_FAILURE_LAST,
"default",
@@ -13820,6 +13829,29 @@ virDomainRedirFilterDefParseXML(xmlNodePtr node,
return NULL;
}
+static int
+virDomainCoredumpFormatParseXML(xmlXPathContextPtr ctxt,
+ const char *name,
+ const char *xpath,
+ int *val,
+ int defaultVal,
+ virEventActionFromStringFunc convFunc)
+{
+ g_autofree char *tmp = virXPathString(xpath, ctxt);
+
+ if (tmp == NULL) {
+ *val = defaultVal;
+ } else {
+ *val = convFunc(tmp);
+ if (*val < 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("unknown %1$s format: %2$s"), name, tmp);
+ return -1;
+ }
+ }
+ return 0;
+}
+
static int
virDomainEventActionParseXML(xmlXPathContextPtr ctxt,
const char *name,
@@ -19163,6 +19195,13 @@ virDomainDefLifecycleParse(virDomainDef *def,
virDomainLifecycleActionTypeFromString) < 0)
return -1;
+ if (virDomainCoredumpFormatParseXML(ctxt, "coredump_format",
+ "string(./coredump_format[1])",
+ &def->coredumpFormat,
+ VIR_DOMAIN_CORE_DUMP_FORMAT_RAW,
+ virDomainCoreDumpFormatTypeFromString) < 0)
+ return -1;
+
if (virDomainEventActionParseXML(ctxt, "on_lockfailure",
"string(./on_lockfailure[1])",
&def->onLockFailure,
@@ -22857,6 +22896,25 @@ virDomainEventActionDefFormat(virBuffer *buf,
}
+static int
+virDomainCoreDumpFormatDefFormat(virBuffer *buf,
+ int type,
+ const char *name,
+ virEventActionToStringFunc convFunc)
+{
+ const char *typeStr = convFunc(type);
+ if (!typeStr) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("unexpected %1$s coredump format: %2$d"), name,
type);
+ return -1;
+ }
+
+ virBufferAsprintf(buf, "<%s>%s</%s>\n", name, typeStr, name);
+
+ return 0;
+}
+
+
static void
virSecurityLabelDefFormat(virBuffer *buf,
virSecurityLabelDef *def,
@@ -29023,6 +29081,12 @@ virDomainDefFormatInternalSetRootName(virDomainDef *def,
"on_crash",
virDomainLifecycleActionTypeToString) < 0)
return -1;
+ if ((def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_DESTROY ||
+ def->onCrash == VIR_DOMAIN_LIFECYCLE_ACTION_COREDUMP_RESTART) &&
+ virDomainCoreDumpFormatDefFormat(buf, def->coredumpFormat,
+ "coredump_format",
+ virDomainCoreDumpFormatTypeToString) < 0)
+ return -1;
if (def->onLockFailure != VIR_DOMAIN_LOCK_FAILURE_DEFAULT &&
virDomainEventActionDefFormat(buf, def->onLockFailure,
"on_lockfailure",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 0d1dd954ae..6e43282160 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3144,6 +3144,7 @@ struct _virDomainDef {
int onReboot;
int onPoweroff;
int onCrash;
+ int coredumpFormat;
int onLockFailure; /* enum virDomainLockFailureAction */
@@ -4281,6 +4282,7 @@ VIR_ENUM_DECL(virDomainCapabilitiesPolicy);
VIR_ENUM_DECL(virDomainProcessCapsFeature);
VIR_ENUM_DECL(virDomainLifecycle);
VIR_ENUM_DECL(virDomainLifecycleAction);
+VIR_ENUM_DECL(virDomainCoreDumpFormat);
VIR_ENUM_DECL(virDomainDevice);
VIR_ENUM_DECL(virDomainDiskDevice);
VIR_ENUM_DECL(virDomainDiskGeometryTrans);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 812fa4e435..72f9e3418f 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -303,6 +303,8 @@ virDomainControllerPCIModelNameTypeFromString;
virDomainControllerPCIModelNameTypeToString;
virDomainControllerRemove;
virDomainControllerTypeToString;
+virDomainCoreDumpFormatTypeFromString;
+virDomainCoreDumpFormatTypeToString;
virDomainCpuPlacementModeTypeFromString;
virDomainCpuPlacementModeTypeToString;
virDomainCryptoBackendTypeFromString;
--
2.43.5