mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 12:24:37 -04:00
Merge branch 'add-support-for-encoding-multi-attr-to-ynl'
Alessandro Marcolini says:
====================
Add support for encoding multi-attr to ynl
This patchset add the support for encoding multi-attr attributes, making
it possible to use ynl with qdisc which have this kind of attributes
(e.g: taprio, ets).
Patch 1 corrects two docstrings in nlspec.py
Patch 2 adds the multi-attr attribute to taprio entry
Patch 3 adds the support for encoding multi-attr
Some examples of what is now possible with the ynl cli:
- Add a taprio qdisc
--do newqdisc --create --json '{
"family":1, "ifindex":4, "handle":65536, "parent":4294967295, "info":0,
"kind":"taprio",
"stab":{
"base": {
"cell-log": 0,
"size-log": 0,
"cell-align": 0,
"overhead": 31,
"linklayer": 0,
"mpu": 0,
"mtu": 0,
"tsize": 0
}
},
"options":{
"priomap": {
"num-tc": 3,
"prio-tc-map": "01010101010101010101010101010101",
"hw": 0,
"count": "0100010002000000000000000000000000000000000000000000000000000000",
"offset": "0100020003000000000000000000000000000000000000000000000000000000"
},
"sched-clockid":11,
"sched-entry-list": {"entry": [
{"index":0, "cmd":0, "gate-mask":1, "interval":300000},
{"index":1, "cmd":0, "gate-mask":2, "interval":300000},
{"index":2, "cmd":0, "gate-mask":4, "interval":400000} ]
},
"sched-base-time":1528743495910289987, "flags": 1
}
}'
- Add an ets qdisc
--create --json '{
"family":1, "ifindex":4, "handle":65536, "parent":4294967295, "kind":"ets",
"options":{
"nbands":6,
"nstrict":3,
"quanta":{
"quanta-band": [3500, 3000, 2500]
},
"priomap":{
"priomap-band":[0, 1, 1, 1, 2, 3, 4, 5]
}
}
}'
====================
Link: https://lore.kernel.org/r/cover.1706962013.git.alessandromarcolini99@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -3376,6 +3376,7 @@ attribute-sets:
|
||||
name: entry
|
||||
type: nest
|
||||
nested-attributes: tc-taprio-sched-entry
|
||||
multi-attr: true
|
||||
-
|
||||
name: tc-taprio-sched-entry
|
||||
attributes:
|
||||
|
||||
@@ -144,7 +144,7 @@ class SpecEnumSet(SpecElement):
|
||||
|
||||
|
||||
class SpecAttr(SpecElement):
|
||||
""" Single Netlink atttribute type
|
||||
""" Single Netlink attribute type
|
||||
|
||||
Represents a single attribute type within an attr space.
|
||||
|
||||
@@ -308,10 +308,9 @@ class SpecSubMessage(SpecElement):
|
||||
|
||||
|
||||
class SpecSubMessageFormat(SpecElement):
|
||||
""" Netlink sub-message definition
|
||||
""" Netlink sub-message format definition
|
||||
|
||||
Represents a set of sub-message formats for polymorphic nlattrs
|
||||
that contain type-specific sub messages.
|
||||
Represents a single format for a sub-message.
|
||||
|
||||
Attributes:
|
||||
value attribute value to match against type selector
|
||||
|
||||
@@ -444,6 +444,13 @@ class YnlFamily(SpecFamily):
|
||||
except KeyError:
|
||||
raise Exception(f"Space '{space}' has no attribute '{name}'")
|
||||
nl_type = attr.value
|
||||
|
||||
if attr.is_multi and isinstance(value, list):
|
||||
attr_payload = b''
|
||||
for subvalue in value:
|
||||
attr_payload += self._add_attr(space, name, subvalue, search_attrs)
|
||||
return attr_payload
|
||||
|
||||
if attr["type"] == 'nest':
|
||||
nl_type |= Netlink.NLA_F_NESTED
|
||||
attr_payload = b''
|
||||
|
||||
Reference in New Issue
Block a user