• Vidya Sagar Ravipati's avatar
    net: ethtool: add support for forward error correction modes · 1a5f3da2
    Vidya Sagar Ravipati authored
    Forward Error Correction (FEC) modes i.e Base-R
    and Reed-Solomon modes are introduced in 25G/40G/100G standards
    for providing good BER at high speeds. Various networking devices
    which support 25G/40G/100G provides ability to manage supported FEC
    modes and the lack of FEC encoding control and reporting today is a
    source for interoperability issues for many vendors.
    FEC capability as well as specific FEC mode i.e. Base-R
    or RS modes can be requested or advertised through bits D44:47 of
    base link codeword.
    
    This patch set intends to provide option under ethtool to manage
    and report FEC encoding settings for networking devices as per
    IEEE 802.3 bj, bm and by specs.
    
    set-fec/show-fec option(s) are designed to provide control and
    report the FEC encoding on the link.
    
    SET FEC option:
    root@tor: ethtool --set-fec  swp1 encoding [off | RS | BaseR | auto]
    
    Encoding: Types of encoding
    Off    :  Turning off any encoding
    RS     :  enforcing RS-FEC encoding on supported speeds
    BaseR  :  enforcing Base R encoding on supported speeds
    Auto   :  IEEE defaults for the speed/medium combination
    
    Here are a few examples of what we would expect if encoding=auto:
    - if autoneg is on, we are  expecting FEC to be negotiated as on or off
      as long as protocol supports it
    - if the hardware is capable of detecting the FEC encoding on it's
          receiver it will reconfigure its encoder to match
    - in absence of the above, the configuration would be set to IEEE
      defaults.
    
    >From our  understanding , this is essentially what most hardware/driver
    combinations are doing today in the absence of a way for users to
    control the behavior.
    
    SHOW FEC option:
    root@tor: ethtool --show-fec  swp1
    FEC parameters for swp1:
    Active FEC encodings: RS
    Configured FEC encodings:  RS | BaseR
    
    ETHTOOL DEVNAME output modification:
    
    ethtool devname output:
    root@tor:~# ethtool swp1
    Settings for swp1:
    root@hpe-7712-03:~# ethtool swp18
    Settings for swp18:
        Supported ports: [ FIBRE ]
        Supported link modes:   40000baseCR4/Full
                                40000baseSR4/Full
                                40000baseLR4/Full
                                100000baseSR4/Full
                                100000baseCR4/Full
                                100000baseLR4_ER4/Full
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Supported FEC modes: [RS | BaseR | None | Not reported]
        Advertised link modes:  Not reported
        Advertised pause frame use: No
        Advertised auto-negotiation: No
        Advertised FEC modes: [RS | BaseR | None | Not reported]
    <<<< One or more FEC modes
        Speed: 100000Mb/s
        Duplex: Full
        Port: FIBRE
        PHYAD: 106
        Transceiver: internal
        Auto-negotiation: off
        Link detected: yes
    
    This patch includes following changes
    a) New ETHTOOL_SFECPARAM/SFECPARAM API, handled by
      the new get_fecparam/set_fecparam callbacks, provides support
      for configuration of forward error correction modes.
    b) Link mode bits for FEC modes i.e. None (No FEC mode), RS, BaseR/FC
      are defined so that users can configure these fec modes for supported
      and advertising fields as part of link autonegotiation.
    Signed-off-by: default avatarVidya Sagar Ravipati <vidya.chowdary@gmail.com>
    Signed-off-by: default avatarDustin Byford <dustin@cumulusnetworks.com>
    Signed-off-by: default avatarRoopa Prabhu <roopa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    1a5f3da2
ethtool.c 71.4 KB