Contains:
* Python implementation of the libxc migration v2 records
* Verification code for spec compliance
* Unit tests
Signed-off-by: Andrew Cooper andrew.coop...@citrix.com
---
tools/python/setup.py|1 +
tools/python/xen/migration/libxc.py | 446 ++
tools/python/xen/migration/tests.py | 41
tools/python/xen/migration/verify.py | 37 +++
4 files changed, 525 insertions(+)
create mode 100644 tools/python/xen/migration/__init__.py
create mode 100644 tools/python/xen/migration/libxc.py
create mode 100644 tools/python/xen/migration/tests.py
create mode 100644 tools/python/xen/migration/verify.py
diff --git a/tools/python/setup.py b/tools/python/setup.py
index 439c429..5bf81be 100644
--- a/tools/python/setup.py
+++ b/tools/python/setup.py
@@ -43,6 +43,7 @@ setup(name= 'xen',
version = '3.0',
description = 'Xen',
packages= ['xen',
+ 'xen.migration',
'xen.lowlevel',
],
ext_package = xen.lowlevel,
diff --git a/tools/python/xen/migration/__init__.py
b/tools/python/xen/migration/__init__.py
new file mode 100644
index 000..e69de29
diff --git a/tools/python/xen/migration/libxc.py
b/tools/python/xen/migration/libxc.py
new file mode 100644
index 000..b0255ac
--- /dev/null
+++ b/tools/python/xen/migration/libxc.py
@@ -0,0 +1,446 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+
+Libxc Migration v2 streams
+
+Record structures as per docs/specs/libxc-migration-stream.pandoc, and
+verification routines.
+
+
+import sys
+
+from struct import calcsize, unpack
+
+from xen.migration.verify import StreamError, RecordError, VerifyBase
+
+# Image Header
+IHDR_FORMAT = !QIIHHI
+
+IHDR_MARKER = 0x
+IHDR_IDENT = 0x58454E46 # XENF in ASCII
+IHDR_VERSION = 2
+
+IHDR_OPT_BIT_ENDIAN = 0
+IHDR_OPT_LE = (0 IHDR_OPT_BIT_ENDIAN)
+IHDR_OPT_BE = (1 IHDR_OPT_BIT_ENDIAN)
+
+IHDR_OPT_RESZ_MASK = 0xfffe
+
+# Domain Header
+DHDR_FORMAT = IHHII
+
+DHDR_TYPE_x86_pv = 0x0001
+DHDR_TYPE_x86_hvm = 0x0002
+DHDR_TYPE_x86_pvh = 0x0003
+DHDR_TYPE_arm = 0x0004
+
+dhdr_type_to_str = {
+DHDR_TYPE_x86_pv : x86 PV,
+DHDR_TYPE_x86_hvm : x86 HVM,
+DHDR_TYPE_x86_pvh : x86 PVH,
+DHDR_TYPE_arm : ARM,
+}
+
+# Records
+RH_FORMAT = II
+
+REC_TYPE_end = 0x
+REC_TYPE_page_data= 0x0001
+REC_TYPE_x86_pv_info = 0x0002
+REC_TYPE_x86_pv_p2m_frames= 0x0003
+REC_TYPE_x86_pv_vcpu_basic= 0x0004
+REC_TYPE_x86_pv_vcpu_extended = 0x0005
+REC_TYPE_x86_pv_vcpu_xsave= 0x0006
+REC_TYPE_shared_info = 0x0007
+REC_TYPE_tsc_info = 0x0008
+REC_TYPE_hvm_context = 0x0009
+REC_TYPE_hvm_params = 0x000a
+REC_TYPE_toolstack= 0x000b
+REC_TYPE_x86_pv_vcpu_msrs = 0x000c
+REC_TYPE_verify = 0x000d
+REC_TYPE_checkpoint = 0x000e
+
+rec_type_to_str = {
+REC_TYPE_end : End,
+REC_TYPE_page_data: Page data,
+REC_TYPE_x86_pv_info : x86 PV info,
+REC_TYPE_x86_pv_p2m_frames: x86 PV P2M frames,
+REC_TYPE_x86_pv_vcpu_basic: x86 PV vcpu basic,
+REC_TYPE_x86_pv_vcpu_extended : x86 PV vcpu extended,
+REC_TYPE_x86_pv_vcpu_xsave: x86 PV vcpu xsave,
+REC_TYPE_shared_info : Shared info,
+REC_TYPE_tsc_info : TSC info,
+REC_TYPE_hvm_context : HVM context,
+REC_TYPE_hvm_params : HVM params,
+REC_TYPE_toolstack: Toolstack,
+REC_TYPE_x86_pv_vcpu_msrs : x86 PV vcpu msrs,
+REC_TYPE_verify : Verify,
+REC_TYPE_checkpoint : Checkpoint,
+}
+
+# page_data
+PAGE_DATA_FORMAT = II
+PAGE_DATA_PFN_MASK = (1L 52) - 1
+PAGE_DATA_PFN_RESZ_MASK = ((1L 60) - 1) ~((1L 52) - 1)
+
+# flags from xen/public/domctl.h: XEN_DOMCTL_PFINFO_* shifted by 32 bits
+PAGE_DATA_TYPE_SHIFT = 60
+PAGE_DATA_TYPE_LTABTYPE_MASK = (0x7L PAGE_DATA_TYPE_SHIFT)
+PAGE_DATA_TYPE_LTAB_MASK = (0xfL PAGE_DATA_TYPE_SHIFT)
+PAGE_DATA_TYPE_LPINTAB = (0x8L PAGE_DATA_TYPE_SHIFT) # Pinned
pagetable
+
+PAGE_DATA_TYPE_NOTAB = (0x0L PAGE_DATA_TYPE_SHIFT) # Regular page
+PAGE_DATA_TYPE_L1TAB = (0x1L PAGE_DATA_TYPE_SHIFT) # L1 pagetable
+PAGE_DATA_TYPE_L2TAB = (0x2L PAGE_DATA_TYPE_SHIFT) # L2 pagetable
+PAGE_DATA_TYPE_L3TAB = (0x3L PAGE_DATA_TYPE_SHIFT) # L3 pagetable
+PAGE_DATA_TYPE_L4TAB = (0x4L PAGE_DATA_TYPE_SHIFT) # L4 pagetable
+PAGE_DATA_TYPE_BROKEN= (0xdL PAGE_DATA_TYPE_SHIFT) # Broken
+PAGE_DATA_TYPE_XALLOC= (0xeL PAGE_DATA_TYPE_SHIFT) # Allocate-only
+PAGE_DATA_TYPE_XTAB = (0xfL PAGE_DATA_TYPE_SHIFT) # Invalid
+
+# x86_pv_info
+X86_PV_INFO_FORMAT= BBHI
+
+X86_PV_P2M_FRAMES_FORMAT