summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-08-03 17:08:47 +0200
committerChristian Poessinger <christian@poessinger.com>2020-08-03 17:08:47 +0200
commitee45fcf5f5342d40b5dcd39429a4201c93a49b4c (patch)
tree4c8ed5228c087f4bdfeacf2aa5d954a63e544e36
parent3e657ba2acf68c9adc1426cc1fcfeefb848cc8d2 (diff)
downloadvyos-1x-ee45fcf5f5342d40b5dcd39429a4201c93a49b4c.tar.gz
vyos-1x-ee45fcf5f5342d40b5dcd39429a4201c93a49b4c.zip
lldp: op-mode: T2323: "show lldp neighbors detail" only works when service runs
The problem exists when LLDP is not configured but one wants to run the detail command. Running "show lldp neighbors" is not possible when LLDP is not running. This case is already handled for "show lldp neighbors" and has been extended for "show lldp neighbors detail".
-rw-r--r--op-mode-definitions/lldp.xml2
-rwxr-xr-xsrc/op_mode/lldp_op.py21
2 files changed, 13 insertions, 10 deletions
diff --git a/op-mode-definitions/lldp.xml b/op-mode-definitions/lldp.xml
index 105bfe237..e954fb8cf 100644
--- a/op-mode-definitions/lldp.xml
+++ b/op-mode-definitions/lldp.xml
@@ -17,7 +17,7 @@
<properties>
<help>Show LLDP neighbor details</help>
</properties>
- <command>/usr/sbin/lldpctl -f plain</command>
+ <command>${vyos_op_scripts_dir}/lldp_op.py --detail</command>
</node>
<tagNode name="interface">
<properties>
diff --git a/src/op_mode/lldp_op.py b/src/op_mode/lldp_op.py
index 5d48e3210..0df6749aa 100755
--- a/src/op_mode/lldp_op.py
+++ b/src/op_mode/lldp_op.py
@@ -14,19 +14,19 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
import argparse
import jinja2
-from xml.dom import minidom
from sys import exit
from tabulate import tabulate
+from xml.dom import minidom
-from vyos.util import popen
+from vyos.util import cmd
from vyos.config import Config
parser = argparse.ArgumentParser()
parser.add_argument("-a", "--all", action="store_true", help="Show LLDP neighbors on all interfaces")
+parser.add_argument("-d", "--detail", action="store_true", help="Show detailes LLDP neighbor information on all interfaces")
parser.add_argument("-i", "--interface", action="store", help="Show LLDP neighbors on specific interface")
# Please be careful if you edit the template.
@@ -40,10 +40,8 @@ Device ID Local Proto Cap Platform Port ID
{% endfor -%}
"""
-def _get_neighbors():
- command = '/usr/sbin/lldpcli -f xml show neighbors'
- out,_ = popen(command)
- return out
+def get_neighbors():
+ return cmd('/usr/sbin/lldpcli -f xml show neighbors')
def extract_neighbor(neighbor):
"""
@@ -148,12 +146,17 @@ if __name__ == '__main__':
exit(0)
if args.all:
- neighbors = minidom.parseString(_get_neighbors())
+ neighbors = minidom.parseString(get_neighbors())
for neighbor in neighbors.getElementsByTagName('interface'):
tmp['neighbors'].append( extract_neighbor(neighbor) )
+ elif args.detail:
+ out = cmd('/usr/sbin/lldpctl -f plain')
+ print(out)
+ exit(0)
+
elif args.interface:
- neighbors = minidom.parseString(_get_neighbors())
+ neighbors = minidom.parseString(get_neighbors())
for neighbor in neighbors.getElementsByTagName('interface'):
# check if neighbor appeared on proper interface
if neighbor.getAttribute('name') == args.interface: