11 Jul, 2020

1 commit

  • Add an interface to report offloaded UDP ports via ethtool netlink.

    Now that core takes care of tracking which UDP tunnel ports the NICs
    are aware of we can quite easily export this information out to
    user space.

    The responsibility of writing the netlink dumps is split between
    ethtool code and udp_tunnel_nic.c - since udp_tunnel module may
    not always be loaded, yet we should always report the capabilities
    of the NIC.

    $ ethtool --show-tunnels eth0
    Tunnel information for eth0:
    UDP port table 0:
    Size: 4
    Types: vxlan
    No entries
    UDP port table 1:
    Size: 4
    Types: geneve, vxlan-gpe
    Entries (1):
    port 1230, vxlan-gpe

    v4:
    - back to v2, build fix is now directly in udp_tunnel.h
    v3:
    - don't compile ETHTOOL_MSG_TUNNEL_INFO_GET in if CONFIG_INET
    not set.
    v2:
    - fix string set count,
    - reorder enums in the uAPI,
    - fix type of ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES to bitset
    in docs and comments.

    Signed-off-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Jakub Kicinski
     

11 May, 2020

1 commit

  • Add new ethtool netlink calls to trigger the starting of a PHY cable
    test.

    Add Kconfig'ury to ETHTOOL_NETLINK so that PHYLIB is not a module when
    ETHTOOL_NETLINK is builtin, which would result in kernel linking errors.

    v2:
    Remove unwanted white space change
    Remove ethnl_cable_test_act_ops and use doit handler
    Rename cable_test_set_policy cable_test_act_policy
    Remove ETHTOOL_MSG_CABLE_TEST_ACT_REPLY

    v3:
    Remove ETHTOOL_MSG_CABLE_TEST_ACT_REPLY from documentation
    Remove unused cable_test_get_policy
    Add Reviewed-by tags

    v4:
    Remove unwanted blank line

    Signed-off-by: Andrew Lunn
    Reviewed-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: Jakub Kicinski

    Andrew Lunn
     

30 Mar, 2020

4 commits

  • Implement TSINFO_GET request to get timestamping information for a network
    device. This is traditionally available via ETHTOOL_GET_TS_INFO ioctl
    request.

    Move part of ethtool_get_ts_info() into common.c so that ioctl and netlink
    code use the same logic to get timestamping information from the device.

    v3: use "TSINFO" rather than "TIMESTAMP", suggested by Richard Cochran

    Signed-off-by: Michal Kubecek
    Acked-by: Richard Cochran
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement EEE_GET request to get EEE settings of a network device. These
    are traditionally available via ETHTOOL_GEEE ioctl request.

    The netlink interface allows reporting EEE status for all link modes
    supported by kernel but only first 32 link modes are provided at the moment
    as only those are reported by the ethtool_ops callback and drivers.

    v2: fix alignment (whitespace only)

    Signed-off-by: Michal Kubecek
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement PAUSE_GET request to get pause parameters of a network device.
    These are traditionally available via ETHTOOL_GPAUSEPARAM ioctl request.

    Signed-off-by: Michal Kubecek
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement COALESCE_GET request to get coalescing parameters of a network
    device. These are traditionally available via ETHTOOL_GCOALESCE ioctl
    request. This commit adds only support for device coalescing parameters,
    not per queue coalescing parameters.

    Omit attributes with zero values unless they are declared as supported
    (i.e. the corresponding bit in ethtool_ops::supported_coalesce_params is
    set).

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Michal Kubecek
     

13 Mar, 2020

4 commits

  • Implement CHANNELS_GET request to get channel counts of a network device.
    These are traditionally available via ETHTOOL_GCHANNELS ioctl request.

    Omit attributes for channel types which are not supported by driver or
    device (zero reported for maximum).

    v2: (all suggested by Jakub Kicinski)
    - minor cleanup in channels_prepare_data()
    - more descriptive channels_reply_size()
    - omit attributes with zero max count

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement RINGS_GET request to get ring sizes of a network device. These
    are traditionally available via ETHTOOL_GRINGPARAM ioctl request.

    Omit attributes for ring types which are not supported by driver or device
    (zero reported for maximum).

    v2: (all suggested by Jakub Kicinski)
    - minor cleanup in rings_prepare_data()
    - more descriptive rings_reply_size()
    - omit attributes with zero max size

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement PRIVFLAGS_GET request to get private flags for a network device.
    These are traditionally available via ETHTOOL_GPFLAGS ioctl request.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement FEATURES_GET request to get network device features. These are
    traditionally available via ETHTOOL_GFEATURES ioctl request.

    v2:
    - style cleanup suggested by Jakub Kicinski

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jakub Kicinski
    Signed-off-by: David S. Miller

    Michal Kubecek
     

27 Jan, 2020

