mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-04 01:24:12 +08:00
tools: ynl: Add struct parsing to nlspec
Add python classes for struct definitions to nlspec Signed-off-by: Donald Hunter <donald.hunter@gmail.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
de7494524d
commit
bec0b7a2db
@ -214,6 +214,44 @@ class SpecAttrSet(SpecElement):
|
||||
return self.attrs.items()
|
||||
|
||||
|
||||
class SpecStructMember(SpecElement):
|
||||
"""Struct member attribute
|
||||
|
||||
Represents a single struct member attribute.
|
||||
|
||||
Attributes:
|
||||
type string, type of the member attribute
|
||||
"""
|
||||
def __init__(self, family, yaml):
|
||||
super().__init__(family, yaml)
|
||||
self.type = yaml['type']
|
||||
|
||||
|
||||
class SpecStruct(SpecElement):
|
||||
"""Netlink struct type
|
||||
|
||||
Represents a C struct definition.
|
||||
|
||||
Attributes:
|
||||
members ordered list of struct members
|
||||
"""
|
||||
def __init__(self, family, yaml):
|
||||
super().__init__(family, yaml)
|
||||
|
||||
self.members = []
|
||||
for member in yaml.get('members', []):
|
||||
self.members.append(self.new_member(family, member))
|
||||
|
||||
def new_member(self, family, elem):
|
||||
return SpecStructMember(family, elem)
|
||||
|
||||
def __iter__(self):
|
||||
yield from self.members
|
||||
|
||||
def items(self):
|
||||
return self.members.items()
|
||||
|
||||
|
||||
class SpecOperation(SpecElement):
|
||||
"""Netlink Operation
|
||||
|
||||
@ -344,6 +382,9 @@ class SpecFamily(SpecElement):
|
||||
def new_attr_set(self, elem):
|
||||
return SpecAttrSet(self, elem)
|
||||
|
||||
def new_struct(self, elem):
|
||||
return SpecStruct(self, elem)
|
||||
|
||||
def new_operation(self, elem, req_val, rsp_val):
|
||||
return SpecOperation(self, elem, req_val, rsp_val)
|
||||
|
||||
@ -399,6 +440,8 @@ class SpecFamily(SpecElement):
|
||||
for elem in definitions:
|
||||
if elem['type'] == 'enum' or elem['type'] == 'flags':
|
||||
self.consts[elem['name']] = self.new_enum(elem)
|
||||
elif elem['type'] == 'struct':
|
||||
self.consts[elem['name']] = self.new_struct(elem)
|
||||
else:
|
||||
self.consts[elem['name']] = elem
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user