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):
|
||||
self.file = file
|
||||
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):
|
||||
if self.desc:
|
||||
@ -271,6 +289,8 @@ class ConfigurationSection(object):
|
||||
section = VMSDSection(self.file, version_id, self.desc,
|
||||
'configuration')
|
||||
section.read()
|
||||
self.parse_capabilities(
|
||||
section.data.get("configuration/capabilities"))
|
||||
else:
|
||||
# backward compatibility for older streams that don't have
|
||||
# the configuration section in the json
|
||||
@ -297,6 +317,23 @@ class VMSDFieldGeneric(object):
|
||||
self.data = self.file.readvar(size)
|
||||
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):
|
||||
def __init__(self, desc, file):
|
||||
super(VMSDFieldInt, self).__init__(desc, file)
|
||||
@ -471,6 +508,7 @@ vmsd_field_readers = {
|
||||
"unused_buffer" : VMSDFieldGeneric,
|
||||
"bitmap" : VMSDFieldGeneric,
|
||||
"struct" : VMSDFieldStruct,
|
||||
"capability": VMSDFieldCap,
|
||||
"unknown" : VMSDFieldGeneric,
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user