From 9131b46e13ceb3d5035477b5cb8efda947e9041b Mon Sep 17 00:00:00 2001 From: Th1592-aster Date: Fri, 20 Dec 2024 16:51:29 +0800 Subject: [PATCH] Fix issue of lldp_syncd crashes and cause docker lldp restarts lldp-syncd throws exception from get_sys_capability_list The get_sys_capability_list() shall consider both the system name and system capabilities of remote device is null case. --- src/lldp_syncd/daemon.py | 2 +- tests/subproc_outputs/interface_only.json | 20 ++++++++++++++++++++ tests/test_lldpSyncDaemon.py | 5 ++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/lldp_syncd/daemon.py b/src/lldp_syncd/daemon.py index dd172f7..c0f49eb 100644 --- a/src/lldp_syncd/daemon.py +++ b/src/lldp_syncd/daemon.py @@ -132,7 +132,7 @@ def get_sys_capability_list(self, if_attributes, if_name, chassis_id): # {'enabled': ..., 'type': 'capability'} if isinstance(capability_list, dict): capability_list = [capability_list] - except KeyError: + except : logger.info("Failed to get system capabilities on {} ({})".format(if_name, chassis_id)) return [] return capability_list diff --git a/tests/subproc_outputs/interface_only.json b/tests/subproc_outputs/interface_only.json index 14f0b5b..44e9f90 100644 --- a/tests/subproc_outputs/interface_only.json +++ b/tests/subproc_outputs/interface_only.json @@ -44,6 +44,26 @@ ] } }, + { + "Ethernet47": { + "via": "LLDP", + "rid": "80", + "age": "0 day, 00:00:05", + "chassis": { + "id": { + "type": "mac", + "value": "e4:f4:c6:da:8d:d0" + } + }, + "port": { + "id": { + "type": "ifname", + "value": "g5" + }, + "ttl": "120" + } + } + }, { "Ethernet100": { "rid": "1", diff --git a/tests/test_lldpSyncDaemon.py b/tests/test_lldpSyncDaemon.py index dec48ec..0c03fac 100644 --- a/tests/test_lldpSyncDaemon.py +++ b/tests/test_lldpSyncDaemon.py @@ -137,7 +137,10 @@ def test_remote_sys_capability_list(self): for interface in interface_list: (if_name, if_attributes), = interface.items() capability_list = self.daemon.get_sys_capability_list(if_attributes, if_name, "fake_chassis_id") - self.assertNotEqual(capability_list, []) + if if_name == 'Ethernet47': + self.assertEqual(capability_list, []) + else: + self.assertNotEqual(capability_list, []) def test_changed_deleted_interface(self): parsed_update = self.daemon.parse_update(self._json)