2 commits

  • Implement WOL_GET request to get wake-on-lan settings for a device,
    traditionally available via ETHTOOL_GWOL ioctl request.

    As part of the implementation, provide symbolic names for wake-on-line
    modes as ETH_SS_WOL_MODES string set.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement DEBUG_GET request to get debugging settings for a device. At the
    moment, only message mask corresponding to message level as reported by
    ETHTOOL_GMSGLVL ioctl request is provided. (It is called message level in
    ioctl interface but almost all drivers interpret it as a bit mask.)

    As part of the implementation, provide symbolic names for message mask bits
    as ETH_SS_MSG_CLASSES string set.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Michal Kubecek
     

28 Dec, 2019

6 commits

  • Implement LINKSTATE_GET netlink request to get link state information.

    At the moment, only link up flag as provided by ETHTOOL_GLINK ioctl command
    is returned.

    LINKSTATE_GET request can be used with NLM_F_DUMP (without device
    identification) to request the information for all devices in current
    network namespace providing the data.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement LINKMODES_GET netlink request to get link modes related
    information provided by ETHTOOL_GLINKSETTINGS and ETHTOOL_GSET ioctl
    commands.

    This request provides supported, advertised and peer advertised link modes,
    autonegotiation flag, speed and duplex.

    LINKMODES_GET request can be used with NLM_F_DUMP (without device
    identification) to request the information for all devices in current
    network namespace providing the data.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Implement LINKINFO_GET netlink request to get basic link settings provided
    by ETHTOOL_GLINKSETTINGS and ETHTOOL_GSET ioctl commands.

    This request provides settings not directly related to autonegotiation and
    link mode selection: physical port, phy MDIO address, MDI(-X) status,
    MDI(-X) control and transceiver.

    LINKINFO_GET request can be used with NLM_F_DUMP (without device
    identification) to request the information for all devices in current
    network namespace providing the data.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Requests a contents of one or more string sets, i.e. indexed arrays of
    strings; this information is provided by ETHTOOL_GSSET_INFO and
    ETHTOOL_GSTRINGS commands of ioctl interface. Unlike ioctl interface, all
    information can be retrieved with one request and mulitple string sets can
    be requested at once.

    There are three types of requests:

    - no NLM_F_DUMP, no device: get "global" stringsets
    - no NLM_F_DUMP, with device: get string sets related to the device
    - NLM_F_DUMP, no device: get device related string sets for all devices

    Client can request either all string sets of given type (global or device
    related) or only specific sets. With ETHTOOL_A_STRSET_COUNTS flag set, only
    set sizes (numbers of strings) are returned.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • The ethtool netlink code uses common framework for passing arbitrary
    length bit sets to allow future extensions. A bitset can be a list (only
    one bitmap) or can consist of value and mask pair (used e.g. when client
    want to modify only some bits). A bitset can use one of two formats:
    verbose (bit by bit) or compact.

    Verbose format consists of bitset size (number of bits), list flag and
    an array of bit nests, telling which bits are part of the list or which
    bits are in the mask and which of them are to be set. In requests, bits
    can be identified by index (position) or by name. In replies, kernel
    provides both index and name. Verbose format is suitable for "one shot"
    applications like standard ethtool command as it avoids the need to
    either keep bit names (e.g. link modes) in sync with kernel or having to
    add an extra roundtrip for string set request (e.g. for private flags).

    Compact format uses one (list) or two (value/mask) arrays of 32-bit
    words to store the bitmap(s). It is more suitable for long running
    applications (ethtool in monitor mode or network management daemons)
    which can retrieve the names once and then pass only compact bitmaps to
    save space.

    Userspace requests can use either format; ETHTOOL_FLAG_COMPACT_BITSETS
    flag in request header tells kernel which format to use in reply.
    Notifications always use compact format.

    As some code uses arrays of unsigned long for internal representation and
    some arrays of u32 (or even a single u32), two sets of parse/compose
    helpers are introduced. To avoid code duplication, helpers for unsigned
    long arrays are implemented as wrappers around helpers for u32 arrays.
    There are two reasons for this choice: (1) u32 arrays are more frequent in
    ethtool code and (2) unsigned long array can be always interpreted as an
    u32 array on little endian 64-bit and all 32-bit architectures while we
    would need special handling for odd number of u32 words in the opposite
    direction.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • Basic genetlink and init infrastructure for the netlink interface, register
    genetlink family "ethtool". Add CONFIG_ETHTOOL_NETLINK Kconfig option to
    make the build optional. Add initial overall interface description into
    Documentation/networking/ethtool-netlink.rst, further patches will add more
    detailed information.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Florian Fainelli
    Reviewed-by: Andrew Lunn
    Signed-off-by: David S. Miller

    Michal Kubecek
     

13 Dec, 2019

2 commits

  • Introduce file net/ethtool/common.c for code shared by ioctl and netlink
    ethtool interface. Move name tables of features, RSS hash functions,
    tunables and PHY tunables into this file.

    Signed-off-by: Michal Kubecek
    Reviewed-by: Jiri Pirko
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek
     
  • The ethtool netlink interface is going to be split into multiple files so
    that it will be more convenient to put all of them in a separate directory
    net/ethtool. Start by moving current ethtool.c with ioctl interface into
    this directory and renaming it to ioctl.c.

    Signed-off-by: Michal Kubecek
    Acked-by: Jiri Pirko
    Reviewed-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Michal Kubecek