Commit aef87784 authored by Vladimir Sementsov-Ogievskiy's avatar Vladimir Sementsov-Ogievskiy Committed by Eric Blake
Browse files

qcow2: QcowHeaderExtension print names for extension magics



Suggested-by: default avatarAndrey Shinkevich <andrey.shinkevich@virtuozzo.com>
Signed-off-by: default avatarVladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
Message-Id: <20200606081806.23897-13-vsementsov@virtuozzo.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarEric Blake <eblake@redhat.com>
parent a9e750e1
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ refcount_order 4
header_length             72

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

@@ -53,7 +53,7 @@ refcount_order 4
header_length             72

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

@@ -81,12 +81,12 @@ refcount_order 4
header_length             72

Header extension:
magic                     0xe2792aca
magic                     0xe2792aca (Backing format)
length                    11
data                      'host_device'

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

@@ -116,12 +116,12 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

@@ -149,12 +149,12 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

@@ -182,17 +182,17 @@ refcount_order 4
header_length             112

Header extension:
magic                     0xe2792aca
magic                     0xe2792aca (Backing format)
length                    11
data                      'host_device'

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

Header extension:
magic                     0x12345678
magic                     0x12345678 (<unknown>)
length                    31
data                      'This is a test header extension'

+2 −2
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ incompatible_features []
compatible_features       []
autoclear_features        [63]
Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -37,7 +37,7 @@ incompatible_features []
compatible_features       []
autoclear_features        []
Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

+7 −7
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -83,7 +83,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -139,7 +139,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -194,7 +194,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -263,7 +263,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -325,7 +325,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

@@ -354,7 +354,7 @@ refcount_order 4
header_length             112

Header extension:
magic                     0x6803f857
magic                     0x6803f857 (Feature table)
length                    336
data                      <binary>

+16 −1
Original line number Diff line number Diff line
@@ -39,6 +39,12 @@ class Flags64(Qcow2Field):
        return str(bits)


class Enum(Qcow2Field):

    def __str__(self):
        return f'{self.value:#x} ({self.mapping.get(self.value, "<unknown>")})'


class Qcow2StructMeta(type):

    # Mapping from c types to python struct format
@@ -99,8 +105,17 @@ class Qcow2Struct(metaclass=Qcow2StructMeta):

class QcowHeaderExtension(Qcow2Struct):

    class Magic(Enum):
        mapping = {
            0xe2792aca: 'Backing format',
            0x6803f857: 'Feature table',
            0x0537be77: 'Crypto header',
            0x23852875: 'Bitmaps',
            0x44415441: 'Data file'
        }

    fields = (
        ('u32', '{:#x}', 'magic'),
        ('u32', Magic, 'magic'),
        ('u32', '{}', 'length')
        # length bytes of data follows
        # then padding to next multiply of 8