From a12474c74a59af9a3f029d377e74de1ee386b559 Mon Sep 17 00:00:00 2001 From: gord_chen Date: Thu, 29 Apr 2021 07:24:03 +0000 Subject: [PATCH] Add to support the LLDP tlv without system capability lldp-syncd will show error message while receiving LLDP frame without system capability attribute. And cause the LLDP ENTRY is not be set to APP DB. Add to make daemon.py can handle this case --- src/lldp_syncd/daemon.py | 8 +++++++- tests/subproc_outputs/interface_only.json | 23 +++++++++++++++++++++++ tests/test_lldpSyncDaemon.py | 6 +++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/lldp_syncd/daemon.py b/src/lldp_syncd/daemon.py index 442b678..636393f 100644 --- a/src/lldp_syncd/daemon.py +++ b/src/lldp_syncd/daemon.py @@ -124,7 +124,13 @@ def get_sys_capability_list(self, if_attributes, if_name, chassis_id): if 'capability' in if_attributes['chassis']: capability_list = if_attributes['chassis']['capability'] else: - capability_list = list(if_attributes['chassis'].values())[0]['capability'] + for attribute in if_attributes['chassis'].values(): + if 'capability' in attribute: + capability_list = attribute['capability'] + break + else: + capability_list = [] + # {'enabled': ..., 'type': 'capability'} if isinstance(capability_list, dict): capability_list = [capability_list] diff --git a/tests/subproc_outputs/interface_only.json b/tests/subproc_outputs/interface_only.json index 14f0b5b..1516758 100644 --- a/tests/subproc_outputs/interface_only.json +++ b/tests/subproc_outputs/interface_only.json @@ -44,6 +44,29 @@ ] } }, + { + "Ethernet1": { + "via": "LLDP", + "rid": "8", + "age": "0 day, 00:00:01", + "chassis": { + "id": { + "type": "local", + "value": "55663150-3630-2543-4A30-323230424734" + }, + "descr": "I'm a little teapot.", + "mgmt-ip": "0.0.0.0" + }, + "port": { + "id": { + "type": "mac", + "value": "cc:12:33:44:55:66" + }, + "descr": "PCI-E Slot 3, Port 1", + "ttl": "100" + } + } + }, { "Ethernet100": { "rid": "1", diff --git a/tests/test_lldpSyncDaemon.py b/tests/test_lldpSyncDaemon.py index b811fd2..acbf282 100644 --- a/tests/test_lldpSyncDaemon.py +++ b/tests/test_lldpSyncDaemon.py @@ -135,4 +135,8 @@ 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 == 'Ethernet1': + self.assertEqual(capability_list, []) + else: + self.assertNotEqual(capability_list, []) +