Skip to content

Commit e8baa9e

Browse files
committed
[autoneg] add support for remote speed advertisement
Add support for remote speed advertisement, such that users could easily identify the connection issues when autoneg is enabled. HLD: sonic-net/SONiC#924 - What I did Add support for remote speed advertisement - How I did it Implementation is done according to the AutoNeg HLD Signed-off-by: Dante Su <dante.su@broadcom.com>
1 parent 65a5a6b commit e8baa9e

3 files changed

Lines changed: 37 additions & 16 deletions

File tree

scripts/intfutil

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ PORT_OPTICS_TYPE = "type"
4545
PORT_PFC_ASYM_STATUS = "pfc_asym"
4646
PORT_AUTONEG = 'autoneg'
4747
PORT_ADV_SPEEDS = 'adv_speeds'
48+
PORT_RMT_ADV_SPEEDS = 'rmt_adv_speeds'
4849
PORT_INTERFACE_TYPE = 'interface_type'
4950
PORT_ADV_INTERFACE_TYPES = 'adv_interface_types'
5051
PORT_TPID = "tpid"
@@ -149,6 +150,24 @@ def appl_db_port_status_get(appl_db, intf_name, status_type):
149150
status = ','.join(new_speed_list)
150151
return status
151152

153+
def state_db_port_status_get(db, intf_name, type):
154+
"""
155+
Get the port status
156+
"""
157+
full_table_id = PORT_STATE_TABLE_PREFIX + intf_name
158+
status = db.get(db.STATE_DB, full_table_id, type)
159+
if status in [None, ""]:
160+
return "N/A"
161+
if type == PORT_SPEED and status != "N/A":
162+
status = '{}G'.format(status[:-3])
163+
elif type in [PORT_ADV_SPEEDS, PORT_RMT_ADV_SPEEDS] and status not in ["N/A", "all"]:
164+
speed_list = status.split(',')
165+
new_speed_list = []
166+
for s in natsorted(speed_list):
167+
new_speed_list.append('{}G'.format(s[:-3]))
168+
status = ','.join(new_speed_list)
169+
return status
170+
152171
def port_oper_speed_get(db, intf_name):
153172
"""
154173
Get port oper speed
@@ -547,7 +566,7 @@ class IntfDescription(object):
547566

548567

549568
# ========================== interface-autoneg logic ==========================
550-
header_autoneg = ['Interface', 'Auto-Neg Mode', 'Speed', 'Adv Speeds', 'Type', 'Adv Types', 'Oper', 'Admin']
569+
header_autoneg = ['Interface', 'Auto-Neg Mode', 'Speed', 'Adv Speeds', 'Rmt Adv Speeds', 'Type', 'Adv Types', 'Oper', 'Admin']
551570

552571

553572
class IntfAutoNegStatus(object):
@@ -597,6 +616,7 @@ class IntfAutoNegStatus(object):
597616
autoneg_mode,
598617
port_oper_speed_get(self.db, key),
599618
appl_db_port_status_get(self.db, key, PORT_ADV_SPEEDS),
619+
state_db_port_status_get(self.db, key, PORT_RMT_ADV_SPEEDS),
600620
appl_db_port_status_get(self.db, key, PORT_INTERFACE_TYPE),
601621
appl_db_port_status_get(self.db, key, PORT_ADV_INTERFACE_TYPES),
602622
appl_db_port_status_get(self.db, key, PORT_OPER_STATUS),

tests/intfutil_test.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -63,26 +63,26 @@
6363
"""
6464

6565
show_interface_auto_neg_status_output = """\
66-
Interface Auto-Neg Mode Speed Adv Speeds Type Adv Types Oper Admin
67-
----------- --------------- ------- ------------ ------ ----------- ------ -------
68-
Ethernet0 enabled 25G 10G,50G CR4 CR4,CR2 down up
69-
Ethernet32 disabled 40G all N/A all up up
70-
Ethernet112 N/A 40G N/A N/A N/A up up
71-
Ethernet116 N/A 40G N/A N/A N/A up up
72-
Ethernet120 N/A 40G N/A N/A N/A up up
73-
Ethernet124 N/A 40G N/A N/A N/A up up
66+
Interface Auto-Neg Mode Speed Adv Speeds Rmt Adv Speeds Type Adv Types Oper Admin
67+
----------- --------------- ------- ------------ ---------------- ------ ----------- ------ -------
68+
Ethernet0 enabled 25G 10G,50G 40G CR4 CR4,CR2 down up
69+
Ethernet32 disabled 40G all N/A N/A all up up
70+
Ethernet112 N/A 40G N/A N/A N/A N/A up up
71+
Ethernet116 N/A 40G N/A N/A N/A N/A up up
72+
Ethernet120 N/A 40G N/A N/A N/A N/A up up
73+
Ethernet124 N/A 40G N/A N/A N/A N/A up up
7474
"""
7575

7676
show_interface_auto_neg_status_Ethernet0_output = """\
77-
Interface Auto-Neg Mode Speed Adv Speeds Type Adv Types Oper Admin
78-
----------- --------------- ------- ------------ ------ ----------- ------ -------
79-
Ethernet0 enabled 25G 10G,50G CR4 CR4,CR2 down up
77+
Interface Auto-Neg Mode Speed Adv Speeds Rmt Adv Speeds Type Adv Types Oper Admin
78+
----------- --------------- ------- ------------ ---------------- ------ ----------- ------ -------
79+
Ethernet0 enabled 25G 10G,50G 40G CR4 CR4,CR2 down up
8080
"""
8181

8282
show_interface_auto_neg_status_eth9_output = """\
83-
Interface Auto-Neg Mode Speed Adv Speeds Type Adv Types Oper Admin
84-
----------- --------------- ------- ------------ ------ ----------- ------ -------
85-
Ethernet32 disabled 40G all N/A all up up
83+
Interface Auto-Neg Mode Speed Adv Speeds Rmt Adv Speeds Type Adv Types Oper Admin
84+
----------- --------------- ------- ------------ ---------------- ------ ----------- ------ -------
85+
Ethernet32 disabled 40G all N/A N/A all up up
8686
"""
8787

8888

@@ -281,7 +281,7 @@ def test_show_interfaces_autoneg_status_Ethernet0(self):
281281
assert result.exit_code == 0
282282
assert result.output == show_interface_auto_neg_status_Ethernet0_output
283283

284-
def test_show_interfaces_autoneg_status_etp9_in_alias_mode(self):
284+
def test_show_interfaces_autoneg_status_eth9_in_alias_mode(self):
285285
os.environ["SONIC_CLI_IFACE_MODE"] = "alias"
286286
result = self.runner.invoke(show.cli.commands["interfaces"].commands["autoneg"].commands["status"], ["etp9"])
287287
os.environ["SONIC_CLI_IFACE_MODE"] = "default"

tests/mock_tables/state_db.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,7 @@
643643
"access": "False"
644644
},
645645
"PORT_TABLE|Ethernet0": {
646+
"rmt_adv_speeds" : "40000",
646647
"speed" : "100000",
647648
"supported_speeds": "10000,25000,40000,100000"
648649
},

0 commit comments

Comments
 (0)