Commit 4be708d0 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'tools-ynl-fix-errors-reported-by-ruff'

Matthieu Baerts says:

====================
tools: ynl: fix errors reported by Ruff

When looking at the YNL code to add a new feature, my text editor
automatically executed 'ruff check', and found out at least one
interesting error: one variable was used while not being defined.

I then decided to fix this error, and all the other ones reported by
Ruff. After this series, 'ruff check' reports no more errors with
version 0.12.12.
====================

Link: https://patch.msgid.link/20250909-net-next-ynl-ruff-v1-0-238c2bccdd99@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 724b22d3 f6259ba7
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause

import argparse
import json
import pathlib
import pprint
import sys
@@ -51,7 +50,7 @@ def print_field(reply, *desc):
    for spec in desc:
        try:
            field, name, tp = spec
        except:
        except ValueError:
            field, name = spec
            tp = 'int'

@@ -156,7 +155,6 @@ def main():
    global args
    args = parser.parse_args()

    script_abs_dir = os.path.dirname(os.path.abspath(sys.argv[0]))
    spec = os.path.join(spec_dir(), 'ethtool.yaml')
    schema = os.path.join(schema_dir(), 'genetlink-legacy.yaml')

@@ -255,14 +253,14 @@ def main():
        reply = dumpit(ynl, args, 'channels-get')
        print(f'Channel parameters for {args.device}:')

        print(f'Pre-set maximums:')
        print('Pre-set maximums:')
        print_field(reply,
            ('rx-max', 'RX'),
            ('tx-max', 'TX'),
            ('other-max', 'Other'),
            ('combined-max', 'Combined'))

        print(f'Current hardware settings:')
        print('Current hardware settings:')
        print_field(reply,
            ('rx-count', 'RX'),
            ('tx-count', 'TX'),
@@ -276,14 +274,14 @@ def main():

        print(f'Ring parameters for {args.device}:')

        print(f'Pre-set maximums:')
        print('Pre-set maximums:')
        print_field(reply,
            ('rx-max', 'RX'),
            ('rx-mini-max', 'RX Mini'),
            ('rx-jumbo-max', 'RX Jumbo'),
            ('tx-max', 'TX'))

        print(f'Current hardware settings:')
        print('Current hardware settings:')
        print_field(reply,
            ('rx', 'RX'),
            ('rx-mini', 'RX Mini'),
@@ -298,7 +296,7 @@ def main():
        return

    if args.statistics:
        print(f'NIC statistics:')
        print('NIC statistics:')

        # TODO: pass id?
        strset = dumpit(ynl, args, 'strset-get')
+1 −1
Original line number Diff line number Diff line
@@ -8,4 +8,4 @@ from .doc_generator import YnlDocGenerator

__all__ = ["SpecAttr", "SpecAttrSet", "SpecEnumEntry", "SpecEnumSet",
           "SpecFamily", "SpecOperation", "SpecSubMessage", "SpecSubMessageFormat",
           "YnlFamily", "Netlink", "NlError"]
           "YnlFamily", "Netlink", "NlError", "YnlDocGenerator"]
+1 −1
Original line number Diff line number Diff line
@@ -501,7 +501,7 @@ class SpecFamily(SpecElement):
        return SpecStruct(self, elem)

    def new_sub_message(self, elem):
        return SpecSubMessage(self, elem);
        return SpecSubMessage(self, elem)

    def new_operation(self, elem, req_val, rsp_val):
        return SpecOperation(self, elem, req_val, rsp_val)
+3 −4
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@ import socket
import struct
from struct import Struct
import sys
import yaml
import ipaddress
import uuid
import queue
@@ -706,7 +705,7 @@ class YnlFamily(SpecFamily):
            return attr.as_bin()

    def _rsp_add(self, rsp, name, is_multi, decoded):
        if is_multi == None:
        if is_multi is None:
            if name in rsp and type(rsp[name]) is not list:
                rsp[name] = [rsp[name]]
                is_multi = True
@@ -739,14 +738,14 @@ class YnlFamily(SpecFamily):
        decoded = {}
        offset = 0
        if msg_format.fixed_header:
            decoded.update(self._decode_struct(attr.raw, msg_format.fixed_header));
            decoded.update(self._decode_struct(attr.raw, msg_format.fixed_header))
            offset = self._struct_size(msg_format.fixed_header)
        if msg_format.attr_set:
            if msg_format.attr_set in self.attr_sets:
                subdict = self._decode(NlAttrs(attr.raw, offset), msg_format.attr_set)
                decoded.update(subdict)
            else:
                raise Exception(f"Unknown attribute-set '{attr_space}' when decoding '{attr_spec.name}'")
                raise Exception(f"Unknown attribute-set '{msg_format.attr_set}' when decoding '{attr_spec.name}'")
        return decoded

    def _decode(self, attrs, space, outer_attrs = None):
+14 −17
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@
# SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause)

import argparse
import collections
import filecmp
import pathlib
import os
@@ -14,7 +13,7 @@ import yaml

sys.path.append(pathlib.Path(__file__).resolve().parent.as_posix())
from lib import SpecFamily, SpecAttrSet, SpecAttr, SpecOperation, SpecEnumSet, SpecEnumEntry
from lib import SpecSubMessage, SpecSubMessageFormat
from lib import SpecSubMessage


def c_upper(name):
@@ -398,7 +397,7 @@ class TypeScalar(Type):
        if 'enum' in self.attr:
            enum = self.family.consts[self.attr['enum']]
            low, high = enum.value_range()
            if low == None and high == None:
            if low is None and high is None:
                self.checks['sparse'] = True
            else:
                if 'min' not in self.checks:
@@ -485,7 +484,7 @@ class TypeString(Type):
        ri.cw.p(f"char *{self.c_name};")

    def _attr_typol(self):
        typol = f'.type = YNL_PT_NUL_STR, '
        typol = '.type = YNL_PT_NUL_STR, '
        if self.is_selector:
            typol += '.is_selector = 1, '
        return typol
@@ -539,7 +538,7 @@ class TypeBinary(Type):
        ri.cw.p(f"void *{self.c_name};")

    def _attr_typol(self):
        return f'.type = YNL_PT_BINARY,'
        return '.type = YNL_PT_BINARY,'

    def _attr_policy(self, policy):
        if len(self.checks) == 0:
@@ -636,10 +635,10 @@ class TypeBitfield32(Type):
        return "struct nla_bitfield32"

    def _attr_typol(self):
        return f'.type = YNL_PT_BITFIELD32, '
        return '.type = YNL_PT_BITFIELD32, '

    def _attr_policy(self, policy):
        if not 'enum' in self.attr:
        if 'enum' not in self.attr:
            raise Exception('Enum required for bitfield32 attr')
        enum = self.family.consts[self.attr['enum']]
        mask = enum.get_mask(as_flags=True)
@@ -909,7 +908,7 @@ class TypeSubMessage(TypeNest):
        else:
            sel_var = f"{var}->{sel}"
        get_lines = [f'if (!{sel_var})',
                     f'return ynl_submsg_failed(yarg, "%s", "%s");' %
                     'return ynl_submsg_failed(yarg, "%s", "%s");' %
                        (self.name, self['selector']),
                    f"if ({self.nested_render_name}_parse(&parg, {sel_var}, attr))",
                     "return YNL_PARSE_CB_ERROR;"]
@@ -1563,7 +1562,7 @@ class RenderInfo:
                if family.is_classic():
                    self.fixed_hdr_len = f"sizeof(struct {c_lower(fixed_hdr)})"
                else:
                    raise Exception(f"Per-op fixed header not supported, yet")
                    raise Exception("Per-op fixed header not supported, yet")


        # 'do' and 'dump' response parsing is identical
@@ -2099,7 +2098,7 @@ def _multi_parse(ri, struct, init_lines, local_vars):
            if ri.family.is_classic():
                iter_line = f"ynl_attr_for_each(attr, nlh, sizeof({struct.fixed_header}))"
            else:
                raise Exception(f"Per-op fixed header not supported, yet")
                raise Exception("Per-op fixed header not supported, yet")

    array_nests = set()
    multi_attrs = set()
@@ -2502,7 +2501,7 @@ def print_free_prototype(ri, direction, suffix=';'):

def print_nlflags_set(ri, direction):
    name = op_prefix(ri, direction)
    ri.cw.write_func_prot(f'static inline void', f"{name}_set_nlflags",
    ri.cw.write_func_prot('static inline void', f"{name}_set_nlflags",
                          [f"struct {name} *req", "__u16 nl_flags"])
    ri.cw.block_start()
    ri.cw.p('req->_nlmsg_flags = nl_flags;')
@@ -2533,7 +2532,7 @@ def _print_type(ri, direction, struct):
            line = attr.presence_member(ri.ku_space, type_filter)
            if line:
                if not meta_started:
                    ri.cw.block_start(line=f"struct")
                    ri.cw.block_start(line="struct")
                    meta_started = True
                ri.cw.p(line)
        if meta_started:
@@ -2697,7 +2696,7 @@ def print_dump_type_free(ri):
    ri.cw.nl()

    _free_type_members(ri, 'rsp', ri.struct['reply'], ref='obj.')
    ri.cw.p(f'free(rsp);')
    ri.cw.p('free(rsp);')
    ri.cw.block_end()
    ri.cw.block_end()
    ri.cw.nl()
@@ -2708,7 +2707,7 @@ def print_ntf_type_free(ri):
    ri.cw.block_start()
    _free_type_members_iter(ri, ri.struct['reply'])
    _free_type_members(ri, 'rsp', ri.struct['reply'], ref='obj.')
    ri.cw.p(f'free(rsp);')
    ri.cw.p('free(rsp);')
    ri.cw.block_end()
    ri.cw.nl()

@@ -2803,8 +2802,6 @@ def print_kernel_policy_sparse_enum_validates(family, cw):
                cw.p('/* Sparse enums validation callbacks */')
                first = False

            sign = '' if attr.type[0] == 'u' else '_signed'
            suffix = 'ULL' if attr.type[0] == 'u' else 'LL'
            cw.write_func_prot('static int', f'{c_lower(attr.enum_name)}_validate',
                               ['const struct nlattr *attr', 'struct netlink_ext_ack *extack'])
            cw.block_start()
@@ -3324,7 +3321,7 @@ def render_user_family(family, cw, prototype):
    cw.block_start(f'{symbol} = ')
    cw.p(f'.name\t\t= "{family.c_name}",')
    if family.is_classic():
        cw.p(f'.is_classic\t= true,')
        cw.p('.is_classic\t= true,')
        cw.p(f'.classic_id\t= {family.get("protonum")},')
    if family.is_classic():
        if family.fixed_header: