summaryrefslogtreecommitdiff
path: root/src/op_mode/lldp.py
diff options
context:
space:
mode:
authorAndrew Topp <andrewt@telekinetica.net>2024-06-09 02:18:45 +1000
committerAndrew Topp <andrewt@telekinetica.net>2024-06-11 21:53:28 +1000
commit83a51a045de5db99014f6886f5aca9b792200928 (patch)
treebe8ffe4191489cf8e7a58e3530587b639beca84d /src/op_mode/lldp.py
parentdd813e5b79d612106b0bc7a064f9633be5da9571 (diff)
downloadvyos-1x-83a51a045de5db99014f6886f5aca9b792200928.tar.gz
vyos-1x-83a51a045de5db99014f6886f5aca9b792200928.zip
T6045: Recreate show lldp detail views & improve remote port selection
If the remote device has explicitly sent the interface name as the portID, we should use that first as the interface name, before working through the previous priority order. I've brought back LLDP detail views directly calling lldpcli. This can be extended to render a template from op_mode/lldp.py, but lldpcli isn't bad at rendering readable info. Raw mode (including detailed raw) is still accessible for programmatic access.
Diffstat (limited to 'src/op_mode/lldp.py')
-rwxr-xr-xsrc/op_mode/lldp.py23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/op_mode/lldp.py b/src/op_mode/lldp.py
index 58cfce443..fac622b81 100755
--- a/src/op_mode/lldp.py
+++ b/src/op_mode/lldp.py
@@ -120,7 +120,12 @@ def _get_formatted_output(raw_data):
tmp.append('')
# Remote interface
- interface = jmespath.search('port.descr', values)
+ interface = None
+ if jmespath.search('port.id.type', values) == 'ifname':
+ # Remote peer has explicitly returned the interface name as the PortID
+ interface = jmespath.search('port.id.value', values)
+ if not interface:
+ interface = jmespath.search('port.descr', values)
if not interface:
interface = jmespath.search('port.id.value', values)
if not interface:
@@ -136,11 +141,17 @@ def _get_formatted_output(raw_data):
@_verify
def show_neighbors(raw: bool, interface: typing.Optional[str], detail: typing.Optional[bool]):
- lldp_data = _get_raw_data(interface=interface, detail=detail)
- if raw:
- return lldp_data
- else:
- return _get_formatted_output(lldp_data)
+ if raw or not detail:
+ lldp_data = _get_raw_data(interface=interface, detail=detail)
+ if raw:
+ return lldp_data
+ else:
+ return _get_formatted_output(lldp_data)
+ else: # non-raw, detail
+ tmp = 'lldpcli -f text show neighbors details'
+ if interface:
+ tmp += f' ports {interface}'
+ return cmd(tmp)
if __name__ == "__main__":
try: