blob: 4fdf03c78ff0be0321ff152ecf0989fad00f9889 [file] [log] [blame]
Padraig Connollyfba8a952016-11-14 11:37:37 +00001#! /usr/bin/python
Padraigb21b6762016-09-21 14:59:02 +01002'''
3Copyright 2016 Intel Corporation
Ed Warnicke33007f52016-04-04 14:37:21 -07004
Padraigb21b6762016-09-21 14:59:02 +01005Licensed under the Apache License, Version 2.0 (the "License");
6you may not use this file except in compliance with the License.
7You may obtain a copy of the License at
8
9 http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16'''
17
18from cmd import Cmd
19import os
20import subprocess
21import re
22import sys
23try:
24 import readline
25except ImportError:
26 readline = None
27
28persishist = os.path.expanduser('~/.vpphistory')
29persishist_size = 1000
30if not persishist:
31 os.mknod(persishist, stat.S_IFREG)
32
33class Vppctl(Cmd):
34
35 def historyWrite(self):
36 if readline:
37 readline.set_history_length(persishist_size)
38 readline.write_history_file(persishist)
39
40 def runVat(self, line):
41 input_prefix = "exec "
42 input_command = input_prefix + line
43 line_remove = '^load_one_plugin:'
44 s = '\n'
Pierre Pfisterf524f0a2016-11-03 13:14:29 +000045 command = ['vpp_api_test']
Padraigb21b6762016-09-21 14:59:02 +010046
Pierre Pfisterf524f0a2016-11-03 13:14:29 +000047 if os.geteuid() != 0:
48 command = ['sudo', 'vpp_api_test']
49
50 vpp_process = subprocess.Popen(command,
Padraigb21b6762016-09-21 14:59:02 +010051 stderr=subprocess.PIPE,
52 stdin=subprocess.PIPE,
53 stdout=subprocess.PIPE)
54 stdout_value = vpp_process.communicate(input_command)[0]
55
56 buffer_stdout = stdout_value.splitlines()
57
58 buffer_stdout[:] = [b for b in buffer_stdout
59 if line_remove not in b]
60
61 for i, num in enumerate(buffer_stdout):
62 buffer_stdout[i] = num.replace('vat# ','')
63
64 stdout_value = s.join(buffer_stdout)
65 print stdout_value
66
67 def do_help(self, line):
68 self.runVat("help")
69
70 def default(self, line):
71 self.runVat(line)
72
73 def do_exit(self, line):
74 self.historyWrite()
Padraigb21b6762016-09-21 14:59:02 +010075 raise SystemExit
76
77 def emptyline(self):
78 pass
79
Padraig Connolly1f417aa2016-11-28 10:21:19 +000080 def do_EOF(self,line):
81 self.historyWrite()
82 sys.stdout.write('\n')
83 raise SystemExit
84
Padraigb21b6762016-09-21 14:59:02 +010085 def preloop(self):
86 if readline and os.path.exists(persishist):
87 readline.read_history_file(persishist)
88
89 def postcmd(self, stop, line):
90 self.historyWrite()
91
92if __name__ == '__main__':
93 command_args = sys.argv
94
Padraig Connollyfba8a952016-11-14 11:37:37 +000095
Padraigb21b6762016-09-21 14:59:02 +010096 if not len(command_args) > 1:
97 prompt = Vppctl()
Padraig Connolly1f417aa2016-11-28 10:21:19 +000098 red_set = '\033[31m'
99 norm_set = '\033[0m'
100 if sys.stdout.isatty():
Padraig Connollyfba8a952016-11-14 11:37:37 +0000101 prompt.prompt = 'vpp# '
Padraig Connolly1f417aa2016-11-28 10:21:19 +0000102 try:
103 prompt.cmdloop(red_set + " _______ _ " + norm_set + " _ _____ ___ \n" +
104 red_set + " __/ __/ _ \ (_)__ " + norm_set + " | | / / _ \/ _ \\\n" +
105 red_set + " _/ _// // / / / _ \\" + norm_set + " | |/ / ___/ ___/\n" +
106 red_set + " /_/ /____(_)_/\___/ " + norm_set + "|___/_/ /_/ \n")
107 except KeyboardInterrupt:
108 sys.stdout.write('\n')
109 else:
110 try:
Andrew Licaffe092016-12-01 17:05:37 +0800111 prompt.cmdloop()
Padraig Connolly1f417aa2016-11-28 10:21:19 +0000112 except KeyboardInterrupt:
113 sys.stdout.write('\n')
Padraigb21b6762016-09-21 14:59:02 +0100114 else:
115 del command_args[0]
116 stdout_value = " ".join(command_args)
117 VatAddress = Vppctl()
118 VatAddress.runVat(stdout_value)
119
Padraig Connollyfba8a952016-11-14 11:37:37 +0000120
121