12b4a8990SMichal Kubecek /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
22b4a8990SMichal Kubecek /*
32b4a8990SMichal Kubecek  * include/uapi/linux/ethtool_netlink.h - netlink interface for ethtool
42b4a8990SMichal Kubecek  *
572ef5e52SMauro Carvalho Chehab  * See Documentation/networking/ethtool-netlink.rst in kernel source tree for
62b4a8990SMichal Kubecek  * doucumentation of the interface.
72b4a8990SMichal Kubecek  */
82b4a8990SMichal Kubecek 
92b4a8990SMichal Kubecek #ifndef _UAPI_LINUX_ETHTOOL_NETLINK_H_
102b4a8990SMichal Kubecek #define _UAPI_LINUX_ETHTOOL_NETLINK_H_
112b4a8990SMichal Kubecek 
122b4a8990SMichal Kubecek #include <linux/ethtool.h>
1349922401SStanislav Fomichev #include <linux/ethtool_netlink_generated.h>
14041b1c5dSMichal Kubecek 
15041b1c5dSMichal Kubecek #define ETHTOOL_FLAG_ALL (ETHTOOL_FLAG_COMPACT_BITSETS | \
169a27a330SJakub Kicinski 			  ETHTOOL_FLAG_OMIT_REPLY | \
179a27a330SJakub Kicinski 			  ETHTOOL_FLAG_STATS)
18041b1c5dSMichal Kubecek 
19b28efb93SAndrew Lunn /* CABLE TEST NOTIFY */
20b28efb93SAndrew Lunn enum {
21b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_RESULT_CODE_UNSPEC,
22b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_RESULT_CODE_OK,
23b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_RESULT_CODE_OPEN,
24b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_RESULT_CODE_SAME_SHORT,
25b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_RESULT_CODE_CROSS_SHORT,
269cc8a6e6SPawel Dembicki 	/* detected reflection caused by the impedance discontinuity between
279cc8a6e6SPawel Dembicki 	 * a regular 100 Ohm cable and a part with the abnormal impedance value
289cc8a6e6SPawel Dembicki 	 */
299cc8a6e6SPawel Dembicki 	ETHTOOL_A_CABLE_RESULT_CODE_IMPEDANCE_MISMATCH,
302140e63cSOleksij Rempel 	/* TDR not possible due to high noise level */
312140e63cSOleksij Rempel 	ETHTOOL_A_CABLE_RESULT_CODE_NOISE,
322140e63cSOleksij Rempel 	/* TDR resolution not possible / out of distance */
332140e63cSOleksij Rempel 	ETHTOOL_A_CABLE_RESULT_CODE_RESOLUTION_NOT_POSSIBLE,
34b28efb93SAndrew Lunn };
35b28efb93SAndrew Lunn 
36b28efb93SAndrew Lunn enum {
37b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_PAIR_A,
38b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_PAIR_B,
39b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_PAIR_C,
40b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_PAIR_D,
41b28efb93SAndrew Lunn };
42b28efb93SAndrew Lunn 
43abcd3026SOleksij Rempel /* Information source for specific results. */
44abcd3026SOleksij Rempel enum {
45abcd3026SOleksij Rempel 	ETHTOOL_A_CABLE_INF_SRC_UNSPEC,
46abcd3026SOleksij Rempel 	/* Results provided by the Time Domain Reflectometry (TDR) */
47abcd3026SOleksij Rempel 	ETHTOOL_A_CABLE_INF_SRC_TDR,
48abcd3026SOleksij Rempel 	/* Results provided by the Active Link Cable Diagnostic (ALCD) */
49abcd3026SOleksij Rempel 	ETHTOOL_A_CABLE_INF_SRC_ALCD,
50abcd3026SOleksij Rempel };
51abcd3026SOleksij Rempel 
52b28efb93SAndrew Lunn enum {
53b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC,
54b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED,
55b28efb93SAndrew Lunn 	ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED
56b28efb93SAndrew Lunn };
57b28efb93SAndrew Lunn 
58a331172bSAndrew Lunn /* CABLE TEST TDR NOTIFY */
59a331172bSAndrew Lunn 
60a331172bSAndrew Lunn enum {
61a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC,
62a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_AMPLITUDE_PAIR,         /* u8 */
63a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_AMPLITUDE_mV,           /* s16 */
64a331172bSAndrew Lunn 
65a331172bSAndrew Lunn 	__ETHTOOL_A_CABLE_AMPLITUDE_CNT,
66a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_AMPLITUDE_MAX = (__ETHTOOL_A_CABLE_AMPLITUDE_CNT - 1)
67a331172bSAndrew Lunn };
68a331172bSAndrew Lunn 
69a331172bSAndrew Lunn enum {
70a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_PULSE_UNSPEC,
71a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_PULSE_mV,		/* s16 */
72a331172bSAndrew Lunn 
73a331172bSAndrew Lunn 	__ETHTOOL_A_CABLE_PULSE_CNT,
74a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_PULSE_MAX = (__ETHTOOL_A_CABLE_PULSE_CNT - 1)
75a331172bSAndrew Lunn };
76a331172bSAndrew Lunn 
77a331172bSAndrew Lunn enum {
78a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_STEP_UNSPEC,
79a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE,	/* u32 */
80a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_STEP_LAST_DISTANCE,	/* u32 */
81a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_STEP_STEP_DISTANCE,	/* u32 */
82a331172bSAndrew Lunn 
83a331172bSAndrew Lunn 	__ETHTOOL_A_CABLE_STEP_CNT,
84a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_STEP_MAX = (__ETHTOOL_A_CABLE_STEP_CNT - 1)
85a331172bSAndrew Lunn };
86a331172bSAndrew Lunn 
87a331172bSAndrew Lunn enum {
88a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_TDR_NEST_UNSPEC,
89a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_TDR_NEST_STEP,		/* nest - ETHTTOOL_A_CABLE_STEP */
90a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE,	/* nest - ETHTOOL_A_CABLE_AMPLITUDE */
91a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_TDR_NEST_PULSE,		/* nest - ETHTOOL_A_CABLE_PULSE */
92a331172bSAndrew Lunn 
93a331172bSAndrew Lunn 	__ETHTOOL_A_CABLE_TDR_NEST_CNT,
94a331172bSAndrew Lunn 	ETHTOOL_A_CABLE_TDR_NEST_MAX = (__ETHTOOL_A_CABLE_TDR_NEST_CNT - 1)
95a331172bSAndrew Lunn };
96a331172bSAndrew Lunn 
97a331172bSAndrew Lunn enum {
98f09ea6fbSJakub Kicinski 	ETHTOOL_STATS_ETH_PHY,
99ca224454SJakub Kicinski 	ETHTOOL_STATS_ETH_MAC,
100bfad2b97SJakub Kicinski 	ETHTOOL_STATS_ETH_CTRL,
101a8b06e9dSJakub Kicinski 	ETHTOOL_STATS_RMON,
102*6167c0b6SJakub Kicinski 	ETHTOOL_STATS_PHY,
103f09ea6fbSJakub Kicinski 
104f09ea6fbSJakub Kicinski 	/* add new constants above here */
105f09ea6fbSJakub Kicinski 	__ETHTOOL_STATS_CNT
106f09ea6fbSJakub Kicinski };
107f09ea6fbSJakub Kicinski 
108f09ea6fbSJakub Kicinski enum {
109f09ea6fbSJakub Kicinski 	/* 30.3.2.1.5 aSymbolErrorDuringCarrier */
110f09ea6fbSJakub Kicinski 	ETHTOOL_A_STATS_ETH_PHY_5_SYM_ERR,
111f09ea6fbSJakub Kicinski 
112f09ea6fbSJakub Kicinski 	/* add new constants above here */
113f09ea6fbSJakub Kicinski 	__ETHTOOL_A_STATS_ETH_PHY_CNT,
114f09ea6fbSJakub Kicinski 	ETHTOOL_A_STATS_ETH_PHY_MAX = (__ETHTOOL_A_STATS_ETH_PHY_CNT - 1)
115f09ea6fbSJakub Kicinski };
116f09ea6fbSJakub Kicinski 
117ca224454SJakub Kicinski enum {
118ca224454SJakub Kicinski 	/* 30.3.1.1.2 aFramesTransmittedOK */
119ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_2_TX_PKT,
120ca224454SJakub Kicinski 	/* 30.3.1.1.3 aSingleCollisionFrames */
121ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_3_SINGLE_COL,
122ca224454SJakub Kicinski 	/* 30.3.1.1.4 aMultipleCollisionFrames */
123ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_4_MULTI_COL,
124ca224454SJakub Kicinski 	/* 30.3.1.1.5 aFramesReceivedOK */
125ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_5_RX_PKT,
126ca224454SJakub Kicinski 	/* 30.3.1.1.6 aFrameCheckSequenceErrors */
127ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_6_FCS_ERR,
128ca224454SJakub Kicinski 	/* 30.3.1.1.7 aAlignmentErrors */
129ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_7_ALIGN_ERR,
130ca224454SJakub Kicinski 	/* 30.3.1.1.8 aOctetsTransmittedOK */
131ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_8_TX_BYTES,
132ca224454SJakub Kicinski 	/* 30.3.1.1.9 aFramesWithDeferredXmissions */
133ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_9_TX_DEFER,
134ca224454SJakub Kicinski 	/* 30.3.1.1.10 aLateCollisions */
135ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_10_LATE_COL,
136ca224454SJakub Kicinski 	/* 30.3.1.1.11 aFramesAbortedDueToXSColls */
137ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_11_XS_COL,
138ca224454SJakub Kicinski 	/* 30.3.1.1.12 aFramesLostDueToIntMACXmitError */
139ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_12_TX_INT_ERR,
140ca224454SJakub Kicinski 	/* 30.3.1.1.13 aCarrierSenseErrors */
141ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_13_CS_ERR,
142ca224454SJakub Kicinski 	/* 30.3.1.1.14 aOctetsReceivedOK */
143ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_14_RX_BYTES,
144ca224454SJakub Kicinski 	/* 30.3.1.1.15 aFramesLostDueToIntMACRcvError */
145ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_15_RX_INT_ERR,
146ca224454SJakub Kicinski 
147ca224454SJakub Kicinski 	/* 30.3.1.1.18 aMulticastFramesXmittedOK */
148ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_18_TX_MCAST,
149ca224454SJakub Kicinski 	/* 30.3.1.1.19 aBroadcastFramesXmittedOK */
150ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_19_TX_BCAST,
151ca224454SJakub Kicinski 	/* 30.3.1.1.20 aFramesWithExcessiveDeferral */
152ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_20_XS_DEFER,
153ca224454SJakub Kicinski 	/* 30.3.1.1.21 aMulticastFramesReceivedOK */
154ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_21_RX_MCAST,
155ca224454SJakub Kicinski 	/* 30.3.1.1.22 aBroadcastFramesReceivedOK */
156ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_22_RX_BCAST,
157ca224454SJakub Kicinski 	/* 30.3.1.1.23 aInRangeLengthErrors */
158ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_23_IR_LEN_ERR,
159ca224454SJakub Kicinski 	/* 30.3.1.1.24 aOutOfRangeLengthField */
160ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_24_OOR_LEN,
161ca224454SJakub Kicinski 	/* 30.3.1.1.25 aFrameTooLongErrors */
162ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_25_TOO_LONG_ERR,
163ca224454SJakub Kicinski 
164ca224454SJakub Kicinski 	/* add new constants above here */
165ca224454SJakub Kicinski 	__ETHTOOL_A_STATS_ETH_MAC_CNT,
166ca224454SJakub Kicinski 	ETHTOOL_A_STATS_ETH_MAC_MAX = (__ETHTOOL_A_STATS_ETH_MAC_CNT - 1)
167ca224454SJakub Kicinski };
168ca224454SJakub Kicinski 
169bfad2b97SJakub Kicinski enum {
170bfad2b97SJakub Kicinski 	/* 30.3.3.3 aMACControlFramesTransmitted */
171bfad2b97SJakub Kicinski 	ETHTOOL_A_STATS_ETH_CTRL_3_TX,
172bfad2b97SJakub Kicinski 	/* 30.3.3.4 aMACControlFramesReceived */
173bfad2b97SJakub Kicinski 	ETHTOOL_A_STATS_ETH_CTRL_4_RX,
174bfad2b97SJakub Kicinski 	/* 30.3.3.5 aUnsupportedOpcodesReceived */
175bfad2b97SJakub Kicinski 	ETHTOOL_A_STATS_ETH_CTRL_5_RX_UNSUP,
176bfad2b97SJakub Kicinski 
177bfad2b97SJakub Kicinski 	/* add new constants above here */
178bfad2b97SJakub Kicinski 	__ETHTOOL_A_STATS_ETH_CTRL_CNT,
179bfad2b97SJakub Kicinski 	ETHTOOL_A_STATS_ETH_CTRL_MAX = (__ETHTOOL_A_STATS_ETH_CTRL_CNT - 1)
180bfad2b97SJakub Kicinski };
181bfad2b97SJakub Kicinski 
182a8b06e9dSJakub Kicinski enum {
183a8b06e9dSJakub Kicinski 	/* etherStatsUndersizePkts */
184a8b06e9dSJakub Kicinski 	ETHTOOL_A_STATS_RMON_UNDERSIZE,
185a8b06e9dSJakub Kicinski 	/* etherStatsOversizePkts */
186a8b06e9dSJakub Kicinski 	ETHTOOL_A_STATS_RMON_OVERSIZE,
187a8b06e9dSJakub Kicinski 	/* etherStatsFragments */
188a8b06e9dSJakub Kicinski 	ETHTOOL_A_STATS_RMON_FRAG,
189a8b06e9dSJakub Kicinski 	/* etherStatsJabbers */
190a8b06e9dSJakub Kicinski 	ETHTOOL_A_STATS_RMON_JABBER,
191a8b06e9dSJakub Kicinski 
192a8b06e9dSJakub Kicinski 	/* add new constants above here */
193a8b06e9dSJakub Kicinski 	__ETHTOOL_A_STATS_RMON_CNT,
194a8b06e9dSJakub Kicinski 	ETHTOOL_A_STATS_RMON_MAX = (__ETHTOOL_A_STATS_RMON_CNT - 1)
195a8b06e9dSJakub Kicinski };
196a8b06e9dSJakub Kicinski 
197*6167c0b6SJakub Kicinski enum {
198*6167c0b6SJakub Kicinski 	/* Basic packet counters if PHY has separate counters from the MAC */
199*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_RX_PKTS,
200*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_RX_BYTES,
201*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_RX_ERRORS,
202*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_TX_PKTS,
203*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_TX_BYTES,
204*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_TX_ERRORS,
205*6167c0b6SJakub Kicinski 
206*6167c0b6SJakub Kicinski 	/* add new constants above here */
207*6167c0b6SJakub Kicinski 	__ETHTOOL_A_STATS_PHY_CNT,
208*6167c0b6SJakub Kicinski 	ETHTOOL_A_STATS_PHY_MAX = (__ETHTOOL_A_STATS_PHY_CNT - 1)
209*6167c0b6SJakub Kicinski };
21017194be4SMaxime Chevallier 
2112b4a8990SMichal Kubecek /* generic netlink info */
2122b4a8990SMichal Kubecek #define ETHTOOL_GENL_NAME "ethtool"
2132b4a8990SMichal Kubecek #define ETHTOOL_GENL_VERSION 1
2142b4a8990SMichal Kubecek 
2156b08d6c1SMichal Kubecek #define ETHTOOL_MCGRP_MONITOR_NAME "monitor"
2166b08d6c1SMichal Kubecek 
2172b4a8990SMichal Kubecek #endif /* _UAPI_LINUX_ETHTOOL_NETLINK_H_ */
218