Skip to content

Commit 07542cb

Browse files
authored
[pmon][xcvrd]xcvrd process show backtrace on the internal port. (#233)
port_mapping class returns the port_mapping_data info incldue internal ports. Internal port doesn't have transceiver. It should not be in the list for the xcvrd. Signed-off-by: mlok <[email protected]>
1 parent 3e432e7 commit 07542cb

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

sonic-xcvrd/tests/test_xcvrd.py

+7-2
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,8 @@ def test_handle_port_config_change(self, mock_select, mock_sub_table):
341341
@patch('swsscommon.swsscommon.Table')
342342
def test_get_port_mapping(self, mock_swsscommon_table):
343343
mock_table = MagicMock()
344-
mock_table.getKeys = MagicMock(return_value=['Ethernet0', 'Ethernet4'])
345-
mock_table.get = MagicMock(side_effect=[(True, (('index', 1), )), (True, (('index', 2), ))])
344+
mock_table.getKeys = MagicMock(return_value=['Ethernet0', 'Ethernet4', 'Ethernet-IB0'])
345+
mock_table.get = MagicMock(side_effect=[(True, (('index', 1), )), (True, (('index', 2), )), (True, (('index', 3), ))])
346346
mock_swsscommon_table.return_value = mock_table
347347
port_mapping = get_port_mapping()
348348
assert port_mapping.logical_port_list.count('Ethernet0')
@@ -355,6 +355,11 @@ def test_get_port_mapping(self, mock_swsscommon_table):
355355
assert port_mapping.get_physical_to_logical(2) == ['Ethernet4']
356356
assert port_mapping.get_logical_to_physical('Ethernet4') == [2]
357357

358+
assert port_mapping.logical_port_list.count('Ethernet-IB0') == 0
359+
assert port_mapping.get_asic_id_for_logical_port('Ethernet-IB0') == None
360+
assert port_mapping.get_physical_to_logical(3) == None
361+
assert port_mapping.get_logical_to_physical('Ethernet-IB0') == None
362+
358363
@patch('swsscommon.swsscommon.Select.addSelectable', MagicMock())
359364
@patch('swsscommon.swsscommon.SubscriberStateTable')
360365
@patch('swsscommon.swsscommon.Select.select')

sonic-xcvrd/xcvrd/xcvrd_utilities/port_mapping.py

+12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from sonic_py_common import daemon_base
22
from sonic_py_common import multi_asic
3+
from sonic_py_common.interface import backplane_prefix, inband_prefix, recirc_prefix
34
from swsscommon import swsscommon
45

56
SELECT_TIMEOUT_MSECS = 1000
@@ -88,6 +89,11 @@ def logical_port_name_to_physical_port_list(self, port_name):
8889
else:
8990
return None
9091

92+
def validate_port(port):
93+
if port.startswith((backplane_prefix(), inband_prefix(), recirc_prefix())):
94+
return False
95+
return True
96+
9197
def subscribe_port_config_change():
9298
sel = swsscommon.Select()
9399
asic_context = {}
@@ -138,6 +144,8 @@ def handle_port_update_event(sel, asic_context, stop_event, logger, port_change_
138144
(key, op, fvp) = port_tbl.pop()
139145
if not key:
140146
break
147+
if not validate_port(key):
148+
continue
141149
fvp = dict(fvp) if fvp is not None else {}
142150
if 'index' not in fvp:
143151
fvp['index'] = '-1'
@@ -177,6 +185,8 @@ def read_port_config_change(asic_context, port_mapping, logger, port_change_even
177185
(key, op, fvp) = port_tbl.pop()
178186
if not key:
179187
break
188+
if not validate_port(key):
189+
continue
180190
if op == swsscommon.SET_COMMAND:
181191
fvp = dict(fvp)
182192
if 'index' not in fvp:
@@ -218,6 +228,8 @@ def get_port_mapping():
218228
config_db = daemon_base.db_connect("CONFIG_DB", namespace=namespace)
219229
port_table = swsscommon.Table(config_db, swsscommon.CFG_PORT_TABLE_NAME)
220230
for key in port_table.getKeys():
231+
if not validate_port(key):
232+
continue
221233
_, port_config = port_table.get(key)
222234
port_config_dict = dict(port_config)
223235
port_change_event = PortChangeEvent(key, port_config_dict['index'], asic_id, PortChangeEvent.PORT_ADD)

0 commit comments

Comments
 (0)