linux/net/devlink
Johannes Berg e8058a49e6 netlink: introduce type-checking attribute iteration
There are, especially with multi-attr arrays, many cases
of needing to iterate all attributes of a specific type
in a netlink message or a nested attribute. Add specific
macros to support that case.

Also convert many instances using this spatch:

    @@
    iterator nla_for_each_attr;
    iterator name nla_for_each_attr_type;
    identifier nla;
    expression head, len, rem;
    expression ATTR;
    type T;
    identifier x;
    @@
    -nla_for_each_attr(nla, head, len, rem)
    +nla_for_each_attr_type(nla, ATTR, head, len, rem)
     {
    <... T x; ...>
    -if (nla_type(nla) == ATTR) {
     ...
    -}
     }

    @@
    identifier nla;
    iterator nla_for_each_nested;
    iterator name nla_for_each_nested_type;
    expression attr, rem;
    expression ATTR;
    type T;
    identifier x;
    @@
    -nla_for_each_nested(nla, attr, rem)
    +nla_for_each_nested_type(nla, ATTR, attr, rem)
     {
    <... T x; ...>
    -if (nla_type(nla) == ATTR) {
     ...
    -}
     }

    @@
    iterator nla_for_each_attr;
    iterator name nla_for_each_attr_type;
    identifier nla;
    expression head, len, rem;
    expression ATTR;
    type T;
    identifier x;
    @@
    -nla_for_each_attr(nla, head, len, rem)
    +nla_for_each_attr_type(nla, ATTR, head, len, rem)
     {
    <... T x; ...>
    -if (nla_type(nla) != ATTR) continue;
     ...
     }

    @@
    identifier nla;
    iterator nla_for_each_nested;
    iterator name nla_for_each_nested_type;
    expression attr, rem;
    expression ATTR;
    type T;
    identifier x;
    @@
    -nla_for_each_nested(nla, attr, rem)
    +nla_for_each_nested_type(nla, ATTR, attr, rem)
     {
    <... T x; ...>
    -if (nla_type(nla) != ATTR) continue;
     ...
     }

Although I had to undo one bad change this made, and
I also adjusted some other code for whitespace and to
use direct variable initialization now.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Link: https://lore.kernel.org/r/20240328203144.b5a6c895fb80.I1869b44767379f204998ff44dd239803f39c23e0@changeid
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-03-29 15:06:02 -07:00
..
core.c devlink: use kvzalloc() to allocate devlink instance resources 2024-03-29 12:24:38 -07:00
dev.c netlink: introduce type-checking attribute iteration 2024-03-29 15:06:02 -07:00
devl_internal.h devlink: extend multicast filtering by port index 2023-12-19 15:31:40 +01:00
dpipe.c devlink: rename netlink callback to be aligned with the generated ones 2023-10-23 16:12:47 -07:00
health.c devlink: extend multicast filtering by port index 2023-12-19 15:31:40 +01:00
linecard.c devlink: introduce a helper for netlink multicast send 2023-12-19 15:31:40 +01:00
Makefile devlink: move devlink_notify_register/unregister() to dev.c 2023-08-28 08:02:24 -07:00
netlink.c devlink: Fix devlink parallel commands processing 2024-03-13 08:31:40 +00:00
netlink_gen.c devlink: Fix length of eswitch inline-mode 2024-03-11 13:13:53 -07:00
netlink_gen.h devlink: add a command to set notification filter and use it for multicasts 2023-12-19 15:31:40 +01:00
param.c devlink: introduce a helper for netlink multicast send 2023-12-19 15:31:40 +01:00
port.c devlink: fix port new reply cmd type 2024-03-19 19:37:57 -07:00
rate.c devlink: introduce a helper for netlink multicast send 2023-12-19 15:31:40 +01:00
region.c devlink: introduce a helper for netlink multicast send 2023-12-19 15:31:40 +01:00
resource.c devlink: rename netlink callback to be aligned with the generated ones 2023-10-23 16:12:47 -07:00
sb.c devlink: rename netlink callback to be aligned with the generated ones 2023-10-23 16:12:47 -07:00
trap.c devlink: introduce a helper for netlink multicast send 2023-12-19 15:31:40 +01:00