diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-05-23 20:19:13 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2020-05-23 20:19:13 +0200 |
commit | 8f4e95870d131f0230d20e1751c0ec6f3de6e6bd (patch) | |
tree | 4b079e58bff607e8312435b1cc9b8d171d4072e6 | |
parent | ea13b23b1844d2381f2320a51be8369247313dba (diff) | |
download | vyatta-op-8f4e95870d131f0230d20e1751c0ec6f3de6e6bd.tar.gz vyatta-op-8f4e95870d131f0230d20e1751c0ec6f3de6e6bd.zip |
ping: T2457: migrate script to vyos-1x
-rw-r--r-- | Makefile.am | 1 | ||||
-rwxr-xr-x | scripts/ping | 224 | ||||
-rw-r--r-- | templates/ping/node.tag/node.def | 2 | ||||
-rw-r--r-- | templates/ping/node.tag/node.tag/node.def | 2 |
4 files changed, 2 insertions, 227 deletions
diff --git a/Makefile.am b/Makefile.am index dc204fe..3e65dd8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -31,7 +31,6 @@ bin_SCRIPTS += scripts/vyatta-remote-copy.pl bin_SCRIPTS += scripts/vyatta-show-current-user bin_SCRIPTS += scripts/tech-support-archive bin_SCRIPTS += scripts/vyatta-op-cmd-wrapper -bin_SCRIPTS += scripts/ping bin_SCRIPTS += scripts/vyatta-monitor bin_SCRIPTS += scripts/vyatta-monitor-list bin_SCRIPTS += scripts/vyatta-monitor-cleanup diff --git a/scripts/ping b/scripts/ping deleted file mode 100755 index f3b3ee9..0000000 --- a/scripts/ping +++ /dev/null @@ -1,224 +0,0 @@ -#! /usr/bin/env python3 - -# Copyright (C) 2020 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/>. - -import os -import sys -import socket -import ipaddress - -options = { - 'audible': { - 'ping': '{command} -a', - 'type': 'noarg', - 'help': 'Make a noise on ping' - }, - 'adaptive': { - 'ping': '{command} -A', - 'type': 'noarg', - 'help': 'Adativly set interpacket interval' - }, - 'allow-broadcast': { - 'ping': '{command} -b', - 'type': 'noarg', - 'help': 'Ping broadcast address' - }, - 'bypass-route': { - 'ping': '{command} -r', - 'type': 'noarg', - 'help': 'Bypass normal routing tables' - }, - 'count': { - 'ping': '{command} -c {value}', - 'type': '<requests>', - 'help': 'Number of requests to send' - }, - 'deadline': { - 'ping': '{command} -w {value}', - 'type': '<seconds>', - 'help': 'Number of seconds before ping exits' - }, - 'flood': { - 'ping': 'sudo {command} -f', - 'type': 'noarg', - 'help': 'Send 100 requests per second' - }, - 'interface': { - 'ping': '{command} -I {value}', - 'type': '<interface> <X.X.X.X> <h:h:h:h:h:h:h:h>', - 'help': 'Interface to use as source for ping' - }, - 'interval': { - 'ping': '{command} -i {value}', - 'type': '<seconds>', - 'help': 'Number of seconds to wait between requests' - }, - 'mark': { - 'ping': '{command} -m {value}', - 'type': '<fwmark>', - 'help': 'Mark request for special processing' - }, - 'numeric': { - 'ping': '{command} -n', - 'type': 'noarg', - 'help': 'Do not resolve DNS names' - }, - 'no-loopback': { - 'ping': '{command} -L', - 'type': 'noarg', - 'help': 'Supress loopback of multicast pings' - }, - 'pattern': { - 'ping': '{command} -p {value}', - 'type': '<pattern>', - 'help': 'Pattern to fill out the packet' - }, - 'timestamp': { - 'ping': '{command} -D', - 'type': 'noarg', - 'help': 'Print timestamp of output' - }, - 'tos': { - 'ping': '{command} -Q {value}', - 'type': '<tos>', - 'help': 'Mark packets with specified TOS' - }, - 'quiet': { - 'ping': '{command} -q', - 'type': 'noarg', - 'help': 'Only print summary lines' - }, - 'record-route': { - 'ping': '{command} -R', - 'type': 'noarg', - 'help': 'Record route the packet takes' - }, - 'size': { - 'ping': '{command} -s {value}', - 'type': '<bytes>', - 'help': 'Number of bytes to send' - }, - 'ttl': { - 'ping': '{command} -t {value}', - 'type': '<ttl>', - 'help': 'Maximum packet lifetime' - }, - 'vrf': { - 'ping': 'sudo ip vrf exec {value} {command}', - 'type': '<vrf>', - 'help': 'Use specified VRF table' - }, - 'verbose': { - 'ping': '{command} -v', - 'type': 'noarg', - 'help': 'Verbose output'} -} - -ping = { - 4: '/bin/ping', - 6: '/bin/ping6', -} - - -class List (list): - def first (self): - return self.pop(0) if self else '' - - def last(self): - return self.pop() if self else '' - - def prepend(self,value): - self.insert(0,value) - - -def expension_failure(option, completions): - reason = 'Ambiguous' if completions else 'Invalid' - sys.stderr.write('\n\n {} command: {} [{}]\n\n'.format(reason,' '.join(sys.argv), option)) - if completions: - sys.stderr.write(' Possible completions:\n ') - sys.stderr.write('\n '.join(completions)) - sys.stderr.write('\n') - sys.stdout.write('<nocomps>') - sys.exit(1) - - -def complete(prefix): - return [o for o in options if o.startswith(prefix)] - - -def convert(command, args): - while args: - shortname = args.first() - longnames = complete(shortname) - if len(longnames) != 1: - expension_failure(shortname, longnames) - longname = longnames[0] - if options[longname]['type'] == 'noarg': - command = options[longname]['ping'].format( - command=command, value='') - elif not args: - sys.exit(f'ping: missing argument for {longname} option') - else: - command = options[longname]['ping'].format( - command=command, value=args.first()) - return command - - -if __name__ == '__main__': - args = List(sys.argv[1:]) - host = args.first() - - if not host: - sys.exit("ping: Missing host") - - if host == '--get-options': - args.first() # pop ping - args.first() # pop IP - while args: - option = args.first() - - matched = complete(option) - if not args: - sys.stdout.write(' '.join(matched)) - sys.exit(0) - - if len(matched) > 1 : - sys.stdout.write(' '.join(matched)) - sys.exit(0) - - if options[matched[0]]['type'] == 'noarg': - continue - - value = args.first() - if not args: - matched = complete(option) - sys.stdout.write(options[matched[0]]['type']) - sys.exit(0) - - try: - ip = socket.gethostbyname(host) - except socket.gaierror: - sys.exit(f'ping: Unknown host: {host}') - - try: - version = ipaddress.ip_address(ip).version - except ValueError: - sys.exit(f'ping: Unknown host: {host}') - - command = convert(ping[version],args) - - # print(f'{command} {host}') - os.system(f'{command} {host}') - diff --git a/templates/ping/node.tag/node.def b/templates/ping/node.tag/node.def index 2706be4..735631e 100644 --- a/templates/ping/node.tag/node.def +++ b/templates/ping/node.tag/node.def @@ -1,3 +1,3 @@ help: Send Internet Control Message Protocol (ICMP) echo request allowed: echo -n '<hostname> <x.x.x.x> <h:h:h:h:h:h:h:h>' -run: ${vyatta_bindir}/ping ${@:2} +run: ${vyos_op_scripts_dir}/ping.py ${@:2} diff --git a/templates/ping/node.tag/node.tag/node.def b/templates/ping/node.tag/node.tag/node.def index a231d68..66fffb2 100644 --- a/templates/ping/node.tag/node.tag/node.def +++ b/templates/ping/node.tag/node.tag/node.def @@ -1,3 +1,3 @@ help: Ping options allowed: ${vyatta_bindir}/ping --get-options "${COMP_WORDS[@]}" -run: ${vyatta_bindir}/ping ${@:2} +run: ${vyos_op_scripts_dir}/ping.py ${@:2} |