shared/ethtool-util: autogenerate table of link mode names

We updated this table manually, but the kernel adds new modes periodically
and we forget to do that. So let that happen automatically whenever we import
new kernel headers.

C.f. 72dda93acb.

Effectively, this adds:
        [ETHTOOL_LINK_MODE_10baseT1L_Full_BIT]             = "10baset1l-full",
        [ETHTOOL_LINK_MODE_800000baseCR8_Full_BIT]         = "800000basecr8-full",
        [ETHTOOL_LINK_MODE_800000baseKR8_Full_BIT]         = "800000basekr8-full",
        [ETHTOOL_LINK_MODE_800000baseDR8_Full_BIT]         = "800000basedr8-full",
        [ETHTOOL_LINK_MODE_800000baseDR8_2_Full_BIT]       = "800000basedr8-2-full",
        [ETHTOOL_LINK_MODE_800000baseSR8_Full_BIT]         = "800000basesr8-full",
        [ETHTOOL_LINK_MODE_800000baseVR8_Full_BIT]         = "800000basevr8-full",

N_ADVERTISE needed to be increased because we need more bits.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2023-05-30 12:15:28 +02:00
parent e30b4c1357
commit 6049ddcca2
4 changed files with 44 additions and 93 deletions

View file

@ -0,0 +1,33 @@
#!/usr/bin/env python3
# SPDX-License-Identifier: LGPL-2.1-or-later
import re
import sys
OVERRIDES = {
'autoneg' : 'autonegotiation',
}
count = 0
f = open(sys.argv[1])
for line in f:
if line.startswith('enum ethtool_link_mode_bit_indices {'):
break
for line in f:
if line.startswith('}'):
break
# ETHTOOL_LINK_MODE_10baseT_Half_BIT = 0,
m = re.match(r'^\s*(ETHTOOL_LINK_MODE_(.*)_BIT)\s*=\s*(\d+),', line)
if not m:
continue
enum, name, value = m.groups()
name = name.lower().replace('_', '-')
name = OVERRIDES.get(name, name)
enum = f'[{enum}]'
print(f' {enum:50} = "{name}",')
count += 1
assert count >= 99

View file

