mirror of https://github.com/xemu-project/xemu.git
migration: Add capability parsing to analyze-migration.py
The script is broken when the configuration/capabilities section is present. Add support for parsing the capabilities so we can fix it in the next patch. Signed-off-by: Fabiano Rosas <farosas@suse.de> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Message-ID: <20231009184326.15777-4-farosas@suse.de>
This commit is contained in:
parent
c36c31c86b
commit
31499a9dc1
|
@ -264,6 +264,24 @@ class ConfigurationSection(object):
|
||||||
def __init__(self, file, desc):
|
def __init__(self, file, desc):
|
||||||
self.file = file
|
self.file = file
|
||||||
self.desc = desc
|
self.desc = desc
|
||||||
|
self.caps = []
|
||||||
|
|
||||||
|
def parse_capabilities(self, vmsd_caps):
|
||||||
|
if not vmsd_caps:
|
||||||
|
return
|
||||||
|
|
||||||
|
ncaps = vmsd_caps.data['caps_count'].data
|
||||||
|
self.caps = vmsd_caps.data['capabilities']
|
||||||
|
|
||||||
|
if type(self.caps) != list:
|
||||||
|
self.caps = [self.caps]
|
||||||
|
|
||||||
|
if len(self.caps) != ncaps:
|
||||||
|
raise Exception("Number of capabilities doesn't match "
|
||||||
|
"caps_count field")
|
||||||
|
|
||||||
|
def has_capability(self, cap):
|
||||||
|
return any([str(c) == cap for c in self.caps])
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
if self.desc:
|
if self.desc:
|
||||||
|
@ -271,6 +289,8 @@ class ConfigurationSection(object):
|
||||||
section = VMSDSection(self.file, version_id, self.desc,
|
section = VMSDSection(self.file, version_id, self.desc,
|
||||||
'configuration')
|
'configuration')
|
||||||
section.read()
|
section.read()
|
||||||
|
self.parse_capabilities(
|
||||||
|
section.data.get("configuration/capabilities"))
|
||||||
else:
|
else:
|
||||||
# backward compatibility for older streams that don't have
|
# backward compatibility for older streams that don't have
|
||||||
# the configuration section in the json
|
# the configuration section in the json
|
||||||
|
@ -297,6 +317,23 @@ class VMSDFieldGeneric(object):
|
||||||
self.data = self.file.readvar(size)
|
self.data = self.file.readvar(size)
|
||||||
return self.data
|
return self.data
|
||||||
|
|
||||||
|
class VMSDFieldCap(object):
|
||||||
|
def __init__(self, desc, file):
|
||||||
|
self.file = file
|
||||||
|
self.desc = desc
|
||||||
|
self.data = ""
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.data
|
||||||
|
|
||||||
|
def read(self):
|
||||||
|
len = self.file.read8()
|
||||||
|
self.data = self.file.readstr(len)
|
||||||
|
|
||||||
|
|
||||||
class VMSDFieldInt(VMSDFieldGeneric):
|
class VMSDFieldInt(VMSDFieldGeneric):
|
||||||
def __init__(self, desc, file):
|
def __init__(self, desc, file):
|
||||||
super(VMSDFieldInt, self).__init__(desc, file)
|
super(VMSDFieldInt, self).__init__(desc, file)
|
||||||
|
@ -471,6 +508,7 @@ vmsd_field_readers = {
|
||||||
"unused_buffer" : VMSDFieldGeneric,
|
"unused_buffer" : VMSDFieldGeneric,
|
||||||
"bitmap" : VMSDFieldGeneric,
|
"bitmap" : VMSDFieldGeneric,
|
||||||
"struct" : VMSDFieldStruct,
|
"struct" : VMSDFieldStruct,
|
||||||
|
"capability": VMSDFieldCap,
|
||||||
"unknown" : VMSDFieldGeneric,
|
"unknown" : VMSDFieldGeneric,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue