netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy
@ 2024-12-10 16:14 Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 1/7] tools/net/ynl: remove extraneous plural from variable names Donald Hunter
                   ` (6 more replies)
  0 siblings, 7 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

Add a rudimentary YNL spec for nl80211 that includes get-wiphy and
get-interface, along with some required enhancements to YNL and the
netlink schemas.

Patch 1 is a minor cleanup to prepare for patch 2
Patches 2-4 are new features for YNL
Patches 5-6 are schema updates for feature parity
Patch 7 is the new nl80211 spec

v1 -> v2
 - Add formatting hints support to patch 3, thanks Jakub
 - Raise exception for unhandled hints in patch 4, thanks Jakub
 - Update nl80211 spec w/ split-wiphy-dump in patch 7, thanks Johannes

Donald Hunter (7):
  tools/net/ynl: remove extraneous plural from variable names
  tools/net/ynl: support decoding indexed arrays as enums
  tools/net/ynl: support rendering C array members to strings
  tools/net/ynl: accept IP string inputs
  netlink: specs: support nested structs in genetlink legacy
  netlink: specs: add s8, s16 to genetlink schemas
  netlink: specs: wireless: add a spec for nl80211

 Documentation/netlink/genetlink-c.yaml      |    2 +-
 Documentation/netlink/genetlink-legacy.yaml |    5 +-
 Documentation/netlink/genetlink.yaml        |    2 +-
 Documentation/netlink/specs/nl80211.yaml    | 1938 +++++++++++++++++++
 tools/net/ynl/lib/ynl.py                    |   45 +-
 5 files changed, 1978 insertions(+), 14 deletions(-)
 create mode 100644 Documentation/netlink/specs/nl80211.yaml

-- 
2.47.1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 1/7] tools/net/ynl: remove extraneous plural from variable names
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 2/7] tools/net/ynl: support decoding indexed arrays as enums Donald Hunter
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

_decode_array_attr() uses variable subattrs in every branch when only
one branch decodes more than a single attribute.

Change the variable name to subattr in the branches that only decode a
single attribute so that the intent is more obvious.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
---
 tools/net/ynl/lib/ynl.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 01ec01a90e76..dbc7a0a6ae68 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -644,15 +644,15 @@ class YnlFamily(SpecFamily):
                 subattrs = self._decode(NlAttrs(item.raw), attr_spec['nested-attributes'])
                 decoded.append({ item.type: subattrs })
             elif attr_spec["sub-type"] == 'binary':
-                subattrs = item.as_bin()
+                subattr = item.as_bin()
                 if attr_spec.display_hint:
-                    subattrs = self._formatted_string(subattrs, attr_spec.display_hint)
-                decoded.append(subattrs)
+                    subattr = self._formatted_string(subattr, attr_spec.display_hint)
+                decoded.append(subattr)
             elif attr_spec["sub-type"] in NlAttr.type_formats:
-                subattrs = item.as_scalar(attr_spec['sub-type'], attr_spec.byte_order)
+                subattr = item.as_scalar(attr_spec['sub-type'], attr_spec.byte_order)
                 if attr_spec.display_hint:
-                    subattrs = self._formatted_string(subattrs, attr_spec.display_hint)
-                decoded.append(subattrs)
+                    subattr = self._formatted_string(subattr, attr_spec.display_hint)
+                decoded.append(subattr)
             else:
                 raise Exception(f'Unknown {attr_spec["sub-type"]} with name {attr_spec["name"]}')
         return decoded
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 2/7] tools/net/ynl: support decoding indexed arrays as enums
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 1/7] tools/net/ynl: remove extraneous plural from variable names Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 3/7] tools/net/ynl: support rendering C array members to strings Donald Hunter
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

When decoding an indexed-array with a scalar subtype, it is currently
only possible to add a display-hint. Add support for decoding each value
as an enum.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
---
 tools/net/ynl/lib/ynl.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index dbc7a0a6ae68..0d39a83574d5 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -650,7 +650,9 @@ class YnlFamily(SpecFamily):
                 decoded.append(subattr)
             elif attr_spec["sub-type"] in NlAttr.type_formats:
                 subattr = item.as_scalar(attr_spec['sub-type'], attr_spec.byte_order)
-                if attr_spec.display_hint:
+                if 'enum' in attr_spec:
+                    subattr = self._decode_enum(subattr, attr_spec)
+                elif attr_spec.display_hint:
                     subattr = self._formatted_string(subattr, attr_spec.display_hint)
                 decoded.append(subattr)
             else:
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 3/7] tools/net/ynl: support rendering C array members to strings
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 1/7] tools/net/ynl: remove extraneous plural from variable names Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 2/7] tools/net/ynl: support decoding indexed arrays as enums Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 4/7] tools/net/ynl: accept IP string inputs Donald Hunter
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

The nl80211 family encodes the list of supported ciphers as a C array of
u32 values. Add support for translating arrays of scalars into strings
for enum names and display hints.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
---
 tools/net/ynl/lib/ynl.py | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 0d39a83574d5..08ad2d8a874e 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -627,6 +627,10 @@ class YnlFamily(SpecFamily):
             decoded = self._decode_struct(attr.raw, attr_spec.struct_name)
         elif attr_spec.sub_type:
             decoded = attr.as_c_array(attr_spec.sub_type)
+            if 'enum' in attr_spec:
+                decoded = [ self._decode_enum(x, attr_spec) for x in decoded ]
+            elif attr_spec.display_hint:
+                decoded = self._formatted_string(decoded, attr_spec.display_hint)
         else:
             decoded = attr.as_bin()
             if attr_spec.display_hint:
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 4/7] tools/net/ynl: accept IP string inputs
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
                   ` (2 preceding siblings ...)
  2024-12-10 16:14 ` [PATCH net-next v2 3/7] tools/net/ynl: support rendering C array members to strings Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 5/7] netlink: specs: support nested structs in genetlink legacy Donald Hunter
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

The ynl tool uses display-hint to know when to format IP addresses in
printed output, but not to parse IP addresses from --json input. Add
support for parsing ipv4 and ipv6 strings.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
 tools/net/ynl/lib/ynl.py | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/tools/net/ynl/lib/ynl.py b/tools/net/ynl/lib/ynl.py
index 08ad2d8a874e..c9ed356d7ed2 100644
--- a/tools/net/ynl/lib/ynl.py
+++ b/tools/net/ynl/lib/ynl.py
@@ -536,9 +536,11 @@ class YnlFamily(SpecFamily):
         try:
             return int(value)
         except (ValueError, TypeError) as e:
-            if 'enum' not in attr_spec:
-                raise e
-        return self._encode_enum(attr_spec, value)
+            if 'enum' in attr_spec:
+                return self._encode_enum(attr_spec, value)
+            if attr_spec.display_hint:
+                return self._from_string(value, attr_spec)
+            raise e
 
     def _add_attr(self, space, name, value, search_attrs):
         try:
@@ -571,7 +573,10 @@ class YnlFamily(SpecFamily):
             if isinstance(value, bytes):
                 attr_payload = value
             elif isinstance(value, str):
-                attr_payload = bytes.fromhex(value)
+                if attr.display_hint:
+                    attr_payload = self._from_string(value, attr)
+                else:
+                    attr_payload = bytes.fromhex(value)
             elif isinstance(value, dict) and attr.struct_name:
                 attr_payload = self._encode_struct(attr.struct_name, value)
             else:
@@ -901,6 +906,18 @@ class YnlFamily(SpecFamily):
             formatted = raw
         return formatted
 
+    def _from_string(self, string, attr_spec):
+        if attr_spec.display_hint in ['ipv4', 'ipv6']:
+            ip = ipaddress.ip_address(string)
+            if attr_spec['type'] == 'binary':
+                raw = ip.packed
+            else:
+                raw = int(ip)
+        else:
+            raise Exception(f"Display hint '{attr_spec.display_hint}' not implemented"
+                            f" when parsing '{attr_spec['name']}'")
+        return raw
+
     def handle_ntf(self, decoded):
         msg = dict()
         if self.include_raw:
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 5/7] netlink: specs: support nested structs in genetlink legacy
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
                   ` (3 preceding siblings ...)
  2024-12-10 16:14 ` [PATCH net-next v2 4/7] tools/net/ynl: accept IP string inputs Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 6/7] netlink: specs: add s8, s16 to genetlink schemas Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211 Donald Hunter
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

Nested structs are already supported in netlink-raw. Add the same
capability to the genetlink legacy schema.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
---
 Documentation/netlink/genetlink-legacy.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/netlink/genetlink-legacy.yaml b/Documentation/netlink/genetlink-legacy.yaml
index 16380e12cabe..7520f63ec3d2 100644
--- a/Documentation/netlink/genetlink-legacy.yaml
+++ b/Documentation/netlink/genetlink-legacy.yaml
@@ -151,6 +151,9 @@ properties:
                   the right formatting mechanism when displaying values of this
                   type.
                 enum: [ hex, mac, fddi, ipv4, ipv6, uuid ]
+              struct:
+                description: Name of the nested struct type.
+                type: string
         # End genetlink-legacy
 
   attribute-sets:
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 6/7] netlink: specs: add s8, s16 to genetlink schemas
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
                   ` (4 preceding siblings ...)
  2024-12-10 16:14 ` [PATCH net-next v2 5/7] netlink: specs: support nested structs in genetlink legacy Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-10 16:14 ` [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211 Donald Hunter
  6 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

Add s8 and s16 types to the genetlink schemas to align scalar types
across all schemas.

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
---
 Documentation/netlink/genetlink-c.yaml      | 2 +-
 Documentation/netlink/genetlink-legacy.yaml | 2 +-
 Documentation/netlink/genetlink.yaml        | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/Documentation/netlink/genetlink-c.yaml b/Documentation/netlink/genetlink-c.yaml
index 9660ffb1ed6a..1cfc8073a120 100644
--- a/Documentation/netlink/genetlink-c.yaml
+++ b/Documentation/netlink/genetlink-c.yaml
@@ -160,7 +160,7 @@ properties:
                 type: string
               type: &attr-type
                 enum: [ unused, pad, flag, binary,
-                        uint, sint, u8, u16, u32, u64, s32, s64,
+                        uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
                         string, nest, indexed-array, nest-type-value ]
               doc:
                 description: Documentation of the attribute.
diff --git a/Documentation/netlink/genetlink-legacy.yaml b/Documentation/netlink/genetlink-legacy.yaml
index 7520f63ec3d2..f98ed12a09c0 100644
--- a/Documentation/netlink/genetlink-legacy.yaml
+++ b/Documentation/netlink/genetlink-legacy.yaml
@@ -206,7 +206,7 @@ properties:
               type: &attr-type
                 description: The netlink attribute type
                 enum: [ unused, pad, flag, binary, bitfield32,
-                        uint, sint, u8, u16, u32, u64, s32, s64,
+                        uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
                         string, nest, indexed-array, nest-type-value ]
               doc:
                 description: Documentation of the attribute.
diff --git a/Documentation/netlink/genetlink.yaml b/Documentation/netlink/genetlink.yaml
index b036227b46f1..11c1592d49be 100644
--- a/Documentation/netlink/genetlink.yaml
+++ b/Documentation/netlink/genetlink.yaml
@@ -123,7 +123,7 @@ properties:
                 type: string
               type: &attr-type
                 enum: [ unused, pad, flag, binary,
-                        uint, sint, u8, u16, u32, u64, s32, s64,
+                        uint, sint, u8, u16, u32, u64, s8, s16, s32, s64,
                         string, nest, indexed-array, nest-type-value ]
               doc:
                 description: Documentation of the attribute.
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
                   ` (5 preceding siblings ...)
  2024-12-10 16:14 ` [PATCH net-next v2 6/7] netlink: specs: add s8, s16 to genetlink schemas Donald Hunter
@ 2024-12-10 16:14 ` Donald Hunter
  2024-12-11 21:07   ` Simon Horman
  2024-12-12  8:36   ` Johannes Berg
  6 siblings, 2 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-10 16:14 UTC (permalink / raw)
  To: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, Johannes Berg, linux-wireless
  Cc: donald.hunter, Donald Hunter

Add a rudimentary YNL spec for nl80211 that covers get-wiphy,
get-interface and get-protocol-features.

./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/nl80211.yaml \
    --do get-protocol-features
{'protocol-features': {'split-wiphy-dump'}}

./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/nl80211.yaml \
    --dump get-wiphy --json '{ "split-wiphy-dump": true }'

./tools/net/ynl/cli.py \
    --spec Documentation/netlink/specs/nl80211.yaml \
    --dump get-interface

Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
---
 Documentation/netlink/specs/nl80211.yaml | 1938 ++++++++++++++++++++++
 1 file changed, 1938 insertions(+)
 create mode 100644 Documentation/netlink/specs/nl80211.yaml

diff --git a/Documentation/netlink/specs/nl80211.yaml b/Documentation/netlink/specs/nl80211.yaml
new file mode 100644
index 000000000000..5c2650d88790
--- /dev/null
+++ b/Documentation/netlink/specs/nl80211.yaml
@@ -0,0 +1,1938 @@
+# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)
+
+name: nl80211
+protocol: genetlink-legacy
+
+doc:
+  Netlink API for 802.11 wireless devices
+
+definitions:
+  -
+    name: nl80211-commands
+    type: enum
+    entries:
+      - unspec
+      - get-wiphy
+      - set-wiphy
+      - new-wiphy
+      - del-wiphy
+      - get-interface
+      - set-interface
+      - new-interface
+      - del-interface
+      - get-key
+      - set-key
+      - new-key
+      - del-key
+      - get-beacon
+      - set-beacon
+      - new-beacon
+      - del-beacon
+      - get-station
+      - set-station
+      - new-station
+      - del-station
+      - get-mpath
+      - set-mpath
+      - new-mpath
+      - del-mpath
+      - set-bss
+      - set-reg
+      - req-set-reg
+      - get-mesh-config
+      - set-mesh-config
+      - set-mgmt-extra-ie
+      - get-reg
+      - get-scan
+      - trigger-scan
+      - new-scan-results
+      - scan-aborted
+      - reg-change
+      - authenticate
+      - associate
+      - deauthenticate
+      - disassociate
+      - michael-mic-failure
+      - reg-beacon-hint
+      - join-ibss
+      - leave-ibss
+      - testmode
+      - connect
+      - roam
+      - disconnect
+      - set-wiphy-netns
+      - get-survey
+      - new-survey-results
+      - set-pmksa
+      - del-pmksa
+      - flush-pmksa
+      - remain-on-channel
+      - cancel-remain-on-channel
+      - set-tx-bitrate-mask
+      - register-action
+      - action
+      - action-tx-status
+      - set-power-save
+      - get-power-save
+      - set-cqm
+      - notify-cqm
+      - set-channel
+      - set-wds-peer
+      - frame-wait-cancel
+      - join-mesh
+      - leave-mesh
+      - unprot-deauthenticate
+      - unprot-disassociate
+      - new-peer-candidate
+      - get-wowlan
+      - set-wowlan
+      - start-sched-scan
+      - stop-sched-scan
+      - sched-scan-results
+      - sched-scan-stopped
+      - set-rekey-offload
+      - pmksa-candidate
+      - tdls-oper
+      - tdls-mgmt
+      - unexpected-frame
+      - probe-client
+      - register-beacons
+      - unexpected-4-addr-frame
+      - set-noack-map
+      - ch-switch-notify
+      - start-p2p-device
+      - stop-p2p-device
+      - conn-failed
+      - set-mcast-rate
+      - set-mac-acl
+      - radar-detect
+      - get-protocol-features
+      - update-ft-ies
+      - ft-event
+      - crit-protocol-start
+      - crit-protocol-stop
+      - get-coalesce
+      - set-coalesce
+      - channel-switch
+      - vendor
+      - set-qos-map
+      - add-tx-ts
+      - del-tx-ts
+      - get-mpp
+      - join-ocb
+      - leave-ocb
+      - ch-switch-started-notify
+      - tdls-channel-switch
+      - tdls-cancel-channel-switch
+      - wiphy-reg-change
+      - abort-scan
+      - start-nan
+      - stop-nan
+      - add-nan-function
+      - del-nan-function
+      - change-nan-config
+      - nan-match
+      - set-multicast-to-unicast
+      - update-connect-params
+      - set-pmk
+      - del-pmk
+      - port-authorized
+      - reload-regdb
+      - external-auth
+      - sta-opmode-changed
+      - control-port-frame
+      - get-ftm-responder-stats
+      - peer-measurement-start
+      - peer-measurement-result
+      - peer-measurement-complete
+      - notify-radar
+      - update-owe-info
+      - probe-mesh-link
+      - set-tid-config
+      - unprot-beacon
+      - control-port-frame-tx-status
+      - set-sar-specs
+      - obss-color-collision
+      - color-change-request
+      - color-change-started
+      - color-change-aborted
+      - color-change-completed
+      - set-fils-aad
+      - assoc-comeback
+      - add-link
+      - remove-link
+      - add-link-sta
+      - modify-link-sta
+      - remove-link-sta
+      - set-hw-timestamp
+      - links-removed
+      - set-tid-to-link-mapping
+  -
+    name: feature-flags
+    type: flags
+    entries:
+      - sk-tx-status
+      - ht-ibss
+      - inactivity-timer
+      - cell-base-reg-hints
+      - p2p-device-needs-channel
+      - sae
+      - low-priority-scan
+      - scan-flush
+      - ap-scan
+      - vif-txpower
+      - need-obss-scan
+      - p2p-go-ctwin
+      - p2p-go-oppps
+      - reserved
+      - advertise-chan-limits
+      - full-ap-client-state
+      - userspace-mpm
+      - active-monitor
+      - ap-mode-chan-width-change
+      - ds-param-set-ie-in-probes
+      - wfa-tpc-ie-in-proves
+      - quiet
+      - tx-power-insertion
+      - ackto-estimation
+      - static-smps
+      - dynamic-smps
+      - supports-wmm-admission
+      - mac-on-create
+      - tdls-channel-switch
+      - scan-random-mac-addr
+      - sched-scan-random-mac-addr
+      - no-random-mac-addr
+  -
+    name: ieee80211-mcs-info
+    type: struct
+    members:
+      -
+        name: rx-mask
+        type: binary
+        len: 10
+      -
+        name: rx-highest
+        type: u16
+        byte-order: little-endian
+      -
+        name: tx-params
+        type: u8
+      -
+        name: reserved
+        type: binary
+        len: 3
+  -
+    name: ieee80211-vht-mcs-info
+    type: struct
+    members:
+      -
+        name: rx-mcs-map
+        type: u16
+        byte-order: little-endian
+      -
+        name: rx-highest
+        type: u16
+        byte-order: little-endian
+      -
+        name: tx-mcs-map
+        type: u16
+        byte-order: little-endian
+      -
+        name: tx-highest
+        type: u16
+        byte-order: little-endian
+  -
+    name: ieee80211-ht-cap
+    type: struct
+    members:
+      -
+        name: cap-info
+        type: u16
+        byte-order: little-endian
+      -
+        name: ampdu-params-info
+        type: u8
+      -
+        name: mcs
+        type: binary
+        struct: ieee80211-mcs-info
+      -
+        name: extended-ht-cap-info
+        type: u16
+        byte-order: little-endian
+      -
+        name: tx-bf-cap-info
+        type: u32
+        byte-order: little-endian
+      -
+        name: antenna-selection-info
+        type: u8
+  -
+    name: nl80211-channel-type
+    type: enum
+    entries:
+      - no-ht
+      - ht20
+      - ht40minus
+      - ht40plus
+  -
+    name: nl80211-sta-flag-update
+    type: struct
+    members:
+      -
+        name: mask
+        type: u32
+      -
+        name: set
+        type: u32
+  -
+    name: wlan-cipher-suites
+    type: enum
+    entries:
+      -
+        name: use-group
+        value: 0xfac00
+      -
+        name: wep40
+        value: 0xfac01
+      -
+        name: tkip
+        value: 0xfac02
+      -
+        name: reserved
+        value: 0xfac03
+      -
+        name: ccmp
+        value: 0xfac04
+      -
+        name: wep104
+        value: 0xfac05
+      -
+        name: aes-cmac
+        value: 0xfac06
+      -
+        name: gcmp
+        value: 0xfac08
+      -
+        name: gcmp-256
+        value: 0xfac09
+      -
+        name: ccmp-256
+        value: 0xfac0a
+      -
+        name: bip-gmac-128
+        value: 0xfac0b
+      -
+        name: bip-gmac-256
+        value: 0xfac0c
+      -
+        name: bip-cmac-256
+        value: 0xfac0d
+      -
+        name: sms4
+        value: 0x147201
+  -
+    name: protocol-features
+    type: flags
+    entries:
+      - split-wiphy-dump
+
+attribute-sets:
+  -
+    name: nl80211-attrs
+    attributes:
+      -
+        name: wiphy
+        type: u32
+      -
+        name: wiphy-name
+        type: string
+      -
+        name: ifindex
+        type: u32
+      -
+        name: ifname
+        type: string
+      -
+        name: iftype
+        type: u32
+      -
+        name: mac
+        type: binary
+        display-hint: mac
+      -
+        name: key-data
+        type: binary
+      -
+        name: key-idx
+        type: u8
+      -
+        name: key-cipher
+        type: u32
+      -
+        name: key-seq
+        type: binary
+      -
+        name: key-default
+        type: flag
+      -
+        name: beacon-interval
+        type: u32
+      -
+        name: dtim-period
+        type: u32
+      -
+        name: beacon-head
+        type: binary
+      -
+        name: beacon-tail
+        type: binary
+      -
+        name: sta-aid
+        type: u16
+      -
+        name: sta-flags
+        type: binary # TODO: nest
+      -
+        name: sta-listen-interval
+        type: u16
+      -
+        name: sta-supported-rates
+        type: binary
+      -
+        name: sta-vlan
+        type: u32
+      -
+        name: sta-info
+        type: binary # TODO: nest
+      -
+        name: wiphy-bands
+        type: nest
+        nested-attributes: wiphy-bands
+      -
+        name: mntr-flags
+        type: binary # TODO: nest
+      -
+        name: mesh-id
+        type: binary
+      -
+        name: sta-plink-action
+        type: u8
+      -
+        name: mpath-next-hop
+        type: binary
+        display-hint: mac
+      -
+        name: mpath-info
+        type: binary # TODO: nest
+      -
+        name: bss-cts-prot
+        type: u8
+      -
+        name: bss-short-preamble
+        type: u8
+      -
+        name: bss-short-slot-time
+        type: u8
+      -
+        name: ht-capability
+        type: binary
+      -
+        name: supported-iftypes
+        type: nest
+        nested-attributes: supported-iftypes
+      -
+        name: reg-alpha2
+        type: binary
+      -
+        name: reg-rules
+        type: binary # TODO: nest
+      -
+        name: mesh-config
+        type: binary # TODO: nest
+      -
+        name: bss-basic-rates
+        type: binary
+      -
+        name: wiphy-txq-params
+        type: binary # TODO: nest
+      -
+        name: wiphy-freq
+        type: u32
+      -
+        name: wiphy-channel-type
+        type: u32
+        enum: nl80211-channel-type
+      -
+        name: key-default-mgmt
+        type: flag
+      -
+        name: mgmt-subtype
+        type: u8
+      -
+        name: ie
+        type: binary
+      -
+        name: max-num-scan-ssids
+        type: u8
+      -
+        name: scan-frequencies
+        type: binary # TODO: nest
+      -
+        name: scan-ssids
+        type: binary # TODO: nest
+      -
+        name: generation
+        type: u32
+      -
+        name: bss
+        type: binary # TODO: nest
+      -
+        name: reg-initiator
+        type: u8
+      -
+        name: reg-type
+        type: u8
+      -
+        name: supported-commands
+        type: indexed-array
+        sub-type: u32
+        enum: nl80211-commands
+      -
+        name: frame
+        type: binary
+      -
+        name: ssid
+        type: binary
+      -
+        name: auth-type
+        type: u32
+      -
+        name: reason-code
+        type: u16
+      -
+        name: key-type
+        type: u32
+      -
+        name: max-scan-ie-len
+        type: u16
+      -
+        name: cipher-suites
+        type: binary
+        sub-type: u32
+        enum: wlan-cipher-suites
+      -
+        name: freq-before
+        type: binary # TODO: nest
+      -
+        name: freq-after
+        type: binary # TODO: nest
+      -
+        name: freq-fixed
+        type: flag
+      -
+        name: wiphy-retry-short
+        type: u8
+      -
+        name: wiphy-retry-long
+        type: u8
+      -
+        name: wiphy-frag-threshold
+        type: u32
+      -
+        name: wiphy-rts-threshold
+        type: u32
+      -
+        name: timed-out
+        type: flag
+      -
+        name: use-mfp
+        type: u32
+      -
+        name: sta-flags2
+        type: binary
+        struct: nl80211-sta-flag-update
+      -
+        name: control-port
+        type: flag
+      -
+        name: testdata
+        type: binary
+      -
+        name: privacy
+        type: flag
+      -
+        name: disconnected-by-ap
+        type: flag
+      -
+        name: status-code
+        type: u16
+      -
+        name: cipher-suites-pairwise
+        type: binary
+      -
+        name: cipher-suite-group
+        type: u32
+      -
+        name: wpa-versions
+        type: u32
+      -
+        name: akm-suites
+        type: binary
+      -
+        name: req-ie
+        type: binary
+      -
+        name: resp-ie
+        type: binary
+      -
+        name: prev-bssid
+        type: binary
+      -
+        name: key
+        type: binary # TODO: nest
+      -
+        name: keys
+        type: binary # TODO: nest
+      -
+        name: pid
+        type: u32
+      -
+        name: 4addr
+        type: u8
+      -
+        name: survey-info
+        type: binary # TODO: nest
+      -
+        name: pmkid
+        type: binary
+      -
+        name: max-num-pmkids
+        type: u8
+      -
+        name: duration
+        type: u32
+      -
+        name: cookie
+        type: u64
+      -
+        name: wiphy-coverage-class
+        type: u8
+      -
+        name: tx-rates
+        type: binary # TODO: nest
+      -
+        name: frame-match
+        type: binary
+      -
+        name: ack
+        type: flag
+      -
+        name: ps-state
+        type: u32
+      -
+        name: cqm
+        type: binary # TODO: nest
+      -
+        name: local-state-change
+        type: flag
+      -
+        name: ap-isolate
+        type: u8
+      -
+        name: wiphy-tx-power-setting
+        type: u32
+      -
+        name: wiphy-tx-power-level
+        type: u32
+      -
+        name: tx-frame-types
+        type: nest
+        nested-attributes: nl80211-iftype-attrs
+      -
+        name: rx-frame-types
+        type: nest
+        nested-attributes: nl80211-iftype-attrs
+      -
+        name: frame-type
+        type: u16
+      -
+        name: control-port-ethertype
+        type: flag
+      -
+        name: control-port-no-encrypt
+        type: flag
+      -
+        name: support-ibss-rsn
+        type: flag
+      -
+        name: wiphy-antenna-tx
+        type: u32
+      -
+        name: wiphy-antenna-rx
+        type: u32
+      -
+        name: mcast-rate
+        type: u32
+      -
+        name: offchannel-tx-ok
+        type: flag
+      -
+        name: bss-ht-opmode
+        type: u16
+      -
+        name: key-default-types
+        type: binary # TODO: nest
+      -
+        name: max-remain-on-channel-duration
+        type: u32
+      -
+        name: mesh-setup
+        type: binary # TODO: nest
+      -
+        name: wiphy-antenna-avail-tx
+        type: u32
+      -
+        name: wiphy-antenna-avail-rx
+        type: u32
+      -
+        name: support-mesh-auth
+        type: flag
+      -
+        name: sta-plink-state
+        type: u8
+      -
+        name: wowlan-triggers
+        type: binary # TODO: nest
+      -
+        name: wowlan-triggers-supported
+        type: nest
+        nested-attributes: wowlan-triggers-attrs
+      -
+        name: sched-scan-interval
+        type: u32
+      -
+        name: interface-combinations
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: if-combination-attrs
+      -
+        name: software-iftypes
+        type: nest
+        nested-attributes: supported-iftypes
+      -
+        name: rekey-data
+        type: binary # TODO: nest
+      -
+        name: max-num-sched-scan-ssids
+        type: u8
+      -
+        name: max-sched-scan-ie-len
+        type: u16
+      -
+        name: scan-supp-rates
+        type: binary # TODO: nest
+      -
+        name: hidden-ssid
+        type: u32
+      -
+        name: ie-probe-resp
+        type: binary
+      -
+        name: ie-assoc-resp
+        type: binary
+      -
+        name: sta-wme
+        type: binary # TODO: nest
+      -
+        name: support-ap-uapsd
+        type: flag
+      -
+        name: roam-support
+        type: flag
+      -
+        name: sched-scan-match
+        type: binary # TODO: nest
+      -
+        name: max-match-sets
+        type: u8
+      -
+        name: pmksa-candidate
+        type: binary # TODO: nest
+      -
+        name: tx-no-cck-rate
+        type: flag
+      -
+        name: tdls-action
+        type: u8
+      -
+        name: tdls-dialog-token
+        type: u8
+      -
+        name: tdls-operation
+        type: u8
+      -
+        name: tdls-support
+        type: flag
+      -
+        name: tdls-external-setup
+        type: flag
+      -
+        name: device-ap-sme
+        type: u32
+      -
+        name: dont-wait-for-ack
+        type: flag
+      -
+        name: feature-flags
+        type: u32
+        enum: feature-flags
+        enum-as-flags: True
+      -
+        name: probe-resp-offload
+        type: u32
+      -
+        name: probe-resp
+        type: binary
+      -
+        name: dfs-region
+        type: u8
+      -
+        name: disable-ht
+        type: flag
+      -
+        name: ht-capability-mask
+        type: binary
+        struct: ieee80211-ht-cap
+      -
+        name: noack-map
+        type: u16
+      -
+        name: inactivity-timeout
+        type: u16
+      -
+        name: rx-signal-dbm
+        type: u32
+      -
+        name: bg-scan-period
+        type: u16
+      -
+        name: wdev
+        type: u64
+      -
+        name: user-reg-hint-type
+        type: u32
+      -
+        name: conn-failed-reason
+        type: u32
+      -
+        name: auth-data
+        type: binary
+      -
+        name: vht-capability
+        type: binary
+      -
+        name: scan-flags
+        type: u32
+      -
+        name: channel-width
+        type: u32
+      -
+        name: center-freq1
+        type: u32
+      -
+        name: center-freq2
+        type: u32
+      -
+        name: p2p-ctwindow
+        type: u8
+      -
+        name: p2p-oppps
+        type: u8
+      -
+        name: local-mesh-power-mode
+        type: u32
+      -
+        name: acl-policy
+        type: u32
+      -
+        name: mac-addrs
+        type: binary # TODO: nest
+      -
+        name: mac-acl-max
+        type: u32
+      -
+        name: radar-event
+        type: u32
+      -
+        name: ext-capa
+        type: binary
+      -
+        name: ext-capa-mask
+        type: binary
+      -
+        name: sta-capability
+        type: u16
+      -
+        name: sta-ext-capability
+        type: binary
+      -
+        name: protocol-features
+        type: u32
+        enum: protocol-features
+      -
+        name: split-wiphy-dump
+        type: flag
+      -
+        name: disable-vht
+        type: flag
+      -
+        name: vht-capability-mask
+        type: binary
+      -
+        name: mdid
+        type: u16
+      -
+        name: ie-ric
+        type: binary
+      -
+        name: crit-prot-id
+        type: u16
+      -
+        name: max-crit-prot-duration
+        type: u16
+      -
+        name: peer-aid
+        type: u16
+      -
+        name: coalesce-rule
+        type: binary # TODO: nest
+      -
+        name: ch-switch-count
+        type: u32
+      -
+        name: ch-switch-block-tx
+        type: flag
+      -
+        name: csa-ies
+        type: binary # TODO: nest
+      -
+        name: cntdwn-offs-beacon
+        type: binary
+      -
+        name: cntdwn-offs-presp
+        type: binary
+      -
+        name: rxmgmt-flags
+        type: binary
+      -
+        name: sta-supported-channels
+        type: binary
+      -
+        name: sta-supported-oper-classes
+        type: binary
+      -
+        name: handle-dfs
+        type: flag
+      -
+        name: support-5-mhz
+        type: flag
+      -
+        name: support-10-mhz
+        type: flag
+      -
+        name: opmode-notif
+        type: u8
+      -
+        name: vendor-id
+        type: u32
+      -
+        name: vendor-subcmd
+        type: u32
+      -
+        name: vendor-data
+        type: binary
+      -
+        name: vendor-events
+        type: binary
+      -
+        name: qos-map
+        type: binary
+      -
+        name: mac-hint
+        type: binary
+        display-hint: mac
+      -
+        name: wiphy-freq-hint
+        type: u32
+      -
+        name: max-ap-assoc-sta
+        type: u32
+      -
+        name: tdls-peer-capability
+        type: u32
+      -
+        name: socket-owner
+        type: flag
+      -
+        name: csa-c-offsets-tx
+        type: binary
+      -
+        name: max-csa-counters
+        type: u8
+      -
+        name: tdls-initiator
+        type: flag
+      -
+        name: use-rrm
+        type: flag
+      -
+        name: wiphy-dyn-ack
+        type: flag
+      -
+        name: tsid
+        type: u8
+      -
+        name: user-prio
+        type: u8
+      -
+        name: admitted-time
+        type: u16
+      -
+        name: smps-mode
+        type: u8
+      -
+        name: oper-class
+        type: u8
+      -
+        name: mac-mask
+        type: binary
+        display-hint: mac
+      -
+        name: wiphy-self-managed-reg
+        type: flag
+      -
+        name: ext-features
+        type: binary
+      -
+        name: survey-radio-stats
+        type: binary
+      -
+        name: netns-fd
+        type: u32
+      -
+        name: sched-scan-delay
+        type: u32
+      -
+        name: reg-indoor
+        type: flag
+      -
+        name: max-num-sched-scan-plans
+        type: u32
+      -
+        name: max-scan-plan-interval
+        type: u32
+      -
+        name: max-scan-plan-iterations
+        type: u32
+      -
+        name: sched-scan-plans
+        type: binary # TODO: nest
+      -
+        name: pbss
+        type: flag
+      -
+        name: bss-select
+        type: binary # TODO: nest
+      -
+        name: sta-support-p2p-ps
+        type: u8
+      -
+        name: pad
+        type: binary
+      -
+        name: iftype-ext-capa
+        type: binary # TODO: nest
+      -
+        name: mu-mimo-group-data
+        type: binary
+      -
+        name: mu-mimo-follow-mac-addr
+        type: binary
+        display-hint: mac
+      -
+        name: scan-start-time-tsf
+        type: u64
+      -
+        name: scan-start-time-tsf-bssid
+        type: binary
+      -
+        name: measurement-duration
+        type: u16
+      -
+        name: measurement-duration-mandatory
+        type: flag
+      -
+        name: mesh-peer-aid
+        type: u16
+      -
+        name: nan-master-pref
+        type: u8
+      -
+        name: bands
+        type: u32
+      -
+        name: nan-func
+        type: binary # TODO: nest
+      -
+        name: nan-match
+        type: binary # TODO: nest
+      -
+        name: fils-kek
+        type: binary
+      -
+        name: fils-nonces
+        type: binary
+      -
+        name: multicast-to-unicast-enabled
+        type: flag
+      -
+        name: bssid
+        type: binary
+        display-hint: mac
+      -
+        name: sched-scan-relative-rssi
+        type: s8
+      -
+        name: sched-scan-rssi-adjust
+        type: binary
+      -
+        name: timeout-reason
+        type: u32
+      -
+        name: fils-erp-username
+        type: binary
+      -
+        name: fils-erp-realm
+        type: binary
+      -
+        name: fils-erp-next-seq-num
+        type: u16
+      -
+        name: fils-erp-rrk
+        type: binary
+      -
+        name: fils-cache-id
+        type: binary
+      -
+        name: pmk
+        type: binary
+      -
+        name: sched-scan-multi
+        type: flag
+      -
+        name: sched-scan-max-reqs
+        type: u32
+      -
+        name: want-1x-4-way-hs
+        type: flag
+      -
+        name: pmkr0-name
+        type: binary
+      -
+        name: port-authorized
+        type: binary
+      -
+        name: external-auth-action
+        type: u32
+      -
+        name: external-auth-support
+        type: flag
+      -
+        name: nss
+        type: u8
+      -
+        name: ack-signal
+        type: s32
+      -
+        name: control-port-over-nl80211
+        type: flag
+      -
+        name: txq-stats
+        type: nest
+        nested-attributes: txq-stats
+      -
+        name: txq-limit
+        type: u32
+      -
+        name: txq-memory-limit
+        type: u32
+      -
+        name: txq-quantum
+        type: u32
+      -
+        name: he-capability
+        type: binary
+      -
+        name: ftm-responder
+        type: binary # TODO: nest
+      -
+        name: ftm-responder-stats
+        type: binary # TODO: nest
+      -
+        name: timeout
+        type: u32
+      -
+        name: peer-measurements
+        type: binary # TODO: nest
+      -
+        name: airtime-weight
+        type: u16
+      -
+        name: sta-tx-power-setting
+        type: u8
+      -
+        name: sta-tx-power
+        type: s16
+      -
+        name: sae-password
+        type: binary
+      -
+        name: twt-responder
+        type: flag
+      -
+        name: he-obss-pd
+        type: binary # TODO: nest
+      -
+        name: wiphy-edmg-channels
+        type: u8
+      -
+        name: wiphy-edmg-bw-config
+        type: u8
+      -
+        name: vlan-id
+        type: u16
+      -
+        name: he-bss-color
+        type: binary # TODO: nest
+      -
+        name: iftype-akm-suites
+        type: binary # TODO: nest
+      -
+        name: tid-config
+        type: binary # TODO: nest
+      -
+        name: control-port-no-preauth
+        type: flag
+      -
+        name: pmk-lifetime
+        type: u32
+      -
+        name: pmk-reauth-threshold
+        type: u8
+      -
+        name: receive-multicast
+        type: flag
+      -
+        name: wiphy-freq-offset
+        type: u32
+      -
+        name: center-freq1-offset
+        type: u32
+      -
+        name: scan-freq-khz
+        type: binary # TODO: nest
+      -
+        name: he-6ghz-capability
+        type: binary
+      -
+        name: fils-discovery
+        type: binary # TOOD: nest
+      -
+        name: unsol-bcast-probe-resp
+        type: binary # TOOD: nest
+      -
+        name: s1g-capability
+        type: binary
+      -
+        name: s1g-capability-mask
+        type: binary
+      -
+        name: sae-pwe
+        type: u8
+      -
+        name: reconnect-requested
+        type: binary
+      -
+        name: sar-spec
+        type: nest
+        nested-attributes: sar-spec-attrs
+      -
+        name: disable-he
+        type: flag
+      -
+        name: obss-color-bitmap
+        type: u64
+      -
+        name: color-change-count
+        type: u8
+      -
+        name: color-change-color
+        type: u8
+      -
+        name: color-change-elems
+        type: binary # TODO: nest
+      -
+        name: mbssid-config
+        type: binary # TODO: nest
+      -
+        name: mbssid-elems
+        type: binary # TODO: nest
+      -
+        name: radar-background
+        type: flag
+      -
+        name: ap-settings-flags
+        type: u32
+      -
+        name: eht-capability
+        type: binary
+      -
+        name: disable-eht
+        type: flag
+      -
+        name: mlo-links
+        type: binary # TODO: nest
+      -
+        name: mlo-link-id
+        type: u8
+      -
+        name: mld-addr
+        type: binary
+        display-hint: mac
+      -
+        name: mlo-support
+        type: flag
+      -
+        name: max-num-akm-suites
+        type: binary
+      -
+        name: eml-capability
+        type: u16
+      -
+        name: mld-capa-and-ops
+        type: u16
+      -
+        name: tx-hw-timestamp
+        type: u64
+      -
+        name: rx-hw-timestamp
+        type: u64
+      -
+        name: td-bitmap
+        type: binary
+      -
+        name: punct-bitmap
+        type: u32
+      -
+        name: max-hw-timestamp-peers
+        type: u16
+      -
+        name: hw-timestamp-enabled
+        type: flag
+      -
+        name: ema-rnr-elems
+        type: binary # TODO: nest
+      -
+        name: mlo-link-disabled
+        type: flag
+      -
+        name: bss-dump-include-use-data
+        type: flag
+      -
+        name: mlo-ttlm-dlink
+        type: u16
+      -
+        name: mlo-ttlm-ulink
+        type: u16
+      -
+        name: assoc-spp-amsdu
+        type: flag
+      -
+        name: wiphy-radios
+        type: binary # TODO: nest
+      -
+        name: wiphy-interface-combinations
+        type: binary # TODO: nest
+      -
+        name: vif-radio-mask
+        type: u32
+  -
+    name: wiphy-bands
+    attributes:
+      -
+        name: 2ghz
+        doc: 2.4 GHz ISM band
+        value: 0
+        type: nest
+        nested-attributes: band-attrs
+      -
+        name: 5ghz
+        doc: around 5 GHz band (4.9 - 5.7 GHz)
+        type: nest
+        nested-attributes: band-attrs
+      -
+        name: 60ghz
+        doc: around 60 GHz band (58.32 - 69.12 GHz)
+        type: binary
+      -
+        name: 6ghz
+        type: nest
+        nested-attributes: band-attrs
+      -
+        name: s1ghz
+        type: binary
+      -
+        name: lc
+        type: binary
+  -
+    name: band-attrs
+    attributes:
+      -
+        name: freqs
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: frequency-attrs
+      -
+        name: rates
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: bitrate-attrs
+      -
+        name: ht-mcs-set
+        type: binary
+        struct: ieee80211-mcs-info
+      -
+        name: ht-capa
+        type: u16
+      -
+        name: ht-ampdu-factor
+        type: u8
+      -
+        name: ht-ampdu-density
+        type: u8
+      -
+        name: vht-mcs-set
+        type: binary
+        struct: ieee80211-vht-mcs-info
+      -
+        name: vht-capa
+        type: u32
+      -
+        name: iftype-data
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: iftype-data-attrs
+      -
+        name: edmg-channels
+        type: binary
+      -
+        name: edmg-bw-config
+        type: binary
+      -
+        name: s1g-mcs-nss-set
+        type: binary
+      -
+        name: s1g-capa
+        type: binary
+  -
+    name: bitrate-attrs
+    attributes:
+      -
+        name: rate
+        type: u32
+      -
+        name: 2ghz-shortpreamble
+        type: flag
+  -
+    name: frequency-attrs
+    attributes:
+      -
+        name: freq
+        type: u32
+      -
+        name: disabled
+        type: flag
+      -
+        name: no-ir
+        type: flag
+      -
+        name: no-ibss
+        type: flag
+      -
+        name: radar
+        type: flag
+      -
+        name: max-tx-power
+        type: u32
+      -
+        name: dfs-state
+        type: u32
+      -
+        name: dfs-time
+        type: binary
+      -
+        name: no-ht40-minus
+        type: binary
+      -
+        name: no-ht40-plus
+        type: binary
+      -
+        name: no-80mhz
+        type: binary
+      -
+        name: no-160mhz
+        type: binary
+      -
+        name: dfs-cac-time
+        type: binary
+      -
+        name: indoor-only
+        type: binary
+      -
+        name: ir-concurrent
+        type: binary
+      -
+        name: no-20mhz
+        type: binary
+      -
+        name: no-10mhz
+        type: binary
+      -
+        name: wmm
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: wmm-attrs
+      -
+        name: no-he
+        type: binary
+      -
+        name: offset
+        type: u32
+      -
+        name: 1mhz
+        type: binary
+      -
+        name: 2mhz
+        type: binary
+      -
+        name: 4mhz
+        type: binary
+      -
+        name: 8mhz
+        type: binary
+      -
+        name: 16mhz
+        type: binary
+      -
+        name: no-320mhz
+        type: binary
+      -
+        name: no-eht
+        type: binary
+      -
+        name: psd
+        type: binary
+      -
+        name: dfs-concurrent
+        type: binary
+      -
+        name: no-6ghz-vlp-client
+        type: binary
+      -
+        name: no-6ghz-afc-client
+        type: binary
+      -
+        name: can-monitor
+        type: binary
+      -
+        name: allow-6ghz-vlp-ap
+        type: binary
+  -
+    name: if-combination-attrs
+    attributes:
+      -
+        name: limits
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: iface-limit-attrs
+      -
+        name: maxnum
+        type: u32
+      -
+        name: sta-ap-bi-match
+        type: flag
+      -
+        name: num-channels
+        type: u32
+      -
+        name: radar-detect-widths
+        type: u32
+      -
+        name: radar-detect-regions
+        type: u32
+      -
+        name: bi-min-gcd
+        type: u32
+  -
+    name: iface-limit-attrs
+    attributes:
+      -
+        name: max
+        type: u32
+      -
+        name: types
+        type: nest
+        nested-attributes: supported-iftypes
+  -
+    name: iftype-data-attrs
+    attributes:
+      -
+        name: iftypes
+        type: binary
+      -
+        name: he-cap-mac
+        type: binary
+      -
+        name: he-cap-phy
+        type: binary
+      -
+        name: he-cap-mcs-set
+        type: binary
+      -
+        name: he-cap-ppe
+        type: binary
+      -
+        name: eht-cap-mac
+        type: binary
+      -
+        name: eht-cap-phy
+        type: binary
+      -
+        name: eht-cap-mcs-set
+        type: binary
+      -
+        name: eht-cap-ppe
+        type: binary
+      -
+        name: he-6ghz-capa
+        type: binary
+      -
+        name: vendor-elems
+        type: binary
+  -
+    name: nl80211-iftype-attrs
+    attributes:
+      -
+        name: unspecified
+        type: nest
+        value: 0
+        nested-attributes: nl80211-attrs
+      -
+        name: adhoc
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: station
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: ap
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: ap-vlan
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: wds
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: monitor
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: mesh-point
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: p2p-client
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: p2p-go
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: p2p-device
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: ocb
+        type: nest
+        nested-attributes: nl80211-attrs
+      -
+        name: nan
+        type: nest
+        nested-attributes: nl80211-attrs
+  -
+    name: sar-spec-attrs
+    attributes:
+      -
+        name: type
+        type: u32
+      -
+        name: specs
+        type: indexed-array
+        sub-type: nest
+        nested-attributes: sar-attr-specs-attrs
+  -
+    name: sar-attr-specs-attrs
+    attributes:
+      -
+        name: power
+        type: s32
+      -
+        name: range-index
+        type: u32
+      -
+        name: start-freq
+        type: u32
+      -
+        name: end-freq
+        type: u32
+  -
+    name: supported-iftypes
+    attributes:
+      -
+        name: adhoc
+        type: flag
+      -
+        name: station
+        type: flag
+      -
+        name: ap
+        type: flag
+      -
+        name: ap-vlan
+        type: flag
+      -
+        name: wds
+        type: flag
+      -
+        name: monitor
+        type: flag
+      -
+        name: mesh-point
+        type: flag
+      -
+        name: p2p-client
+        type: flag
+      -
+        name: p2p-go
+        type: flag
+      -
+        name: p2p-device
+        type: flag
+      -
+        name: ocb
+        type: flag
+      -
+        name: nan
+        type: flag
+  -
+    name: txq-stats
+    attributes:
+      -
+        name: backlog-bytes
+        type: u32
+      -
+        name: backlog-packets
+        type: u32
+      -
+        name: flows
+        type: u32
+      -
+        name: drops
+        type: u32
+      -
+        name: ecn-marks
+        type: u32
+      -
+        name: overlimit
+        type: u32
+      -
+        name: overmemory
+        type: u32
+      -
+        name: collisions
+        type: u32
+      -
+        name: tx-bytes
+        type: u32
+      -
+        name: tx-packets
+        type: u32
+      -
+        name: max-flows
+        type: u32
+      -
+        name: txq-stats
+        type: u32
+  -
+    name: wmm-attrs
+    attributes:
+      -
+        name: cw-min
+        type: u16
+      -
+        name: cw-max
+        type: u16
+      -
+        name: aifsn
+        type: u8
+      -
+        name: txop
+        type: u16
+  -
+    name: wowlan-triggers-attrs
+    attributes:
+      -
+        name: any
+        type: flag
+      -
+        name: disconnect
+        type: flag
+      -
+        name: magic-pkt
+        type: flag
+      -
+        name: pkt-pattern
+        type: flag
+      -
+        name: gtk-rekey-supported
+        type: flag
+      -
+        name: gtk-rekey-failure
+        type: flag
+      -
+        name: eap-ident-request
+        type: flag
+      -
+        name: 4way-handshake
+        type: flag
+      -
+        name: rfkill-release
+        type: flag
+      -
+        name: wakeup-pkt-80211
+        type: flag
+      -
+        name: wakeup-pkt-80211-len
+        type: flag
+      -
+        name: wakeup-pkt-8023
+        type: flag
+      -
+        name: wakeup-pkt-8023-len
+        type: flag
+      -
+        name: tcp-connection
+        type: flag
+      -
+        name: wakeup-tcp-match
+        type: flag
+      -
+        name: wakeup-tcp-connlost
+        type: flag
+      -
+        name: wakeup-tcp-nomoretokens
+        type: flag
+      -
+        name: net-detect
+        type: flag
+      -
+        name: net-detect-results
+        type: flag
+      -
+        name: unprotected-deauth-disassoc
+        type: flag
+
+operations:
+  enum-model: directional
+  list:
+    -
+      name: get-wiphy
+      doc: |
+        Get information about a wiphy or dump a list of all wiphys. Requests to dump get-wiphy
+        should unconditionally include the split-wiphy-dump flag in the request.
+      attribute-set: nl80211-attrs
+      do:
+        request:
+          value: 1
+          attributes:
+            - wiphy
+            - wdev
+            - ifindex
+        reply:
+          value: 3
+      dump:
+        request:
+          attributes:
+            - wiphy
+            - wdev
+            - ifindex
+            - split-wiphy-dump
+    -
+      name: get-interface
+      doc: Get information about an interface or dump a list of all interfaces
+      attribute-set: nl80211-attrs
+      do:
+        request:
+          value: 5
+          attributes:
+            - ifname
+        reply:
+          value: 7
+      dump:
+        request:
+          attributes:
+            - ifname
+    -
+      name: get-protocol-features
+      doc: Get information about supported protocol features
+      attribute-set: nl80211-attrs
+      do:
+        request:
+          value: 95
+        reply:
+          value: 95
+
+mcast-groups:
+  list:
+    -
+      name: config
+    -
+      name: scan
+    -
+      name: regulatory
+    -
+      name: mlme
+    -
+      name: vendor
+    -
+      name: nan
+    -
+      name: testmode
-- 
2.47.1


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-10 16:14 ` [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211 Donald Hunter
@ 2024-12-11 21:07   ` Simon Horman
  2024-12-11 22:24     ` Donald Hunter
  2024-12-12  8:36   ` Johannes Berg
  1 sibling, 1 reply; 13+ messages in thread
From: Simon Horman @ 2024-12-11 21:07 UTC (permalink / raw)
  To: Donald Hunter
  Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Johannes Berg, linux-wireless, donald.hunter

On Tue, Dec 10, 2024 at 04:14:48PM +0000, Donald Hunter wrote:
> Add a rudimentary YNL spec for nl80211 that covers get-wiphy,
> get-interface and get-protocol-features.
> 
> ./tools/net/ynl/cli.py \
>     --spec Documentation/netlink/specs/nl80211.yaml \
>     --do get-protocol-features
> {'protocol-features': {'split-wiphy-dump'}}
> 
> ./tools/net/ynl/cli.py \
>     --spec Documentation/netlink/specs/nl80211.yaml \
>     --dump get-wiphy --json '{ "split-wiphy-dump": true }'
> 
> ./tools/net/ynl/cli.py \
>     --spec Documentation/netlink/specs/nl80211.yaml \
>     --dump get-interface
> 
> Signed-off-by: Donald Hunter <donald.hunter@gmail.com>

Hi Donald,

Perhaps I'm doing something silly here, or my environment is somehow
broken. But with this patch applied I see:

make -C tools/net/ynl/ distclean && make -C tools/net/ynl/

...

-e      GEN nl80211-user.c
Traceback (most recent call last):
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 3018, in <module>
    main()
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 2727, in main
    parsed = Family(args.spec, exclude_ops)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 928, in __init__
    super().__init__(file_name, exclude_ops=exclude_ops)
  File "/home/horms/projects/linux/linux/tools/net/ynl/lib/nlspec.py", line 480, in __init__
    elem.resolve()
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 946, in resolve
    self.resolve_up(super())
  File "/home/horms/projects/linux/linux/tools/net/ynl/lib/nlspec.py", line 53, in resolve_up
    up.resolve()
  File "/home/horms/projects/linux/linux/tools/net/ynl/lib/nlspec.py", line 588, in resolve
    attr_set = self.new_attr_set(elem)
               ^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 992, in new_attr_set
    return AttrSet(self, elem)
           ^^^^^^^^^^^^^^^^^^^
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 824, in __init__
    super().__init__(family, yaml)
  File "/home/horms/projects/linux/linux/tools/net/ynl/lib/nlspec.py", line 215, in __init__
    attr = self.new_attr(elem, val)
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/horms/projects/linux/linux/tools/net/ynl/generated/../ynl-gen-c.py", line 873, in new_attr
    raise Exception(f'new_attr: unsupported sub-type {elem["sub-type"]}')
Exception: new_attr: unsupported sub-type u32
make[1]: *** [Makefile:37: nl80211-user.c] Error 1


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-11 21:07   ` Simon Horman
@ 2024-12-11 22:24     ` Donald Hunter
  0 siblings, 0 replies; 13+ messages in thread
From: Donald Hunter @ 2024-12-11 22:24 UTC (permalink / raw)
  To: Simon Horman
  Cc: Donald Hunter, netdev, Jakub Kicinski, David S. Miller,
	Eric Dumazet, Paolo Abeni, Johannes Berg, linux-wireless

On Wed, 11 Dec 2024 at 21:13, Simon Horman <horms@kernel.org> wrote:
>
> On Tue, Dec 10, 2024 at 04:14:48PM +0000, Donald Hunter wrote:
> > Add a rudimentary YNL spec for nl80211 that covers get-wiphy,
> > get-interface and get-protocol-features.
> >
> > ./tools/net/ynl/cli.py \
> >     --spec Documentation/netlink/specs/nl80211.yaml \
> >     --do get-protocol-features
> > {'protocol-features': {'split-wiphy-dump'}}
> >
> > ./tools/net/ynl/cli.py \
> >     --spec Documentation/netlink/specs/nl80211.yaml \
> >     --dump get-wiphy --json '{ "split-wiphy-dump": true }'
> >
> > ./tools/net/ynl/cli.py \
> >     --spec Documentation/netlink/specs/nl80211.yaml \
> >     --dump get-interface
> >
> > Signed-off-by: Donald Hunter <donald.hunter@gmail.com>
>
> Hi Donald,
>
> Perhaps I'm doing something silly here, or my environment is somehow
> broken. But with this patch applied I see:
>
> make -C tools/net/ynl/ distclean && make -C tools/net/ynl/
> ...
> Exception: new_attr: unsupported sub-type u32
> make[1]: *** [Makefile:37: nl80211-user.c] Error 1

Hi Simon,

Thanks for reporting. It was also flagged up on patchwork. My bad. I
had a blind spot for checking the C build because the last few specs I
have worked on have been netlink-raw which don't have codegen. I'll
look at fixing this and any subsequent issues.

Thanks,
Donald.


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-10 16:14 ` [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211 Donald Hunter
  2024-12-11 21:07   ` Simon Horman
@ 2024-12-12  8:36   ` Johannes Berg
  2024-12-18 14:32     ` Donald Hunter
  1 sibling, 1 reply; 13+ messages in thread
From: Johannes Berg @ 2024-12-12  8:36 UTC (permalink / raw)
  To: Donald Hunter, netdev, Jakub Kicinski, David S. Miller,
	Eric Dumazet, Paolo Abeni, Simon Horman, linux-wireless
  Cc: donald.hunter

On Tue, 2024-12-10 at 16:14 +0000, Donald Hunter wrote:
> 
> +  -
> +    name: wlan-cipher-suites
> +    type: enum

I'm not sure exactly what this does, but I'm not sure 'enum' is the
right way to think about it. Pretty much every number (OUI + subvalue)
could be valid here, if the driver advertises support for it and you
have a supplicant that understands it.

> +  -
> +    name: wiphy-bands
> +    attributes:
> +      -
> +        name: 2ghz
> +        doc: 2.4 GHz ISM band
> +        value: 0
> +        type: nest
> +        nested-attributes: band-attrs
> +      -
> +        name: 5ghz
> +        doc: around 5 GHz band (4.9 - 5.7 GHz)
> +        type: nest
> +        nested-attributes: band-attrs
> +      -
> +        name: 60ghz
> +        doc: around 60 GHz band (58.32 - 69.12 GHz)
> +        type: binary

This (and s1g/lc) should also nest, with the same attributes? There
should be no structural difference between the bands, even if most of
the values are only used/valid for some of the bands.

> +operations:
> +  enum-model: directional
> +  list:
> +    -
> +      name: get-wiphy
> +      doc: |
> +        Get information about a wiphy or dump a list of all wiphys. Requests to dump get-wiphy
> +        should unconditionally include the split-wiphy-dump flag in the request.
> +      attribute-set: nl80211-attrs
> +      do:
> +        request:
> +          value: 1
> +          attributes:
> +            - wiphy
> +            - wdev
> +            - ifindex
> +        reply:
> +          value: 3

could the value not reference "get-wiphy" and "new-wiphy" from the
command list? That might be easier to understand?

johannes

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-12  8:36   ` Johannes Berg
@ 2024-12-18 14:32     ` Donald Hunter
  2024-12-18 14:37       ` Johannes Berg
  0 siblings, 1 reply; 13+ messages in thread
From: Donald Hunter @ 2024-12-18 14:32 UTC (permalink / raw)
  To: Johannes Berg
  Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, linux-wireless, donald.hunter

On Thu, 12 Dec 2024 at 08:36, Johannes Berg <johannes@sipsolutions.net> wrote:
>
> On Tue, 2024-12-10 at 16:14 +0000, Donald Hunter wrote:
> >
> > +  -
> > +    name: wlan-cipher-suites
> > +    type: enum
>
> I'm not sure exactly what this does, but I'm not sure 'enum' is the
> right way to think about it. Pretty much every number (OUI + subvalue)
> could be valid here, if the driver advertises support for it and you
> have a supplicant that understands it.

It was an attempt to enumerate the valid values, but from what you are
saying I think it will need to remain as u32, probably with
'display-hint: hex".

> > +  -
> > +    name: wiphy-bands
> > +    attributes:
> > +      -
> > +        name: 2ghz
> > +        doc: 2.4 GHz ISM band
> > +        value: 0
> > +        type: nest
> > +        nested-attributes: band-attrs
> > +      -
> > +        name: 5ghz
> > +        doc: around 5 GHz band (4.9 - 5.7 GHz)
> > +        type: nest
> > +        nested-attributes: band-attrs
> > +      -
> > +        name: 60ghz
> > +        doc: around 60 GHz band (58.32 - 69.12 GHz)
> > +        type: binary
>
> This (and s1g/lc) should also nest, with the same attributes? There
> should be no structural difference between the bands, even if most of
> the values are only used/valid for some of the bands.

That makes sense. I'll add the nest type to them all.

> > +operations:
> > +  enum-model: directional
> > +  list:
> > +    -
> > +      name: get-wiphy
> > +      doc: |
> > +        Get information about a wiphy or dump a list of all wiphys. Requests to dump get-wiphy
> > +        should unconditionally include the split-wiphy-dump flag in the request.
> > +      attribute-set: nl80211-attrs
> > +      do:
> > +        request:
> > +          value: 1
> > +          attributes:
> > +            - wiphy
> > +            - wdev
> > +            - ifindex
> > +        reply:
> > +          value: 3
>
> could the value not reference "get-wiphy" and "new-wiphy" from the
> command list? That might be easier to understand?

There is currently no schema or tool support for referencing enum
constants when defining protocol message ids. Most of the netlink
families don't have any need for an enumeration of commands in the
spec; nl80211 is unusual in reporting available commands.

I'm currently working on completeness of nl80211 and a couple of
feature gaps in ynl-gen-c.py to resolve 'make -C tools/net/ynl'
failures. I doubt that I will have a v3 patchset ready before net-next
closes for the holidays.

Thanks,
Donald.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211
  2024-12-18 14:32     ` Donald Hunter
@ 2024-12-18 14:37       ` Johannes Berg
  0 siblings, 0 replies; 13+ messages in thread
From: Johannes Berg @ 2024-12-18 14:37 UTC (permalink / raw)
  To: Donald Hunter
  Cc: netdev, Jakub Kicinski, David S. Miller, Eric Dumazet,
	Paolo Abeni, Simon Horman, linux-wireless, donald.hunter

On Wed, 2024-12-18 at 14:32 +0000, Donald Hunter wrote:
> 
> > > +operations:
> > > +  enum-model: directional
> > > +  list:
> > > +    -
> > > +      name: get-wiphy
> > > +      doc: |
> > > +        Get information about a wiphy or dump a list of all wiphys. Requests to dump get-wiphy
> > > +        should unconditionally include the split-wiphy-dump flag in the request.
> > > +      attribute-set: nl80211-attrs
> > > +      do:
> > > +        request:
> > > +          value: 1
> > > +          attributes:
> > > +            - wiphy
> > > +            - wdev
> > > +            - ifindex
> > > +        reply:
> > > +          value: 3
> > 
> > could the value not reference "get-wiphy" and "new-wiphy" from the
> > command list? That might be easier to understand?
> 
> There is currently no schema or tool support for referencing enum
> constants when defining protocol message ids. Most of the netlink
> families don't have any need for an enumeration of commands in the
> spec; nl80211 is unusual in reporting available commands.

Oh, that's what it is. I'm not sure anyone really needs that now with
the genetlink introspection, though I guess existing tools do use it.

johannes

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2024-12-18 14:37 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-10 16:14 [PATCH net-next v2 0/7] netlink: specs: add a spec for nl80211 wiphy Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 1/7] tools/net/ynl: remove extraneous plural from variable names Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 2/7] tools/net/ynl: support decoding indexed arrays as enums Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 3/7] tools/net/ynl: support rendering C array members to strings Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 4/7] tools/net/ynl: accept IP string inputs Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 5/7] netlink: specs: support nested structs in genetlink legacy Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 6/7] netlink: specs: add s8, s16 to genetlink schemas Donald Hunter
2024-12-10 16:14 ` [PATCH net-next v2 7/7] netlink: specs: wireless: add a spec for nl80211 Donald Hunter
2024-12-11 21:07   ` Simon Horman
2024-12-11 22:24     ` Donald Hunter
2024-12-12  8:36   ` Johannes Berg
2024-12-18 14:32     ` Donald Hunter
2024-12-18 14:37       ` Johannes Berg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).