1 /* 2 * desc-ethtool.c - ethtool netlink format descriptions 3 * 4 * Descriptions of ethtool netlink messages and attributes for pretty print. 5 */ 6 7 #include "../internal.h" 8 #include <linux/ethtool_netlink.h> 9 10 #include "prettymsg.h" 11 12 static const struct pretty_nla_desc __header_desc[] = { 13 NLATTR_DESC_INVALID(ETHTOOL_A_HEADER_UNSPEC), 14 NLATTR_DESC_U32(ETHTOOL_A_HEADER_DEV_INDEX), 15 NLATTR_DESC_STRING(ETHTOOL_A_HEADER_DEV_NAME), 16 NLATTR_DESC_X32(ETHTOOL_A_HEADER_FLAGS), 17 }; 18 19 static const struct pretty_nla_desc __bitset_bit_desc[] = { 20 NLATTR_DESC_INVALID(ETHTOOL_A_BITSET_BIT_UNSPEC), 21 NLATTR_DESC_U32(ETHTOOL_A_BITSET_BIT_INDEX), 22 NLATTR_DESC_STRING(ETHTOOL_A_BITSET_BIT_NAME), 23 NLATTR_DESC_FLAG(ETHTOOL_A_BITSET_BIT_VALUE), 24 }; 25 26 static const struct pretty_nla_desc __bitset_bits_desc[] = { 27 NLATTR_DESC_INVALID(ETHTOOL_A_BITSET_BITS_UNSPEC), 28 NLATTR_DESC_NESTED(ETHTOOL_A_BITSET_BITS_BIT, bitset_bit), 29 }; 30 31 static const struct pretty_nla_desc __bitset_desc[] = { 32 NLATTR_DESC_INVALID(ETHTOOL_A_BITSET_UNSPEC), 33 NLATTR_DESC_FLAG(ETHTOOL_A_BITSET_NOMASK), 34 NLATTR_DESC_U32(ETHTOOL_A_BITSET_SIZE), 35 NLATTR_DESC_NESTED(ETHTOOL_A_BITSET_BITS, bitset_bits), 36 NLATTR_DESC_BINARY(ETHTOOL_A_BITSET_VALUE), 37 NLATTR_DESC_BINARY(ETHTOOL_A_BITSET_MASK), 38 }; 39 40 static const struct pretty_nla_desc __string_desc[] = { 41 NLATTR_DESC_INVALID(ETHTOOL_A_STRING_UNSPEC), 42 NLATTR_DESC_U32(ETHTOOL_A_STRING_INDEX), 43 NLATTR_DESC_STRING(ETHTOOL_A_STRING_VALUE), 44 }; 45 46 static const struct pretty_nla_desc __strings_desc[] = { 47 NLATTR_DESC_INVALID(ETHTOOL_A_STRINGS_UNSPEC), 48 NLATTR_DESC_NESTED(ETHTOOL_A_STRINGS_STRING, string), 49 }; 50 51 static const struct pretty_nla_desc __stringset_desc[] = { 52 NLATTR_DESC_INVALID(ETHTOOL_A_STRINGSET_UNSPEC), 53 NLATTR_DESC_U32(ETHTOOL_A_STRINGSET_ID), 54 NLATTR_DESC_U32(ETHTOOL_A_STRINGSET_COUNT), 55 NLATTR_DESC_NESTED(ETHTOOL_A_STRINGSET_STRINGS, strings), 56 }; 57 58 static const struct pretty_nla_desc __stringsets_desc[] = { 59 NLATTR_DESC_INVALID(ETHTOOL_A_STRINGSETS_UNSPEC), 60 NLATTR_DESC_NESTED(ETHTOOL_A_STRINGSETS_STRINGSET, stringset), 61 }; 62 63 static const struct pretty_nla_desc __strset_desc[] = { 64 NLATTR_DESC_INVALID(ETHTOOL_A_STRSET_UNSPEC), 65 NLATTR_DESC_NESTED(ETHTOOL_A_STRSET_HEADER, header), 66 NLATTR_DESC_NESTED(ETHTOOL_A_STRSET_STRINGSETS, stringsets), 67 NLATTR_DESC_FLAG(ETHTOOL_A_STRSET_COUNTS_ONLY), 68 }; 69 70 static const struct pretty_nla_desc __linkinfo_desc[] = { 71 NLATTR_DESC_INVALID(ETHTOOL_A_LINKINFO_UNSPEC), 72 NLATTR_DESC_NESTED(ETHTOOL_A_LINKINFO_HEADER, header), 73 NLATTR_DESC_U8(ETHTOOL_A_LINKINFO_PORT), 74 NLATTR_DESC_U8(ETHTOOL_A_LINKINFO_PHYADDR), 75 NLATTR_DESC_U8(ETHTOOL_A_LINKINFO_TP_MDIX), 76 NLATTR_DESC_U8(ETHTOOL_A_LINKINFO_TP_MDIX_CTRL), 77 NLATTR_DESC_U8(ETHTOOL_A_LINKINFO_TRANSCEIVER), 78 }; 79 80 static const char *__linkmodes_rate_matching_names[] = { 81 [RATE_MATCH_NONE] = "RATE_MATCH_NONE", 82 [RATE_MATCH_PAUSE] = "RATE_MATCH_PAUSE", 83 [RATE_MATCH_CRS] = "RATE_MATCH_CRS", 84 [RATE_MATCH_OPEN_LOOP] = "RATE_MATCH_OPEN_LOOP", 85 }; 86 87 static const struct pretty_nla_desc __linkmodes_desc[] = { 88 NLATTR_DESC_INVALID(ETHTOOL_A_LINKMODES_UNSPEC), 89 NLATTR_DESC_NESTED(ETHTOOL_A_LINKMODES_HEADER, header), 90 NLATTR_DESC_BOOL(ETHTOOL_A_LINKMODES_AUTONEG), 91 NLATTR_DESC_NESTED(ETHTOOL_A_LINKMODES_OURS, bitset), 92 NLATTR_DESC_NESTED(ETHTOOL_A_LINKMODES_PEER, bitset), 93 NLATTR_DESC_U32(ETHTOOL_A_LINKMODES_SPEED), 94 NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_DUPLEX), 95 NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_CFG), 96 NLATTR_DESC_U8(ETHTOOL_A_LINKMODES_MASTER_SLAVE_STATE), 97 NLATTR_DESC_U32(ETHTOOL_A_LINKMODES_LANES), 98 NLATTR_DESC_U8_ENUM(ETHTOOL_A_LINKMODES_RATE_MATCHING, 99 linkmodes_rate_matching), 100 }; 101 102 static const struct pretty_nla_desc __linkstate_desc[] = { 103 NLATTR_DESC_INVALID(ETHTOOL_A_LINKSTATE_UNSPEC), 104 NLATTR_DESC_NESTED(ETHTOOL_A_LINKSTATE_HEADER, header), 105 NLATTR_DESC_BOOL(ETHTOOL_A_LINKSTATE_LINK), 106 NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI), 107 NLATTR_DESC_U32(ETHTOOL_A_LINKSTATE_SQI_MAX), 108 NLATTR_DESC_U8(ETHTOOL_A_LINKSTATE_EXT_STATE), 109 NLATTR_DESC_U8(ETHTOOL_A_LINKSTATE_EXT_SUBSTATE), 110 }; 111 112 static const struct pretty_nla_desc __debug_desc[] = { 113 NLATTR_DESC_INVALID(ETHTOOL_A_DEBUG_UNSPEC), 114 NLATTR_DESC_NESTED(ETHTOOL_A_DEBUG_HEADER, header), 115 NLATTR_DESC_NESTED(ETHTOOL_A_DEBUG_MSGMASK, bitset), 116 }; 117 118 static const struct pretty_nla_desc __wol_desc[] = { 119 NLATTR_DESC_INVALID(ETHTOOL_A_WOL_UNSPEC), 120 NLATTR_DESC_NESTED(ETHTOOL_A_WOL_HEADER, header), 121 NLATTR_DESC_NESTED(ETHTOOL_A_WOL_MODES, bitset), 122 NLATTR_DESC_BINARY(ETHTOOL_A_WOL_SOPASS), 123 }; 124 125 static const struct pretty_nla_desc __features_desc[] = { 126 NLATTR_DESC_INVALID(ETHTOOL_A_FEATURES_UNSPEC), 127 NLATTR_DESC_NESTED(ETHTOOL_A_FEATURES_HEADER, header), 128 NLATTR_DESC_NESTED(ETHTOOL_A_FEATURES_HW, bitset), 129 NLATTR_DESC_NESTED(ETHTOOL_A_FEATURES_WANTED, bitset), 130 NLATTR_DESC_NESTED(ETHTOOL_A_FEATURES_ACTIVE, bitset), 131 NLATTR_DESC_NESTED(ETHTOOL_A_FEATURES_NOCHANGE, bitset), 132 }; 133 134 static const struct pretty_nla_desc __privflags_desc[] = { 135 NLATTR_DESC_INVALID(ETHTOOL_A_PRIVFLAGS_UNSPEC), 136 NLATTR_DESC_NESTED(ETHTOOL_A_PRIVFLAGS_HEADER, header), 137 NLATTR_DESC_NESTED(ETHTOOL_A_PRIVFLAGS_FLAGS, bitset), 138 }; 139 140 static const char *__rings_tcp_data_split_names[] = { 141 [ETHTOOL_TCP_DATA_SPLIT_UNKNOWN] = "ETHTOOL_TCP_DATA_SPLIT_UNKNOWN", 142 [ETHTOOL_TCP_DATA_SPLIT_DISABLED] = "ETHTOOL_TCP_DATA_SPLIT_DISABLED", 143 [ETHTOOL_TCP_DATA_SPLIT_ENABLED] = "ETHTOOL_TCP_DATA_SPLIT_ENABLED", 144 }; 145 146 static const struct pretty_nla_desc __rings_desc[] = { 147 NLATTR_DESC_INVALID(ETHTOOL_A_RINGS_UNSPEC), 148 NLATTR_DESC_NESTED(ETHTOOL_A_RINGS_HEADER, header), 149 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_MAX), 150 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_MINI_MAX), 151 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_JUMBO_MAX), 152 NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX_MAX), 153 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX), 154 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_MINI), 155 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_JUMBO), 156 NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX), 157 NLATTR_DESC_U32(ETHTOOL_A_RINGS_RX_BUF_LEN), 158 NLATTR_DESC_U8_ENUM(ETHTOOL_A_RINGS_TCP_DATA_SPLIT, rings_tcp_data_split), 159 NLATTR_DESC_U32(ETHTOOL_A_RINGS_CQE_SIZE), 160 NLATTR_DESC_BOOL(ETHTOOL_A_RINGS_TX_PUSH), 161 NLATTR_DESC_BOOL(ETHTOOL_A_RINGS_RX_PUSH), 162 NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN), 163 NLATTR_DESC_U32(ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX), 164 }; 165 166 static const struct pretty_nla_desc __channels_desc[] = { 167 NLATTR_DESC_INVALID(ETHTOOL_A_CHANNELS_UNSPEC), 168 NLATTR_DESC_NESTED(ETHTOOL_A_CHANNELS_HEADER, header), 169 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_RX_MAX), 170 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_TX_MAX), 171 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_OTHER_MAX), 172 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_COMBINED_MAX), 173 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_RX_COUNT), 174 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_TX_COUNT), 175 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_OTHER_COUNT), 176 NLATTR_DESC_U32(ETHTOOL_A_CHANNELS_COMBINED_COUNT), 177 }; 178 179 static const struct pretty_nla_desc __coalesce_desc[] = { 180 NLATTR_DESC_INVALID(ETHTOOL_A_COALESCE_UNSPEC), 181 NLATTR_DESC_NESTED(ETHTOOL_A_COALESCE_HEADER, header), 182 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_USECS), 183 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_MAX_FRAMES), 184 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_USECS_IRQ), 185 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_MAX_FRAMES_IRQ), 186 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_USECS), 187 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_MAX_FRAMES), 188 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_USECS_IRQ), 189 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_MAX_FRAMES_IRQ), 190 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_STATS_BLOCK_USECS), 191 NLATTR_DESC_BOOL(ETHTOOL_A_COALESCE_USE_ADAPTIVE_RX), 192 NLATTR_DESC_BOOL(ETHTOOL_A_COALESCE_USE_ADAPTIVE_TX), 193 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_PKT_RATE_LOW), 194 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_USECS_LOW), 195 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_MAX_FRAMES_LOW), 196 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_USECS_LOW), 197 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_MAX_FRAMES_LOW), 198 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_PKT_RATE_HIGH), 199 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_USECS_HIGH), 200 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RX_MAX_FRAMES_HIGH), 201 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_USECS_HIGH), 202 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_MAX_FRAMES_HIGH), 203 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL), 204 NLATTR_DESC_BOOL(ETHTOOL_A_COALESCE_USE_CQE_MODE_TX), 205 NLATTR_DESC_BOOL(ETHTOOL_A_COALESCE_USE_CQE_MODE_RX), 206 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_AGGR_MAX_BYTES), 207 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_AGGR_MAX_FRAMES), 208 NLATTR_DESC_U32(ETHTOOL_A_COALESCE_TX_AGGR_TIME_USECS), 209 }; 210 211 static const struct pretty_nla_desc __pause_stats_desc[] = { 212 NLATTR_DESC_BINARY(ETHTOOL_A_PAUSE_STAT_PAD), 213 NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_TX_FRAMES), 214 NLATTR_DESC_U64(ETHTOOL_A_PAUSE_STAT_RX_FRAMES), 215 }; 216 217 static const struct pretty_nla_desc __pause_desc[] = { 218 NLATTR_DESC_INVALID(ETHTOOL_A_PAUSE_UNSPEC), 219 NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_HEADER, header), 220 NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_AUTONEG), 221 NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_RX), 222 NLATTR_DESC_BOOL(ETHTOOL_A_PAUSE_TX), 223 NLATTR_DESC_NESTED(ETHTOOL_A_PAUSE_STATS, pause_stats), 224 }; 225 226 static const struct pretty_nla_desc __eee_desc[] = { 227 NLATTR_DESC_INVALID(ETHTOOL_A_EEE_UNSPEC), 228 NLATTR_DESC_NESTED(ETHTOOL_A_EEE_HEADER, header), 229 NLATTR_DESC_NESTED(ETHTOOL_A_EEE_MODES_OURS, bitset), 230 NLATTR_DESC_NESTED(ETHTOOL_A_EEE_MODES_PEER, bitset), 231 NLATTR_DESC_BOOL(ETHTOOL_A_EEE_ACTIVE), 232 NLATTR_DESC_BOOL(ETHTOOL_A_EEE_ENABLED), 233 NLATTR_DESC_BOOL(ETHTOOL_A_EEE_TX_LPI_ENABLED), 234 NLATTR_DESC_U32(ETHTOOL_A_EEE_TX_LPI_TIMER), 235 }; 236 237 static const struct pretty_nla_desc __tsinfo_desc[] = { 238 NLATTR_DESC_INVALID(ETHTOOL_A_TSINFO_UNSPEC), 239 NLATTR_DESC_NESTED(ETHTOOL_A_TSINFO_HEADER, header), 240 NLATTR_DESC_NESTED(ETHTOOL_A_TSINFO_TIMESTAMPING, bitset), 241 NLATTR_DESC_NESTED(ETHTOOL_A_TSINFO_TX_TYPES, bitset), 242 NLATTR_DESC_NESTED(ETHTOOL_A_TSINFO_RX_FILTERS, bitset), 243 NLATTR_DESC_U32(ETHTOOL_A_TSINFO_PHC_INDEX), 244 }; 245 246 static const struct pretty_nla_desc __cable_test_desc[] = { 247 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TEST_UNSPEC), 248 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_HEADER, header), 249 }; 250 251 static const struct pretty_nla_desc __cable_test_result_desc[] = { 252 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_RESULT_UNSPEC), 253 NLATTR_DESC_U8(ETHTOOL_A_CABLE_RESULT_PAIR), 254 NLATTR_DESC_U8(ETHTOOL_A_CABLE_RESULT_CODE), 255 NLATTR_DESC_U32(ETHTOOL_A_CABLE_RESULT_SRC), 256 }; 257 258 static const struct pretty_nla_desc __cable_test_flength_desc[] = { 259 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC), 260 NLATTR_DESC_U8(ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR), 261 NLATTR_DESC_U32(ETHTOOL_A_CABLE_FAULT_LENGTH_CM), 262 NLATTR_DESC_U32(ETHTOOL_A_CABLE_FAULT_LENGTH_SRC), 263 }; 264 265 static const struct pretty_nla_desc __cable_nest_desc[] = { 266 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_NEST_UNSPEC), 267 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_NEST_RESULT, cable_test_result), 268 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_NEST_FAULT_LENGTH, 269 cable_test_flength), 270 }; 271 272 static const struct pretty_nla_desc __cable_test_ntf_desc[] = { 273 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TEST_NTF_UNSPEC), 274 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_NTF_HEADER, header), 275 NLATTR_DESC_U8(ETHTOOL_A_CABLE_TEST_NTF_STATUS), 276 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_NTF_NEST, cable_nest), 277 }; 278 279 static const struct pretty_nla_desc __cable_test_tdr_cfg_desc[] = { 280 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TEST_TDR_CFG_UNSPEC), 281 NLATTR_DESC_U32(ETHTOOL_A_CABLE_TEST_TDR_CFG_FIRST), 282 NLATTR_DESC_U32(ETHTOOL_A_CABLE_TEST_TDR_CFG_LAST), 283 NLATTR_DESC_U32(ETHTOOL_A_CABLE_TEST_TDR_CFG_STEP), 284 NLATTR_DESC_U8(ETHTOOL_A_CABLE_TEST_TDR_CFG_PAIR), 285 }; 286 287 static const struct pretty_nla_desc __cable_test_tdr_desc[] = { 288 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TEST_TDR_UNSPEC), 289 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_TDR_HEADER, header), 290 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_TDR_CFG, cable_test_tdr_cfg), 291 }; 292 293 static const struct pretty_nla_desc __cable_step_desc[] = { 294 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_STEP_UNSPEC), 295 NLATTR_DESC_U32(ETHTOOL_A_CABLE_STEP_FIRST_DISTANCE), 296 NLATTR_DESC_U32(ETHTOOL_A_CABLE_STEP_LAST_DISTANCE), 297 NLATTR_DESC_U32(ETHTOOL_A_CABLE_STEP_STEP_DISTANCE), 298 }; 299 300 static const struct pretty_nla_desc __cable_amplitude_desc[] = { 301 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_AMPLITUDE_UNSPEC), 302 NLATTR_DESC_U8(ETHTOOL_A_CABLE_AMPLITUDE_PAIR), 303 NLATTR_DESC_S16(ETHTOOL_A_CABLE_AMPLITUDE_mV), 304 }; 305 306 static const struct pretty_nla_desc __cable_pulse_desc[] = { 307 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_PULSE_UNSPEC), 308 NLATTR_DESC_S16(ETHTOOL_A_CABLE_PULSE_mV), 309 }; 310 311 static const struct pretty_nla_desc __cable_test_tdr_nest_desc[] = { 312 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TDR_NEST_UNSPEC), 313 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TDR_NEST_STEP, cable_step), 314 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TDR_NEST_AMPLITUDE, cable_amplitude), 315 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TDR_NEST_PULSE, cable_pulse), 316 }; 317 318 static const struct pretty_nla_desc __cable_test_tdr_ntf_desc[] = { 319 NLATTR_DESC_INVALID(ETHTOOL_A_CABLE_TEST_TDR_UNSPEC), 320 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_TDR_NTF_HEADER, header), 321 NLATTR_DESC_U8(ETHTOOL_A_CABLE_TEST_TDR_NTF_STATUS), 322 NLATTR_DESC_NESTED(ETHTOOL_A_CABLE_TEST_TDR_NTF_NEST, 323 cable_test_tdr_nest), 324 }; 325 326 const struct pretty_nla_desc __tunnel_udp_entry_desc[] = { 327 NLATTR_DESC_INVALID(ETHTOOL_A_TUNNEL_UDP_ENTRY_UNSPEC), 328 NLATTR_DESC_U16(ETHTOOL_A_TUNNEL_UDP_ENTRY_PORT), 329 NLATTR_DESC_U32(ETHTOOL_A_TUNNEL_UDP_ENTRY_TYPE), 330 }; 331 332 const struct pretty_nla_desc __tunnel_udp_table_desc[] = { 333 NLATTR_DESC_INVALID(ETHTOOL_A_TUNNEL_UDP_TABLE_UNSPEC), 334 NLATTR_DESC_U32(ETHTOOL_A_TUNNEL_UDP_TABLE_SIZE), 335 NLATTR_DESC_NESTED(ETHTOOL_A_TUNNEL_UDP_TABLE_TYPES, bitset), 336 NLATTR_DESC_NESTED(ETHTOOL_A_TUNNEL_UDP_TABLE_ENTRY, tunnel_udp_entry), 337 }; 338 339 const struct pretty_nla_desc __tunnel_udp_desc[] = { 340 NLATTR_DESC_INVALID(ETHTOOL_A_TUNNEL_UDP_UNSPEC), 341 NLATTR_DESC_NESTED(ETHTOOL_A_TUNNEL_UDP_TABLE, tunnel_udp_table), 342 }; 343 344 const struct pretty_nla_desc __tunnel_info_desc[] = { 345 NLATTR_DESC_INVALID(ETHTOOL_A_TUNNEL_INFO_UNSPEC), 346 NLATTR_DESC_NESTED(ETHTOOL_A_TUNNEL_INFO_HEADER, header), 347 NLATTR_DESC_NESTED(ETHTOOL_A_TUNNEL_INFO_UDP_PORTS, tunnel_udp), 348 }; 349 350 const struct pretty_nla_desc __fec_stats_desc[] = { 351 NLATTR_DESC_INVALID(ETHTOOL_A_FEC_STAT_UNSPEC), 352 NLATTR_DESC_BINARY(ETHTOOL_A_FEC_STAT_PAD), 353 NLATTR_DESC_U64(ETHTOOL_A_FEC_STAT_CORRECTED), 354 NLATTR_DESC_U64(ETHTOOL_A_FEC_STAT_UNCORR), 355 NLATTR_DESC_U64(ETHTOOL_A_FEC_STAT_CORR_BITS), 356 }; 357 358 static const struct pretty_nla_desc __fec_desc[] = { 359 NLATTR_DESC_INVALID(ETHTOOL_A_FEC_UNSPEC), 360 NLATTR_DESC_NESTED(ETHTOOL_A_FEC_HEADER, header), 361 NLATTR_DESC_NESTED(ETHTOOL_A_FEC_MODES, bitset), 362 NLATTR_DESC_BOOL(ETHTOOL_A_FEC_AUTO), 363 NLATTR_DESC_U32(ETHTOOL_A_FEC_ACTIVE), 364 NLATTR_DESC_NESTED(ETHTOOL_A_FEC_STATS, fec_stats), 365 }; 366 367 const struct pretty_nla_desc __module_eeprom_desc[] = { 368 NLATTR_DESC_INVALID(ETHTOOL_A_MODULE_EEPROM_UNSPEC), 369 NLATTR_DESC_NESTED(ETHTOOL_A_MODULE_EEPROM_HEADER, header), 370 NLATTR_DESC_U32(ETHTOOL_A_MODULE_EEPROM_OFFSET), 371 NLATTR_DESC_U32(ETHTOOL_A_MODULE_EEPROM_LENGTH), 372 NLATTR_DESC_U8(ETHTOOL_A_MODULE_EEPROM_PAGE), 373 NLATTR_DESC_U8(ETHTOOL_A_MODULE_EEPROM_BANK), 374 NLATTR_DESC_U8(ETHTOOL_A_MODULE_EEPROM_I2C_ADDRESS), 375 NLATTR_DESC_BINARY(ETHTOOL_A_MODULE_EEPROM_DATA) 376 }; 377 378 static const struct pretty_nla_desc __stats_grp_stat_desc[] = { 379 NLATTR_DESC_U64(0), NLATTR_DESC_U64(1), NLATTR_DESC_U64(2), 380 NLATTR_DESC_U64(3), NLATTR_DESC_U64(4), NLATTR_DESC_U64(5), 381 NLATTR_DESC_U64(6), NLATTR_DESC_U64(7), NLATTR_DESC_U64(8), 382 NLATTR_DESC_U64(9), NLATTR_DESC_U64(10), NLATTR_DESC_U64(11), 383 NLATTR_DESC_U64(12), NLATTR_DESC_U64(13), NLATTR_DESC_U64(14), 384 NLATTR_DESC_U64(15), NLATTR_DESC_U64(16), NLATTR_DESC_U64(17), 385 NLATTR_DESC_U64(18), NLATTR_DESC_U64(19), NLATTR_DESC_U64(20), 386 NLATTR_DESC_U64(21), NLATTR_DESC_U64(22), NLATTR_DESC_U64(23), 387 NLATTR_DESC_U64(24), NLATTR_DESC_U64(25), NLATTR_DESC_U64(26), 388 NLATTR_DESC_U64(27), NLATTR_DESC_U64(28), NLATTR_DESC_U64(29), 389 }; 390 391 static const struct pretty_nla_desc __stats_grp_hist_desc[] = { 392 NLATTR_DESC_U32(ETHTOOL_A_STATS_GRP_HIST_BKT_LOW), 393 NLATTR_DESC_U32(ETHTOOL_A_STATS_GRP_HIST_BKT_HI), 394 NLATTR_DESC_U64(ETHTOOL_A_STATS_GRP_HIST_VAL), 395 }; 396 397 static const struct pretty_nla_desc __stats_grp_desc[] = { 398 NLATTR_DESC_INVALID(ETHTOOL_A_STATS_GRP_UNSPEC), 399 NLATTR_DESC_INVALID(ETHTOOL_A_STATS_GRP_PAD), 400 NLATTR_DESC_U32(ETHTOOL_A_STATS_GRP_ID), 401 NLATTR_DESC_U32(ETHTOOL_A_STATS_GRP_SS_ID), 402 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_GRP_STAT, stats_grp_stat), 403 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_GRP_HIST_RX, stats_grp_hist), 404 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_GRP_HIST_TX, stats_grp_hist), 405 }; 406 407 static const struct pretty_nla_desc __stats_desc[] = { 408 NLATTR_DESC_INVALID(ETHTOOL_A_STATS_UNSPEC), 409 NLATTR_DESC_INVALID(ETHTOOL_A_STATS_PAD), 410 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_HEADER, header), 411 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_GROUPS, bitset), 412 NLATTR_DESC_NESTED(ETHTOOL_A_STATS_GRP, stats_grp), 413 }; 414 415 static const struct pretty_nla_desc __phc_vclocks_desc[] = { 416 NLATTR_DESC_INVALID(ETHTOOL_A_PHC_VCLOCKS_UNSPEC), 417 NLATTR_DESC_NESTED(ETHTOOL_A_PHC_VCLOCKS_HEADER, header), 418 NLATTR_DESC_U32(ETHTOOL_A_PHC_VCLOCKS_NUM), 419 NLATTR_DESC_BINARY(ETHTOOL_A_PHC_VCLOCKS_INDEX), 420 }; 421 422 static const struct pretty_nla_desc __module_desc[] = { 423 NLATTR_DESC_INVALID(ETHTOOL_A_MODULE_UNSPEC), 424 NLATTR_DESC_NESTED(ETHTOOL_A_MODULE_HEADER, header), 425 NLATTR_DESC_U8(ETHTOOL_A_MODULE_POWER_MODE_POLICY), 426 NLATTR_DESC_U8(ETHTOOL_A_MODULE_POWER_MODE), 427 }; 428 429 static const char *__pse_admin_state_names[] = { 430 [ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN] = "ETHTOOL_PODL_PSE_ADMIN_STATE_UNKNOWN", 431 [ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED] = "ETHTOOL_PODL_PSE_ADMIN_STATE_DISABLED", 432 [ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED] = "ETHTOOL_PODL_PSE_ADMIN_STATE_ENABLED", 433 }; 434 435 static const char *__pse_pw_d_status_names[] = { 436 [ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN] = "ETHTOOL_PODL_PSE_PW_D_STATUS_UNKNOWN", 437 [ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED] = "ETHTOOL_PODL_PSE_PW_D_STATUS_DISABLED", 438 [ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING] = "ETHTOOL_PODL_PSE_PW_D_STATUS_SEARCHING", 439 [ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING] = "ETHTOOL_PODL_PSE_PW_D_STATUS_DELIVERING", 440 [ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP] = "ETHTOOL_PODL_PSE_PW_D_STATUS_SLEEP", 441 [ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE] = "ETHTOOL_PODL_PSE_PW_D_STATUS_IDLE", 442 [ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR] = "ETHTOOL_PODL_PSE_PW_D_STATUS_ERROR", 443 }; 444 445 static const struct pretty_nla_desc __pse_desc[] = { 446 NLATTR_DESC_INVALID(ETHTOOL_A_PSE_UNSPEC), 447 NLATTR_DESC_NESTED(ETHTOOL_A_PSE_HEADER, header), 448 NLATTR_DESC_U32_ENUM(ETHTOOL_A_PODL_PSE_ADMIN_STATE, pse_admin_state), 449 NLATTR_DESC_U32_ENUM(ETHTOOL_A_PODL_PSE_ADMIN_CONTROL, pse_admin_state), 450 NLATTR_DESC_U32_ENUM(ETHTOOL_A_PODL_PSE_PW_D_STATUS, pse_pw_d_status), 451 }; 452 453 static const struct pretty_nla_desc __rss_desc[] = { 454 NLATTR_DESC_INVALID(ETHTOOL_A_RSS_UNSPEC), 455 NLATTR_DESC_NESTED(ETHTOOL_A_RSS_HEADER, header), 456 NLATTR_DESC_U32(ETHTOOL_A_RSS_CONTEXT), 457 NLATTR_DESC_U32(ETHTOOL_A_RSS_HFUNC), 458 NLATTR_DESC_BINARY(ETHTOOL_A_RSS_INDIR), 459 NLATTR_DESC_BINARY(ETHTOOL_A_RSS_HKEY), 460 }; 461 462 static const struct pretty_nla_desc __plca_desc[] = { 463 NLATTR_DESC_INVALID(ETHTOOL_A_PLCA_UNSPEC), 464 NLATTR_DESC_NESTED(ETHTOOL_A_PLCA_HEADER, header), 465 NLATTR_DESC_U16(ETHTOOL_A_PLCA_VERSION), 466 NLATTR_DESC_U8(ETHTOOL_A_PLCA_ENABLED), 467 NLATTR_DESC_U8(ETHTOOL_A_PLCA_STATUS), 468 NLATTR_DESC_U32(ETHTOOL_A_PLCA_NODE_CNT), 469 NLATTR_DESC_U32(ETHTOOL_A_PLCA_NODE_ID), 470 NLATTR_DESC_U32(ETHTOOL_A_PLCA_TO_TMR), 471 NLATTR_DESC_U32(ETHTOOL_A_PLCA_BURST_CNT), 472 NLATTR_DESC_U32(ETHTOOL_A_PLCA_BURST_TMR), 473 }; 474 475 static const struct pretty_nla_desc __mm_stat_desc[] = { 476 NLATTR_DESC_INVALID(ETHTOOL_A_MM_STAT_UNSPEC), 477 NLATTR_DESC_BINARY(ETHTOOL_A_MM_STAT_PAD), 478 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_REASSEMBLY_ERRORS), 479 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_SMD_ERRORS), 480 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_REASSEMBLY_OK), 481 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_RX_FRAG_COUNT), 482 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_TX_FRAG_COUNT), 483 NLATTR_DESC_U64(ETHTOOL_A_MM_STAT_HOLD_COUNT), 484 }; 485 486 static const struct pretty_nla_desc __mm_desc[] = { 487 NLATTR_DESC_INVALID(ETHTOOL_A_MM_UNSPEC), 488 NLATTR_DESC_NESTED(ETHTOOL_A_MM_HEADER, header), 489 NLATTR_DESC_U8(ETHTOOL_A_MM_PMAC_ENABLED), 490 NLATTR_DESC_U8(ETHTOOL_A_MM_TX_ENABLED), 491 NLATTR_DESC_U8(ETHTOOL_A_MM_TX_ACTIVE), 492 NLATTR_DESC_U32(ETHTOOL_A_MM_TX_MIN_FRAG_SIZE), 493 NLATTR_DESC_U32(ETHTOOL_A_MM_RX_MIN_FRAG_SIZE), 494 NLATTR_DESC_U8(ETHTOOL_A_MM_VERIFY_ENABLED), 495 NLATTR_DESC_U8(ETHTOOL_A_MM_VERIFY_STATUS), 496 NLATTR_DESC_U32(ETHTOOL_A_MM_VERIFY_TIME), 497 NLATTR_DESC_U32(ETHTOOL_A_MM_MAX_VERIFY_TIME), 498 NLATTR_DESC_NESTED(ETHTOOL_A_MM_STATS, mm_stat), 499 }; 500 501 static const struct pretty_nla_desc __module_fw_flash_desc[] = { 502 NLATTR_DESC_INVALID(ETHTOOL_A_MODULE_FW_FLASH_UNSPEC), 503 NLATTR_DESC_NESTED(ETHTOOL_A_MODULE_FW_FLASH_HEADER, header), 504 NLATTR_DESC_STRING(ETHTOOL_A_MODULE_FW_FLASH_FILE_NAME), 505 NLATTR_DESC_U32(ETHTOOL_A_MODULE_FW_FLASH_PASSWORD), 506 NLATTR_DESC_U32(ETHTOOL_A_MODULE_FW_FLASH_STATUS), 507 NLATTR_DESC_STRING(ETHTOOL_A_MODULE_FW_FLASH_STATUS_MSG), 508 NLATTR_DESC_UINT(ETHTOOL_A_MODULE_FW_FLASH_DONE), 509 NLATTR_DESC_UINT(ETHTOOL_A_MODULE_FW_FLASH_TOTAL), 510 }; 511 512 const struct pretty_nlmsg_desc ethnl_umsg_desc[] = { 513 NLMSG_DESC_INVALID(ETHTOOL_MSG_USER_NONE), 514 NLMSG_DESC(ETHTOOL_MSG_STRSET_GET, strset), 515 NLMSG_DESC(ETHTOOL_MSG_LINKINFO_GET, linkinfo), 516 NLMSG_DESC(ETHTOOL_MSG_LINKINFO_SET, linkinfo), 517 NLMSG_DESC(ETHTOOL_MSG_LINKMODES_GET, linkmodes), 518 NLMSG_DESC(ETHTOOL_MSG_LINKMODES_SET, linkmodes), 519 NLMSG_DESC(ETHTOOL_MSG_LINKSTATE_GET, linkstate), 520 NLMSG_DESC(ETHTOOL_MSG_DEBUG_GET, debug), 521 NLMSG_DESC(ETHTOOL_MSG_DEBUG_SET, debug), 522 NLMSG_DESC(ETHTOOL_MSG_WOL_GET, wol), 523 NLMSG_DESC(ETHTOOL_MSG_WOL_SET, wol), 524 NLMSG_DESC(ETHTOOL_MSG_FEATURES_GET, features), 525 NLMSG_DESC(ETHTOOL_MSG_FEATURES_SET, features), 526 NLMSG_DESC(ETHTOOL_MSG_PRIVFLAGS_GET, privflags), 527 NLMSG_DESC(ETHTOOL_MSG_PRIVFLAGS_SET, privflags), 528 NLMSG_DESC(ETHTOOL_MSG_RINGS_GET, rings), 529 NLMSG_DESC(ETHTOOL_MSG_RINGS_SET, rings), 530 NLMSG_DESC(ETHTOOL_MSG_CHANNELS_GET, channels), 531 NLMSG_DESC(ETHTOOL_MSG_CHANNELS_SET, channels), 532 NLMSG_DESC(ETHTOOL_MSG_COALESCE_GET, coalesce), 533 NLMSG_DESC(ETHTOOL_MSG_COALESCE_SET, coalesce), 534 NLMSG_DESC(ETHTOOL_MSG_PAUSE_GET, pause), 535 NLMSG_DESC(ETHTOOL_MSG_PAUSE_SET, pause), 536 NLMSG_DESC(ETHTOOL_MSG_EEE_GET, eee), 537 NLMSG_DESC(ETHTOOL_MSG_EEE_SET, eee), 538 NLMSG_DESC(ETHTOOL_MSG_TSINFO_GET, tsinfo), 539 NLMSG_DESC(ETHTOOL_MSG_CABLE_TEST_ACT, cable_test), 540 NLMSG_DESC(ETHTOOL_MSG_CABLE_TEST_TDR_ACT, cable_test_tdr), 541 NLMSG_DESC(ETHTOOL_MSG_TUNNEL_INFO_GET, tunnel_info), 542 NLMSG_DESC(ETHTOOL_MSG_FEC_GET, fec), 543 NLMSG_DESC(ETHTOOL_MSG_FEC_SET, fec), 544 NLMSG_DESC(ETHTOOL_MSG_MODULE_EEPROM_GET, module_eeprom), 545 NLMSG_DESC(ETHTOOL_MSG_STATS_GET, stats), 546 NLMSG_DESC(ETHTOOL_MSG_PHC_VCLOCKS_GET, phc_vclocks), 547 NLMSG_DESC(ETHTOOL_MSG_MODULE_GET, module), 548 NLMSG_DESC(ETHTOOL_MSG_MODULE_SET, module), 549 NLMSG_DESC(ETHTOOL_MSG_PSE_GET, pse), 550 NLMSG_DESC(ETHTOOL_MSG_PSE_SET, pse), 551 NLMSG_DESC(ETHTOOL_MSG_RSS_GET, rss), 552 NLMSG_DESC(ETHTOOL_MSG_PLCA_GET_CFG, plca), 553 NLMSG_DESC(ETHTOOL_MSG_PLCA_SET_CFG, plca), 554 NLMSG_DESC(ETHTOOL_MSG_PLCA_GET_STATUS, plca), 555 NLMSG_DESC(ETHTOOL_MSG_MM_GET, mm), 556 NLMSG_DESC(ETHTOOL_MSG_MM_SET, mm), 557 NLMSG_DESC(ETHTOOL_MSG_MODULE_FW_FLASH_ACT, module_fw_flash), 558 }; 559 560 const unsigned int ethnl_umsg_n_desc = ARRAY_SIZE(ethnl_umsg_desc); 561 562 const struct pretty_nlmsg_desc ethnl_kmsg_desc[] = { 563 NLMSG_DESC_INVALID(ETHTOOL_MSG_KERNEL_NONE), 564 NLMSG_DESC(ETHTOOL_MSG_STRSET_GET_REPLY, strset), 565 NLMSG_DESC(ETHTOOL_MSG_LINKINFO_GET_REPLY, linkinfo), 566 NLMSG_DESC(ETHTOOL_MSG_LINKINFO_NTF, linkinfo), 567 NLMSG_DESC(ETHTOOL_MSG_LINKMODES_GET_REPLY, linkmodes), 568 NLMSG_DESC(ETHTOOL_MSG_LINKMODES_NTF, linkmodes), 569 NLMSG_DESC(ETHTOOL_MSG_LINKSTATE_GET_REPLY, linkstate), 570 NLMSG_DESC(ETHTOOL_MSG_DEBUG_GET_REPLY, debug), 571 NLMSG_DESC(ETHTOOL_MSG_DEBUG_NTF, debug), 572 NLMSG_DESC(ETHTOOL_MSG_WOL_GET_REPLY, wol), 573 NLMSG_DESC(ETHTOOL_MSG_WOL_NTF, wol), 574 NLMSG_DESC(ETHTOOL_MSG_FEATURES_GET_REPLY, features), 575 NLMSG_DESC(ETHTOOL_MSG_FEATURES_SET_REPLY, features), 576 NLMSG_DESC(ETHTOOL_MSG_FEATURES_NTF, features), 577 NLMSG_DESC(ETHTOOL_MSG_PRIVFLAGS_GET_REPLY, privflags), 578 NLMSG_DESC(ETHTOOL_MSG_PRIVFLAGS_NTF, privflags), 579 NLMSG_DESC(ETHTOOL_MSG_RINGS_GET_REPLY, rings), 580 NLMSG_DESC(ETHTOOL_MSG_RINGS_NTF, rings), 581 NLMSG_DESC(ETHTOOL_MSG_CHANNELS_GET_REPLY, channels), 582 NLMSG_DESC(ETHTOOL_MSG_CHANNELS_NTF, channels), 583 NLMSG_DESC(ETHTOOL_MSG_COALESCE_GET_REPLY, coalesce), 584 NLMSG_DESC(ETHTOOL_MSG_COALESCE_NTF, coalesce), 585 NLMSG_DESC(ETHTOOL_MSG_PAUSE_GET_REPLY, pause), 586 NLMSG_DESC(ETHTOOL_MSG_PAUSE_NTF, pause), 587 NLMSG_DESC(ETHTOOL_MSG_EEE_GET_REPLY, eee), 588 NLMSG_DESC(ETHTOOL_MSG_EEE_NTF, eee), 589 NLMSG_DESC(ETHTOOL_MSG_TSINFO_GET_REPLY, tsinfo), 590 NLMSG_DESC(ETHTOOL_MSG_CABLE_TEST_NTF, cable_test_ntf), 591 NLMSG_DESC(ETHTOOL_MSG_CABLE_TEST_TDR_NTF, cable_test_tdr_ntf), 592 NLMSG_DESC(ETHTOOL_MSG_TUNNEL_INFO_GET_REPLY, tunnel_info), 593 NLMSG_DESC(ETHTOOL_MSG_FEC_GET_REPLY, fec), 594 NLMSG_DESC(ETHTOOL_MSG_FEC_NTF, fec), 595 NLMSG_DESC(ETHTOOL_MSG_MODULE_EEPROM_GET_REPLY, module_eeprom), 596 NLMSG_DESC(ETHTOOL_MSG_STATS_GET_REPLY, stats), 597 NLMSG_DESC(ETHTOOL_MSG_PHC_VCLOCKS_GET_REPLY, phc_vclocks), 598 NLMSG_DESC(ETHTOOL_MSG_MODULE_GET_REPLY, module), 599 NLMSG_DESC(ETHTOOL_MSG_MODULE_NTF, module), 600 NLMSG_DESC(ETHTOOL_MSG_PSE_GET_REPLY, pse), 601 NLMSG_DESC(ETHTOOL_MSG_RSS_GET_REPLY, rss), 602 NLMSG_DESC(ETHTOOL_MSG_PLCA_GET_CFG_REPLY, plca), 603 NLMSG_DESC(ETHTOOL_MSG_PLCA_GET_STATUS_REPLY, plca), 604 NLMSG_DESC(ETHTOOL_MSG_PLCA_NTF, plca), 605 NLMSG_DESC(ETHTOOL_MSG_MM_GET_REPLY, mm), 606 NLMSG_DESC(ETHTOOL_MSG_MM_NTF, mm), 607 NLMSG_DESC(ETHTOOL_MSG_MODULE_FW_FLASH_NTF, module_fw_flash), 608 }; 609 610 const unsigned int ethnl_kmsg_n_desc = ARRAY_SIZE(ethnl_kmsg_desc); 611