]> git.proxmox.com Git - mirror_ovs.git/blame - tests/appctl.py
ovs-thread: Do not always end quiescent state in ovs_thread_create().
[mirror_ovs.git] / tests / appctl.py
CommitLineData
e0edde6f 1# Copyright (c) 2012 Nicira, Inc.
0a68ffd2
EJ
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at:
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import argparse
f4ec6ff4 16import signal
0a68ffd2
EJ
17import sys
18
19import ovs.daemon
20import ovs.unixctl
53cf9963 21import ovs.unixctl.client
0a68ffd2
EJ
22import ovs.util
23import ovs.vlog
24
25
26def connect_to_target(target):
27 error, str_result = ovs.unixctl.socket_name_from_target(target)
28 if error:
29 ovs.util.ovs_fatal(error, str_result)
30 else:
31 socket_name = str_result
32
53cf9963 33 error, client = ovs.unixctl.client.UnixctlClient.create(socket_name)
0a68ffd2
EJ
34 if error:
35 ovs.util.ovs_fatal(error, "cannot connect to \"%s\"" % socket_name)
36
37 return client
38
39
40def main():
41 parser = argparse.ArgumentParser(description="Python Implementation of"
42 " ovs-appctl.")
43 parser.add_argument("-t", "--target", default="ovs-vswitchd",
44 help="pidfile or socket to contact")
45
46 parser.add_argument("command", metavar="COMMAND",
47 help="Command to run.")
48 parser.add_argument("argv", metavar="ARG", nargs="*",
49 help="Arguments to the command.")
f4ec6ff4
EJ
50 parser.add_argument("-T", "--timeout", metavar="SECS",
51 help="wait at most SECS seconds for a response")
0a68ffd2
EJ
52 args = parser.parse_args()
53
f4ec6ff4
EJ
54 if args.timeout:
55 signal.alarm(int(args.timeout))
56
0a68ffd2
EJ
57 ovs.vlog.Vlog.init()
58 target = args.target
59 client = connect_to_target(target)
60 err_no, error, result = client.transact(args.command, args.argv)
61 client.close()
62
63 if err_no:
64 ovs.util.ovs_fatal(err_no, "%s: transaction error" % target)
65 elif error is not None:
66 sys.stderr.write(error)
67 ovs.util.ovs_error(0, "%s: server returned an error" % target)
68 sys.exit(2)
69 else:
70 assert result is not None
71 sys.stdout.write(result)
72
73
74if __name__ == '__main__':
75 main()