platform: rewrote vppctl script to include history

Added more ability to search history to vppctl shell
*Up and down keys give history
*Script now written in Python 2.7.6
*Contains all original functionality
*Added Python dependency for deb/rpms

Change-Id: I5088f7b018fce92b9b5411df0bffc34709810dec
Signed-off-by: Padraig Connolly <padraig.connolly@intel.com>
This commit is contained in:
Padraig
2016-09-21 14:59:02 +01:00
committed by Damjan Marion
parent 33a7dd5ad9
commit b21b6768ff
3 changed files with 97 additions and 31 deletions

View File

@ -7,7 +7,7 @@ Standards-Version: 3.9.4
Package: vpp Package: vpp
Architecture: any Architecture: any
Depends: vpp-lib (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends} Depends: vpp-lib (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}, ${python:Depends}
Description: Vector Packet Processing--executables Description: Vector Packet Processing--executables
This package provides VPP executables: vpp, vpp_api_test, vpp_json_test This package provides VPP executables: vpp, vpp_api_test, vpp_json_test
vpp - the vector packet engine vpp - the vector packet engine

View File

@ -22,7 +22,7 @@ Summary: Vector Packet Processing
License: MIT License: MIT
Version: %{_version} Version: %{_version}
Release: %{_release} Release: %{_release}
Requires: vpp-lib = %{_version}-%{_release}, net-tools, pciutils Requires: vpp-lib = %{_version}-%{_release}, net-tools, pciutils, python
%description %description
This package provides VPP executables: vpp, vpp_api_test, vpp_json_test This package provides VPP executables: vpp, vpp_api_test, vpp_json_test

View File

@ -1,30 +1,96 @@
#!/bin/bash #!/usr/bin/python
PREFIX_ARGS="" '''
CMD_ARGS="" Copyright 2016 Intel Corporation
while [[ $# -gt 0 ]]; do
arg=$1 Licensed under the Apache License, Version 2.0 (the "License");
shift you may not use this file except in compliance with the License.
case ${arg} in You may obtain a copy of the License at
--prefix|-p)
PREFIX_ARGS="chroot prefix ${1}" http://www.apache.org/licenses/LICENSE-2.0
shift
;; Unless required by applicable law or agreed to in writing, software
*) distributed under the License is distributed on an "AS IS" BASIS,
CMD_ARGS="$CMD_ARGS ${arg}" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
;; See the License for the specific language governing permissions and
esac limitations under the License.
done '''
from cmd import Cmd
import os
import subprocess
import re
import sys
try:
import readline
except ImportError:
readline = None
persishist = os.path.expanduser('~/.vpphistory')
persishist_size = 1000
if not persishist:
os.mknod(persishist, stat.S_IFREG)
class Vppctl(Cmd):
def historyWrite(self):
if readline:
readline.set_history_length(persishist_size)
readline.write_history_file(persishist)
def runVat(self, line):
input_prefix = "exec "
input_command = input_prefix + line
line_remove = '^load_one_plugin:'
s = '\n'
vpp_process = subprocess.Popen(['sudo', 'vpp_api_test'],
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
stdout_value = vpp_process.communicate(input_command)[0]
buffer_stdout = stdout_value.splitlines()
buffer_stdout[:] = [b for b in buffer_stdout
if line_remove not in b]
for i, num in enumerate(buffer_stdout):
buffer_stdout[i] = num.replace('vat# ','')
stdout_value = s.join(buffer_stdout)
print stdout_value
def do_help(self, line):
self.runVat("help")
def default(self, line):
self.runVat(line)
def do_exit(self, line):
self.historyWrite()
raise SystemExit
def emptyline(self):
pass
def preloop(self):
if readline and os.path.exists(persishist):
readline.read_history_file(persishist)
def postcmd(self, stop, line):
self.historyWrite()
if __name__ == '__main__':
command_args = sys.argv
if not len(command_args) > 1:
prompt = Vppctl()
prompt.prompt = 'vpp# '
prompt.cmdloop("Starting Vppctl...")
else:
del command_args[0]
stdout_value = " ".join(command_args)
VatAddress = Vppctl()
VatAddress.runVat(stdout_value)
if [ "x${CMD_ARGS}" != "x" ]; then
echo exec ${CMD_ARGS} | vpp_api_test $PREFIX_ARGS 2> >(grep -v "^load_one_plugin:")| sed 's/vat# //g'
else
echo -n "vpp# "
while read CMD; do
if [ "x$CMD" == "xexit" ]; then
exit
elif [ "x$CMD" != "x" ]; then
echo exec $CMD | vpp_api_test $PREFIX_ARGS 2> >(grep -v "^load_one_plugin:")| sed 's/vat# //g'
fi
echo -n "vpp# "
done
fi