@ -151,98 +151,7 @@ static const char* const netdev_feature_table[_NET_DEV_FEAT_MAX] = {
};
static const char* const ethtool_link_mode_bit_table[] = {
[ETHTOOL_LINK_MODE_10baseT_Half_BIT] = "10baset-half",
[ETHTOOL_LINK_MODE_10baseT_Full_BIT] = "10baset-full",
[ETHTOOL_LINK_MODE_100baseT_Half_BIT] = "100baset-half",
[ETHTOOL_LINK_MODE_100baseT_Full_BIT] = "100baset-full",
[ETHTOOL_LINK_MODE_1000baseT_Half_BIT] = "1000baset-half",
[ETHTOOL_LINK_MODE_1000baseT_Full_BIT] = "1000baset-full",
[ETHTOOL_LINK_MODE_Autoneg_BIT] = "autonegotiation",
[ETHTOOL_LINK_MODE_TP_BIT] = "tp",
[ETHTOOL_LINK_MODE_AUI_BIT] = "aui",
[ETHTOOL_LINK_MODE_MII_BIT] = "mii",
[ETHTOOL_LINK_MODE_FIBRE_BIT] = "fibre",
[ETHTOOL_LINK_MODE_BNC_BIT] = "bnc",
[ETHTOOL_LINK_MODE_10000baseT_Full_BIT] = "10000baset-full",
[ETHTOOL_LINK_MODE_Pause_BIT] = "pause",
[ETHTOOL_LINK_MODE_Asym_Pause_BIT] = "asym-pause",
[ETHTOOL_LINK_MODE_2500baseX_Full_BIT] = "2500basex-full",
[ETHTOOL_LINK_MODE_Backplane_BIT] = "backplane",
[ETHTOOL_LINK_MODE_1000baseKX_Full_BIT] = "1000basekx-full",
[ETHTOOL_LINK_MODE_10000baseKX4_Full_BIT] = "10000basekx4-full",
[ETHTOOL_LINK_MODE_10000baseKR_Full_BIT] = "10000basekr-full",
[ETHTOOL_LINK_MODE_10000baseR_FEC_BIT] = "10000baser-fec",
[ETHTOOL_LINK_MODE_20000baseMLD2_Full_BIT] = "20000basemld2-full",
[ETHTOOL_LINK_MODE_20000baseKR2_Full_BIT] = "20000basekr2-full",
[ETHTOOL_LINK_MODE_40000baseKR4_Full_BIT] = "40000basekr4-full",
[ETHTOOL_LINK_MODE_40000baseCR4_Full_BIT] = "40000basecr4-full",
[ETHTOOL_LINK_MODE_40000baseSR4_Full_BIT] = "40000basesr4-full",
[ETHTOOL_LINK_MODE_40000baseLR4_Full_BIT] = "40000baselr4-full",
[ETHTOOL_LINK_MODE_56000baseKR4_Full_BIT] = "56000basekr4-full",
[ETHTOOL_LINK_MODE_56000baseCR4_Full_BIT] = "56000basecr4-full",
[ETHTOOL_LINK_MODE_56000baseSR4_Full_BIT] = "56000basesr4-full",
[ETHTOOL_LINK_MODE_56000baseLR4_Full_BIT] = "56000baselr4-full",
[ETHTOOL_LINK_MODE_25000baseCR_Full_BIT] = "25000basecr-full",
[ETHTOOL_LINK_MODE_25000baseKR_Full_BIT] = "25000basekr-full",
[ETHTOOL_LINK_MODE_25000baseSR_Full_BIT] = "25000basesr-full",
[ETHTOOL_LINK_MODE_50000baseCR2_Full_BIT] = "50000basecr2-full",
[ETHTOOL_LINK_MODE_50000baseKR2_Full_BIT] = "50000basekr2-full",
[ETHTOOL_LINK_MODE_100000baseKR4_Full_BIT] = "100000basekr4-full",
[ETHTOOL_LINK_MODE_100000baseSR4_Full_BIT] = "100000basesr4-full",
[ETHTOOL_LINK_MODE_100000baseCR4_Full_BIT] = "100000basecr4-full",
[ETHTOOL_LINK_MODE_100000baseLR4_ER4_Full_BIT] = "100000baselr4-er4-full",
[ETHTOOL_LINK_MODE_50000baseSR2_Full_BIT] = "50000basesr2-full",
[ETHTOOL_LINK_MODE_1000baseX_Full_BIT] = "1000basex-full",
[ETHTOOL_LINK_MODE_10000baseCR_Full_BIT] = "10000basecr-full",
[ETHTOOL_LINK_MODE_10000baseSR_Full_BIT] = "10000basesr-full",
[ETHTOOL_LINK_MODE_10000baseLR_Full_BIT] = "10000baselr-full",
[ETHTOOL_LINK_MODE_10000baseLRM_Full_BIT] = "10000baselrm-full",
[ETHTOOL_LINK_MODE_10000baseER_Full_BIT] = "10000baseer-full",
[ETHTOOL_LINK_MODE_2500baseT_Full_BIT] = "2500baset-full",
[ETHTOOL_LINK_MODE_5000baseT_Full_BIT] = "5000baset-full",
[ETHTOOL_LINK_MODE_FEC_NONE_BIT] = "fec-none",
[ETHTOOL_LINK_MODE_FEC_RS_BIT] = "fec-rs",
[ETHTOOL_LINK_MODE_FEC_BASER_BIT] = "fec-baser",
[ETHTOOL_LINK_MODE_50000baseKR_Full_BIT] = "50000basekr-full",
[ETHTOOL_LINK_MODE_50000baseSR_Full_BIT] = "50000basesr-full",
[ETHTOOL_LINK_MODE_50000baseCR_Full_BIT] = "50000basecr-full",
[ETHTOOL_LINK_MODE_50000baseLR_ER_FR_Full_BIT] = "50000baselr-er-fr-full",
[ETHTOOL_LINK_MODE_50000baseDR_Full_BIT] = "50000basedr-full",
[ETHTOOL_LINK_MODE_100000baseKR2_Full_BIT] = "100000basekr2-full",
[ETHTOOL_LINK_MODE_100000baseSR2_Full_BIT] = "100000basesr2-full",
[ETHTOOL_LINK_MODE_100000baseCR2_Full_BIT] = "100000basecr2-full",
[ETHTOOL_LINK_MODE_100000baseLR2_ER2_FR2_Full_BIT] = "100000baselr2-er2-fr2-full",
[ETHTOOL_LINK_MODE_100000baseDR2_Full_BIT] = "100000basedr2-full",
[ETHTOOL_LINK_MODE_200000baseKR4_Full_BIT] = "200000basekr4-full",
[ETHTOOL_LINK_MODE_200000baseSR4_Full_BIT] = "200000basesr4-full",
[ETHTOOL_LINK_MODE_200000baseLR4_ER4_FR4_Full_BIT] = "200000baselr4-er4-fr4-full",
[ETHTOOL_LINK_MODE_200000baseDR4_Full_BIT] = "200000basedr4-full",
[ETHTOOL_LINK_MODE_200000baseCR4_Full_BIT] = "200000basecr4-full",
[ETHTOOL_LINK_MODE_100baseT1_Full_BIT] = "100baset1-full",
[ETHTOOL_LINK_MODE_1000baseT1_Full_BIT] = "1000baset1-full",
[ETHTOOL_LINK_MODE_400000baseKR8_Full_BIT] = "400000basekr8-full",
[ETHTOOL_LINK_MODE_400000baseSR8_Full_BIT] = "400000basesr8-full",
[ETHTOOL_LINK_MODE_400000baseLR8_ER8_FR8_Full_BIT] = "400000baselr8-er8-fr8-full",
[ETHTOOL_LINK_MODE_400000baseDR8_Full_BIT] = "400000basedr8-full",
[ETHTOOL_LINK_MODE_400000baseCR8_Full_BIT] = "400000basecr8-full",
[ETHTOOL_LINK_MODE_FEC_LLRS_BIT] = "fec-llrs",
[ETHTOOL_LINK_MODE_100000baseKR_Full_BIT] = "100000basekr-full",
[ETHTOOL_LINK_MODE_100000baseSR_Full_BIT] = "100000basesr-full",
[ETHTOOL_LINK_MODE_100000baseLR_ER_FR_Full_BIT] = "100000baselr-er-fr-full",
[ETHTOOL_LINK_MODE_100000baseCR_Full_BIT] = "100000basecr-full",
[ETHTOOL_LINK_MODE_100000baseDR_Full_BIT] = "100000basedr-full",
[ETHTOOL_LINK_MODE_200000baseKR2_Full_BIT] = "200000basekr2-full",
[ETHTOOL_LINK_MODE_200000baseSR2_Full_BIT] = "200000basesr2-full",
[ETHTOOL_LINK_MODE_200000baseLR2_ER2_FR2_Full_BIT] = "200000baselr2-er2-fr2-full",
[ETHTOOL_LINK_MODE_200000baseDR2_Full_BIT] = "200000basedr2-full",
[ETHTOOL_LINK_MODE_200000baseCR2_Full_BIT] = "200000basecr2-full",
[ETHTOOL_LINK_MODE_400000baseKR4_Full_BIT] = "400000basekr4-full",
[ETHTOOL_LINK_MODE_400000baseSR4_Full_BIT] = "400000basesr4-full",
[ETHTOOL_LINK_MODE_400000baseLR4_ER4_FR4_Full_BIT] = "400000baselr4-er4-fr4-full",
[ETHTOOL_LINK_MODE_400000baseDR4_Full_BIT] = "400000basedr4-full",
[ETHTOOL_LINK_MODE_400000baseCR4_Full_BIT] = "400000basecr4-full",
[ETHTOOL_LINK_MODE_100baseFX_Half_BIT] = "100basefx-half",
[ETHTOOL_LINK_MODE_100baseFX_Full_BIT] = "100basefx-full",
# include "ethtool-link-mode.h"
};
/* Make sure the array is large enough to fit all bits */
assert_cc((ELEMENTSOF(ethtool_link_mode_bit_table)-1) / 32 < N_ADVERTISE);

View file

@ -8,7 +8,7 @@
#include "conf-parser.h"
#include "ether-addr-util.h"
#define N_ADVERTISE 3
#define N_ADVERTISE 4
/* we can't use DUPLEX_ prefix, as it
* clashes with <linux/ethtool.h> */

View file

@ -270,6 +270,15 @@ target2 = custom_target(
shared_generated_gperf_headers = [target1, target2]
shared_sources += shared_generated_gperf_headers
fname = 'ethtool-link-mode.h'
ethtool_link_mode_h = custom_target(
fname,
input : ['ethtool-link-mode.py', 'linux/ethtool.h'],
output : fname,
command : [python, '@INPUT0@', '@INPUT1@'],
capture : true)
shared_sources += ethtool_link_mode_h
libshared_name = 'systemd-shared-@0@'.format(shared_lib_tag)
libshared_deps = [threads,