}
+bool
+virDomainObjIsPostcopy(virDomainObj *dom,
+ virDomainJobOperation op)
+{
+ if (op != VIR_DOMAIN_JOB_OPERATION_MIGRATION_IN &&
+ op != VIR_DOMAIN_JOB_OPERATION_MIGRATION_OUT)
+ return false;
+
+ if (op == VIR_DOMAIN_JOB_OPERATION_MIGRATION_IN) {
+ return (dom->state.state == VIR_DOMAIN_PAUSED &&
+ dom->state.reason == VIR_DOMAIN_PAUSED_POSTCOPY_FAILED) ||
+ (dom->state.state == VIR_DOMAIN_RUNNING &&
+ (dom->state.reason == VIR_DOMAIN_RUNNING_POSTCOPY ||
+ dom->state.reason == VIR_DOMAIN_RUNNING_POSTCOPY_FAILED));
+ }
+
+ return dom->state.state == VIR_DOMAIN_PAUSED &&
+ (dom->state.reason == VIR_DOMAIN_PAUSED_POSTCOPY ||
+ dom->state.reason == VIR_DOMAIN_PAUSED_POSTCOPY_FAILED);
+}
+
+
void
virDomainObjSetState(virDomainObj *dom, virDomainState state, int reason)
{
bool
virDomainObjIsFailedPostcopy(virDomainObj *obj)
ATTRIBUTE_NONNULL(1);
+bool
+virDomainObjIsPostcopy(virDomainObj *dom,
+ virDomainJobOperation op)
+ ATTRIBUTE_NONNULL(1);
virSecurityLabelDef *
virDomainDefGetSecurityLabelDef(const virDomainDef *def, const char *model);