Re: [Xen-devel] [PATCH 11/27] tools/python: Libxc migration v2 infrastructure

2015-06-16 Thread Ian Campbell
On Mon, 2015-06-15 at 14:44 +0100, Andrew Cooper wrote:
 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

For this, and the following lobxl and verification patches:

Acked-by: Ian Campbell ian.campb...@citrix.com

(I've not read them closely on this pass, I recall looking at them
before)



___
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel


[Xen-devel] [PATCH 11/27] tools/python: Libxc migration v2 infrastructure

2015-06-15 Thread Andrew Cooper
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