• Jakub Kicinski's avatar
    netlink: specs: add partial specification for ethtool · b784db7a
    Jakub Kicinski authored
    Ethtool is one of the most actively developed families.
    With the changes to the CLI it should be possible to use
    the YNL based code for easy prototyping and development.
    Add a partial family definition. I've tested the string
    set and rings. I don't have any MAC Merge implementation
    to test with, but I added the definition for it, anyway,
    because it's last. New commands can simply be added at
    the end without having to worry about manually providing
    IDs / values.
    
    Set (with notification support - None is the response,
    the data is from the notification):
    
    $ sudo ./tools/net/ynl/cli.py \
        --spec Documentation/netlink/specs/ethtool.yaml \
        --do rings-set \
        --json '{"header":{"dev-name":"enp0s31f6"}, "rx":129}' \
        --subscribe monitor
    None
    [{'msg': {'header': {'dev-index': 2, 'dev-name': 'enp0s31f6'},
              'rx': 136,
              'rx-max': 4096,
              'tx': 256,
              'tx-max': 4096,
              'tx-push': 0},
      'name': 'rings-ntf'}]
    
    Do / dump (yes, the kernel requires that even for dump and even
    if empty - the "header" nest must be there):
    
    $ ./tools/net/ynl/cli.py \
        --spec Documentation/netlink/specs/ethtool.yaml \
        --do rings-get \
        --json '{"header":{"dev-index": 2}}'
    {'header': {'dev-index': 2, 'dev-name': 'enp0s31f6'},
     'rx': 136,
     'rx-max': 4096,
     'tx': 256,
     'tx-max': 4096,
     'tx-push': 0}
    
    $ ./tools/net/ynl/cli.py \
        --spec Documentation/netlink/specs/ethtool.yaml \
        --dump rings-get \
        --json '{"header":{}}'
    [{'header': {'dev-index': 2, 'dev-name': 'enp0s31f6'},
      'rx': 136,
      'rx-max': 4096,
      'tx': 256,
      'tx-max': 4096,
      'tx-push': 0},
     {'header': {'dev-index': 3, 'dev-name': 'wlp0s20f3'}, 'tx-push': 0},
     {'header': {'dev-index': 19, 'dev-name': 'enp58s0u1u1'},
      'rx': 100,
      'rx-max': 4096,
      'tx-push': 0}]
    
    And error reporting:
    
    $ ./tools/net/ynl/cli.py \
        --spec Documentation/netlink/specs/ethtool.yaml \
        --dump rings-get \
        --json '{"header":{"flags":5}}'
    Netlink error: Invalid argument
    nl_len = 68 (52) nl_flags = 0x300 nl_type = 2
    	error: -22	extack: {'msg': 'reserved bit set',
    	                         'bad-attr-offs': 24,
    				 'bad-attr': '.header.flags'}
    None
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    b784db7a
ethtool.yaml 6.87 KB