Commit 45375814 authored by Hangbin Liu's avatar Hangbin Liu Committed by Jakub Kicinski
Browse files

tools/net/ynl: ethtool: fix crash when Hardware Clock info is missing



Fix a crash in the ethtool YNL implementation when Hardware Clock information
is not present in the response. This ensures graceful handling of devices or
drivers that do not provide this optional field. e.g.

  Traceback (most recent call last):
    File "/net/tools/net/ynl/pyynl/./ethtool.py", line 438, in <module>
      main()
      ~~~~^^
    File "/net/tools/net/ynl/pyynl/./ethtool.py", line 341, in main
      print(f'PTP Hardware Clock: {tsinfo["phc-index"]}')
                                   ~~~~~~^^^^^^^^^^^^^
  KeyError: 'phc-index'

Fixes: f3d07b02 ("tools: ynl: ethtool testing tool")
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Acked-by: default avatarStanislav Fomichev <sdf@fomichev.me>
Link: https://patch.msgid.link/20250508035414.82974-1-liuhangbin@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 12f4ee31
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -338,16 +338,24 @@ def main():
        print('Capabilities:')
        [print(f'\t{v}') for v in bits_to_dict(tsinfo['timestamping'])]

        print(f'PTP Hardware Clock: {tsinfo["phc-index"]}')
        print(f'PTP Hardware Clock: {tsinfo.get("phc-index", "none")}')

        if 'tx-types' in tsinfo:
            print('Hardware Transmit Timestamp Modes:')
            [print(f'\t{v}') for v in bits_to_dict(tsinfo['tx-types'])]
        else:
            print('Hardware Transmit Timestamp Modes: none')

        if 'rx-filters' in tsinfo:
            print('Hardware Receive Filter Modes:')
            [print(f'\t{v}') for v in bits_to_dict(tsinfo['rx-filters'])]
        else:
            print('Hardware Receive Filter Modes: none')

        if 'stats' in tsinfo and tsinfo['stats']:
            print('Statistics:')
            [print(f'\t{k}: {v}') for k, v in tsinfo['stats'].items()]

        return

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