Commit c1b27f06 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

netlink: specs: define input-xfrm enum in the spec



Help YNL decode the values for input-xfrm by defining
the possible values in the spec. Don't define "no change"
as it's an IOCTL artifact with no use in Netlink.

With this change on mlx5 input-xfrm gets decoded:

 # ynl --family ethtool --dump rss-get
 [{'header': {'dev-index': 2, 'dev-name': 'eth0'},
   'hfunc': 1,
   'hkey': b'V\xa8\xf9\x9 ...',
   'indir': [0, 1, ... ],
   'input-xfrm': {'sym-or-xor'},                         <<<
   'flow-hash': {'ah4': {'ip-dst', 'ip-src'},
                 'ah6': {'ip-dst', 'ip-src'},
                 'esp4': {'ip-dst', 'ip-src'},
                 'esp6': {'ip-dst', 'ip-src'},
                 'ip4': {'ip-dst', 'ip-src'},
                 'ip6': {'ip-dst', 'ip-src'},
                 'tcp4': {'l4-b-0-1', 'ip-dst', 'l4-b-2-3', 'ip-src'},
                 'tcp6': {'l4-b-0-1', 'ip-dst', 'l4-b-2-3', 'ip-src'},
                 'udp4': {'l4-b-0-1', 'ip-dst', 'l4-b-2-3', 'ip-src'},
                 'udp6': {'l4-b-0-1', 'ip-dst', 'l4-b-2-3', 'ip-src'}}
 }]

Reviewed-by: default avatarGal Pressman <gal@nvidia.com>
Link: https://patch.msgid.link/20250716000331.1378807-9-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 169b2620
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -158,6 +158,26 @@ definitions:
      -
        name: pse-event-sw-pw-control-error
        doc: PSE faced an error managing the power control from software
  -
    name: input-xfrm
    doc: RSS hash function transformations.
    type: flags
    enum-name:
    name-prefix: rxh-xfrm-
    header: linux/ethtool.h
    entries:
      -
        name: sym-xor
        doc: >-
          XOR the corresponding source and destination fields of each specified
          protocol. Both copies of the XOR'ed fields are fed into the RSS and
          RXHASH calculation. Note that this XORing reduces the input set
          entropy and could be exploited to reduce the RSS queue spread.
      -
        name: sym-or-xor
        doc: >-
          Similar to SYM_XOR, except that one copy of the XOR'ed fields is
          replaced by an OR of the same fields.
  -
    name: rxfh-fields
    name-prefix: rxh-
@@ -1621,6 +1641,7 @@ attribute-sets:
      -
        name: input-xfrm
        type: u32
        enum: input-xfrm
      -
        name: start-context
        type: u32
+3 −3
Original line number Diff line number Diff line
@@ -37,11 +37,11 @@ def test_rss_input_xfrm(cfg, ipver):
    if not hasattr(socket, "SO_INCOMING_CPU"):
        raise KsftSkipEx("socket.SO_INCOMING_CPU was added in Python 3.11")

    input_xfrm = cfg.ethnl.rss_get(
        {'header': {'dev-name': cfg.ifname}}).get('input-xfrm')
    rss = cfg.ethnl.rss_get({'header': {'dev-name': cfg.ifname}})
    input_xfrm = set(filter(lambda x: 'sym' in x, rss.get('input-xfrm', {})))

    # Check for symmetric xor/or-xor
    if not input_xfrm or (input_xfrm != 1 and input_xfrm != 2):
    if not input_xfrm:
        raise KsftSkipEx("Symmetric RSS hash not requested")

    cpus = set()