net: ethtool: Add attributes for cable test TDR data
Some Ethernet PHYs can return the raw time domain reflectromatry data. Add the attributes to allow this data to be requested and returned via netlink ethtool. Signed-off-by: Andrew Lunn <andrew@lunn.ch> v2: m -> cm Report what the PHY actually used for start/stop/step. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
53c0ec4f4d
Коммит
a331172b15
|
@ -205,6 +205,7 @@ Userspace to kernel:
|
||||||
``ETHTOOL_MSG_EEE_SET`` set EEE settings
|
``ETHTOOL_MSG_EEE_SET`` set EEE settings
|
||||||
``ETHTOOL_MSG_TSINFO_GET`` get timestamping info
|
``ETHTOOL_MSG_TSINFO_GET`` get timestamping info
|
||||||
``ETHTOOL_MSG_CABLE_TEST_ACT`` action start cable test
|
``ETHTOOL_MSG_CABLE_TEST_ACT`` action start cable test
|
||||||
|
``ETHTOOL_MSG_CABLE_TEST_TDR_ACT`` action start raw TDR cable test
|
||||||
===================================== ================================
|
===================================== ================================
|
||||||
|
|
||||||
Kernel to userspace:
|
Kernel to userspace:
|
||||||
|
@ -237,6 +238,7 @@ Kernel to userspace:
|
||||||
``ETHTOOL_MSG_EEE_NTF`` EEE settings
|
``ETHTOOL_MSG_EEE_NTF`` EEE settings
|
||||||
``ETHTOOL_MSG_TSINFO_GET_REPLY`` timestamping info
|
``ETHTOOL_MSG_TSINFO_GET_REPLY`` timestamping info
|
||||||
``ETHTOOL_MSG_CABLE_TEST_NTF`` Cable test results
|
``ETHTOOL_MSG_CABLE_TEST_NTF`` Cable test results
|
||||||
|
``ETHTOOL_MSG_CABLE_TEST_TDR_NTF`` Cable test TDR results
|
||||||
===================================== =================================
|
===================================== =================================
|
||||||
|
|
||||||
``GET`` requests are sent by userspace applications to retrieve device
|
``GET`` requests are sent by userspace applications to retrieve device
|
||||||
|
@ -1014,6 +1016,84 @@ information.
|
||||||
| | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM`` | u32 | length in cm |
|
| | | ``ETHTOOL_A_CABLE_FAULT_LENGTH_CM`` | u32 | length in cm |
|
||||||
+-+-+-----------------------------------------+--------+---------------------+
|
+-+-+-----------------------------------------+--------+---------------------+
|
||||||
|
|
||||||
|
CABLE_TEST TDR
|
||||||
|
==============
|
||||||
|
|
||||||
|
Start a cable test and report raw TDR data
|
||||||
|
|
||||||
|
Request contents:
|
||||||
|
|
||||||
|
==================================== ====== ==========================
|
||||||
|
``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` nested request header
|
||||||
|
==================================== ====== ==========================
|
||||||
|
|
||||||
|
Notification contents:
|
||||||
|
|
||||||
|
Raw TDR data is gathered by sending a pulse down the cable and
|
||||||
|
recording the amplitude of the reflected pulse for a given distance.
|
||||||
|
|
||||||
|
It can take a number of seconds to collect TDR data, especial if the
|
||||||
|
full 100 meters is probed at 1 meter intervals. When the test is
|
||||||
|
started a notification will be sent containing just
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
|
||||||
|
ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED.
|
||||||
|
|
||||||
|
When the test has completed a second notification will be sent
|
||||||
|
containing ETHTOOL_A_CABLE_TEST_TDR_STATUS with the value
|
||||||
|
ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED and the TDR data.
|
||||||
|
|
||||||
|
The message may optionally contain the amplitude of the pulse send
|
||||||
|
down the cable. This is measured in mV. A reflection should not be
|
||||||
|
bigger than transmitted pulse.
|
||||||
|
|
||||||
|
Before the raw TDR data should be an ETHTOOL_A_CABLE_TDR_NEST_STEP
|
||||||
|
nest containing information about the distance along the cable for the
|
||||||
|
first reading, the last reading, and the step between each
|
||||||
|
reading. Distances are measured in centimeters. These should be the
|
||||||
|
exact values the PHY used. These may be different to what the user
|
||||||
|
requested, if the native measurement resolution is greater than 1 cm.
|
||||||
|
|
||||||
|
For each step along the cable, a ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE is
|
||||||
|
used to report the amplitude of the reflection for a given pair.
|
||||||
|
|
||||||
|
+---------------------------------------------+--------+----------------------+
|
||||||
|
| ``ETHTOOL_A_CABLE_TEST_TDR_HEADER`` | nested | reply header |
|
||||||
|
+---------------------------------------------+--------+----------------------+
|
||||||
|
| ``ETHTOOL_A_CABLE_TEST_TDR_STATUS`` | u8 | completed |
|
||||||
|
+---------------------------------------------+--------+----------------------+
|
||||||
|
| ``ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST`` | nested | all the results |
|
||||||
|
+-+-------------------------------------------+--------+----------------------+
|
||||||
|
| | ``ETHTOOL_A_CABLE_TDR_NEST_PULSE`` | nested | TX Pulse amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_PULSE_mV`` | s16 | Pulse amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | ``ETHTOOL_A_CABLE_NEST_STEP`` | nested | TDR step info |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE ``| u32 | First data distance |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_STEP_LAST_DISTANCE `` | u32 | Last data distance |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_STEP_STEP_DISTANCE `` | u32 | distance of each step|
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | ``ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE`` | nested | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_RESULTS_PAIR`` | u8 | pair number |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
| | | ``ETHTOOL_A_CABLE_AMPLITUDE_mV`` | s16 | Reflection amplitude |
|
||||||
|
+-+-+-----------------------------------------+--------+----------------------+
|
||||||
|
|
||||||
Request translation
|
Request translation
|
||||||
===================
|
===================
|
||||||
|
|
||||||
|
@ -1110,4 +1190,5 @@ are netlink only.
|
||||||
``ETHTOOL_GFECPARAM`` n/a
|
``ETHTOOL_GFECPARAM`` n/a
|
||||||
``ETHTOOL_SFECPARAM`` n/a
|
``ETHTOOL_SFECPARAM`` n/a
|
||||||
n/a ''ETHTOOL_MSG_CABLE_TEST_ACT''
|
n/a ''ETHTOOL_MSG_CABLE_TEST_ACT''
|
||||||
|
n/a ''ETHTOOL_MSG_CABLE_TEST_TDR_ACT''
|
||||||
=================================== =====================================
|
=================================== =====================================
|
||||||
|
|
|
@ -40,6 +40,7 @@ enum {
|
||||||
ETHTOOL_MSG_EEE_SET,
|
ETHTOOL_MSG_EEE_SET,
|
||||||
ETHTOOL_MSG_TSINFO_GET,
|
ETHTOOL_MSG_TSINFO_GET,
|
||||||
ETHTOOL_MSG_CABLE_TEST_ACT,
|
ETHTOOL_MSG_CABLE_TEST_ACT,
|
||||||
|
ETHTOOL_MSG_CABLE_TEST_TDR_ACT,
|
||||||
|
|
||||||
/* add new constants above here */
|
/* add new constants above here */
|
||||||
__ETHTOOL_MSG_USER_CNT,
|
__ETHTOOL_MSG_USER_CNT,
|
||||||
|
@ -76,6 +77,7 @@ enum {
|
||||||
ETHTOOL_MSG_EEE_NTF,
|
ETHTOOL_MSG_EEE_NTF,
|
||||||
ETHTOOL_MSG_TSINFO_GET_REPLY,
|
ETHTOOL_MSG_TSINFO_GET_REPLY,
|
||||||
ETHTOOL_MSG_CABLE_TEST_NTF,
|
ETHTOOL_MSG_CABLE_TEST_NTF,
|
||||||
|
ETHTOOL_MSG_CABLE_TEST_TDR_NTF,
|
||||||
|
|
||||||
/* add new constants above here */
|
/* add new constants above here */
|
||||||
__ETHTOOL_MSG_KERNEL_CNT,
|
__ETHTOOL_MSG_KERNEL_CNT,
|
||||||
|
@ -478,6 +480,67 @@ enum {
|
||||||
ETHTOOL_A_CABLE_TEST_NTF_MAX = (__ETHTOOL_A_CABLE_TEST_NTF_CNT - 1)
|
ETHTOOL_A_CABLE_TEST_NTF_MAX = (__ETHTOOL_A_CABLE_TEST_NTF_CNT - 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* CABLE TEST TDR */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_HEADER, /* nest - _A_HEADER_* */
|
||||||
|
|
||||||
|
/* add new constants above here */
|
||||||
|
__ETHTOOL_A_CABLE_TEST_TDR_CNT,
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_MAX = __ETHTOOL_A_CABLE_TEST_TDR_CNT - 1
|
||||||
|
};
|
||||||
|
|
||||||
|
/* CABLE TEST TDR NOTIFY */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_AMPLITUDE_PAIR, /* u8 */
|
||||||
|
ETHTOOL_A_CABLE_AMPLITUDE_mV, /* s16 */
|
||||||
|
|
||||||
|
__ETHTOOL_A_CABLE_AMPLITUDE_CNT,
|
||||||
|
ETHTOOL_A_CABLE_AMPLITUDE_MAX = (__ETHTOOL_A_CABLE_AMPLITUDE_CNT - 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_PULSE_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_PULSE_mV, /* s16 */
|
||||||
|
|
||||||
|
__ETHTOOL_A_CABLE_PULSE_CNT,
|
||||||
|
ETHTOOL_A_CABLE_PULSE_MAX = (__ETHTOOL_A_CABLE_PULSE_CNT - 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_STEP_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE, /* u32 */
|
||||||
|
ETHTOOL_A_CABLE_STEP_LAST_DISTANCE, /* u32 */
|
||||||
|
ETHTOOL_A_CABLE_STEP_STEP_DISTANCE, /* u32 */
|
||||||
|
|
||||||
|
__ETHTOOL_A_CABLE_STEP_CNT,
|
||||||
|
ETHTOOL_A_CABLE_STEP_MAX = (__ETHTOOL_A_CABLE_STEP_CNT - 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_TDR_NEST_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_TDR_NEST_STEP, /* nest - ETHTTOOL_A_CABLE_STEP */
|
||||||
|
ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE, /* nest - ETHTOOL_A_CABLE_AMPLITUDE */
|
||||||
|
ETHTOOL_A_CABLE_TDR_NEST_PULSE, /* nest - ETHTOOL_A_CABLE_PULSE */
|
||||||
|
|
||||||
|
__ETHTOOL_A_CABLE_TDR_NEST_CNT,
|
||||||
|
ETHTOOL_A_CABLE_TDR_NEST_MAX = (__ETHTOOL_A_CABLE_TDR_NEST_CNT - 1)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_NTF_UNSPEC,
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER, /* nest - ETHTOOL_A_HEADER_* */
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS, /* u8 - _STARTED/_COMPLETE */
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST, /* nest - of results: */
|
||||||
|
|
||||||
|
/* add new constants above here */
|
||||||
|
__ETHTOOL_A_CABLE_TEST_TDR_NTF_CNT,
|
||||||
|
ETHTOOL_A_CABLE_TEST_TDR_NTF_MAX = __ETHTOOL_A_CABLE_TEST_TDR_NTF_CNT - 1
|
||||||
|
};
|
||||||
|
|
||||||
/* generic netlink info */
|
/* generic netlink info */
|
||||||
#define ETHTOOL_GENL_NAME "ethtool"
|
#define ETHTOOL_GENL_NAME "ethtool"
|
||||||
#define ETHTOOL_GENL_VERSION 1
|
#define ETHTOOL_GENL_VERSION 1
|
||||||
|
|
Загрузка…
Ссылка в новой задаче