summaryrefslogtreecommitdiff
path: root/src/op_mode
diff options
context:
space:
mode:
authorYuya Kusakabe <yuya.kusakabe@gmail.com>2018-05-16 21:35:22 +0900
committerYuya Kusakabe <yuya.kusakabe@gmail.com>2018-05-16 21:35:22 +0900
commitbe6f809581ccbcd6411713128a63711eaa2ce6b7 (patch)
treec62377a36c274d878224dc102562fdfbc10e17be /src/op_mode
parent99a3049c67005bf5e0ba45db264d56d3b57cb792 (diff)
downloadvyos-1x-be6f809581ccbcd6411713128a63711eaa2ce6b7.tar.gz
vyos-1x-be6f809581ccbcd6411713128a63711eaa2ce6b7.zip
Use '_' instead of '-' for python scripts for test
Diffstat (limited to 'src/op_mode')
-rwxr-xr-xsrc/op_mode/vyos_dns_forwarding_statistics.py24
-rwxr-xr-xsrc/op_mode/vyos_list_dumpable_interfaces.py14
-rwxr-xr-xsrc/op_mode/vyos_list_interfaces.py8
-rwxr-xr-xsrc/op_mode/vyos_restart_dns_forwarding.sh8
-rwxr-xr-xsrc/op_mode/vyos_show_version.py123
5 files changed, 177 insertions, 0 deletions
diff --git a/src/op_mode/vyos_dns_forwarding_statistics.py b/src/op_mode/vyos_dns_forwarding_statistics.py
new file mode 100755
index 000000000..3d1e30aee
--- /dev/null
+++ b/src/op_mode/vyos_dns_forwarding_statistics.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+
+import subprocess
+import jinja2
+
+PDNS_CMD='/usr/bin/rec_control'
+
+OUT_TMPL_SRC = """
+DNS forwarding statistics:
+
+Cache entries: {{ cache_entries -}}
+Cache size: {{ cache_size }} kbytes
+
+"""
+
+
+if __name__ == '__main__':
+ data = {}
+
+ data['cache_entries'] = subprocess.check_output([PDNS_CMD, 'get cache-entries']).decode()
+ data['cache_size'] = "{0:.2f}".format( int(subprocess.check_output([PDNS_CMD, 'get cache-bytes']).decode()) / 1024 )
+
+ tmpl = jinja2.Template(OUT_TMPL_SRC)
+ print(tmpl.render(data))
diff --git a/src/op_mode/vyos_list_dumpable_interfaces.py b/src/op_mode/vyos_list_dumpable_interfaces.py
new file mode 100755
index 000000000..53ee89633
--- /dev/null
+++ b/src/op_mode/vyos_list_dumpable_interfaces.py
@@ -0,0 +1,14 @@
+#!/usr/bin/env python3
+
+# Extract the list of interfaces available for traffic dumps from tcpdump -D
+
+import re
+import subprocess
+
+if __name__ == '__main__':
+ out = subprocess.check_output(['/usr/sbin/tcpdump', '-D']).decode().strip()
+ out = out.split("\n")
+
+ intfs = " ".join(map(lambda s: re.search(r'\d+\.(\S+)\s', s).group(1), out))
+
+ print(intfs)
diff --git a/src/op_mode/vyos_list_interfaces.py b/src/op_mode/vyos_list_interfaces.py
new file mode 100755
index 000000000..59c9dffad
--- /dev/null
+++ b/src/op_mode/vyos_list_interfaces.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python3
+
+import netifaces
+
+if __name__ == '__main__':
+ interfaces = netifaces.interfaces()
+
+ print(" ".join(interfaces))
diff --git a/src/op_mode/vyos_restart_dns_forwarding.sh b/src/op_mode/vyos_restart_dns_forwarding.sh
new file mode 100755
index 000000000..12106fcc1
--- /dev/null
+++ b/src/op_mode/vyos_restart_dns_forwarding.sh
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+if cli-shell-api exists service dns forwarding; then
+ echo "Restarting the DNS forwarding service"
+ systemctl restart pdns-recursor
+else
+ echo "DNS forwarding is not configured"
+fi
diff --git a/src/op_mode/vyos_show_version.py b/src/op_mode/vyos_show_version.py
new file mode 100755
index 000000000..ce3b3b54f
--- /dev/null
+++ b/src/op_mode/vyos_show_version.py
@@ -0,0 +1,123 @@
+#!/usr/bin/env python3
+#
+# Copyright (C) 2016 VyOS maintainers and contributors
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 or later as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# File: vyos-show-version
+# Purpose:
+# Displays image version and system information.
+# Used by the "run show version" command.
+
+
+import os
+import sys
+import subprocess
+import argparse
+import json
+
+import pystache
+
+import vyos.version
+import vyos.limericks
+
+
+parser = argparse.ArgumentParser()
+parser.add_argument("-a", "--all", action="store_true", help="Include individual package versions")
+parser.add_argument("-f", "--funny", action="store_true", help="Add something funny to the output")
+parser.add_argument("-j", "--json", action="store_true", help="Produce JSON output")
+
+def read_file(name):
+ try:
+ with open (name, "r") as f:
+ data = f.read()
+ return data.strip()
+ except:
+ # This works since we only read /sys/class/* stuff
+ # with this function
+ return "Unknown"
+
+version_output_tmpl = """
+Version: VyOS {{version}}
+Built by: {{built_by}}
+Built on: {{built_on}}
+Build ID: {{build_id}}
+
+Architecture: {{system_arch}}
+Boot via: {{boot_via}}
+System type: {{system_type}}
+
+Hardware vendor: {{hardware_vendor}}
+Hardware model: {{hardware_model}}
+Hardware S/N: {{hardware_serial}}
+Hardware UUID: {{hardware_uuid}}
+
+Copyright: VyOS maintainers and contributors
+
+"""
+
+if __name__ == '__main__':
+ args = parser.parse_args()
+
+ version_data = vyos.version.get_version_data()
+
+ # Get system architecture (well, kernel architecture rather)
+ version_data['system_arch'] = subprocess.check_output('uname -m', shell=True).decode().strip()
+
+
+ # Get hypervisor name, if any
+ system_type = "bare metal"
+ try:
+ hypervisor = subprocess.check_output('hvinfo 2>/dev/null', shell=True).decode().strip()
+ system_type = "{0} guest".format(hypervisor)
+ except subprocess.CalledProcessError:
+ # hvinfo returns 1 if it cannot detect any hypervisor
+ pass
+ version_data['system_type'] = system_type
+
+
+ # Get boot type, it can be livecd, installed image, or, possible, a system installed
+ # via legacy "install system" mechanism
+ # In installed images, the squashfs image file is named after its image version,
+ # while on livecd it's just "filesystem.squashfs", that's how we tell a livecd boot
+ # from an installed image
+ boot_via = "installed image"
+ if subprocess.call(""" grep -e '^overlay.*/filesystem.squashfs' /proc/mounts >/dev/null""", shell=True) == 0:
+ boot_via = "livecd"
+ elif subprocess.call(""" grep '^overlay /' /proc/mounts >/dev/null """, shell=True) != 0:
+ boot_via = "legacy non-image installation"
+ version_data['boot_via'] = boot_via
+
+
+ # Get hardware details from DMI
+ version_data['hardware_vendor'] = read_file('/sys/class/dmi/id/sys_vendor')
+ version_data['hardware_model'] = read_file('/sys/class/dmi/id/product_name')
+
+ # These two assume script is run as root, normal users can't access those files
+ version_data['hardware_serial'] = read_file('/sys/class/dmi/id/subsystem/id/product_serial')
+ version_data['hardware_uuid'] = read_file('/sys/class/dmi/id/subsystem/id/product_uuid')
+
+
+ if args.json:
+ print(json.dumps(version_data))
+ sys.exit(0)
+ else:
+ output = pystache.render(version_output_tmpl, version_data).strip()
+ print(output)
+
+ if args.all:
+ print("Package versions:")
+ os.system("dpkg -l")
+
+ if args.funny:
+ print(vyos.limericks.get_random())