]>
Commit | Line | Data |
---|---|---|
064af421 | 1 | /* |
e0edde6f | 2 | * Copyright (c) 2008, 2009, 2010 Nicira, Inc. |
064af421 | 3 | * |
a14bc59f BP |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at: | |
064af421 | 7 | * |
a14bc59f BP |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
064af421 BP |
15 | */ |
16 | ||
17 | #ifndef COMMAND_LINE_H | |
18 | #define COMMAND_LINE_H 1 | |
19 | ||
20 | /* Utilities for command-line parsing. */ | |
21 | ||
675febfa BP |
22 | #include "compiler.h" |
23 | ||
064af421 | 24 | struct option; |
675febfa | 25 | |
1636c761 RB |
26 | /* Command handler context */ |
27 | struct ovs_cmdl_context { | |
28 | /* number of command line arguments */ | |
29 | int argc; | |
30 | /* array of command line arguments */ | |
31 | char **argv; | |
32 | /* private context data defined by the API user */ | |
33 | void *pvt; | |
34 | }; | |
35 | ||
36 | typedef void (*ovs_cmdl_handler)(struct ovs_cmdl_context *); | |
37 | ||
5f383751 | 38 | struct ovs_cmdl_command { |
675febfa | 39 | const char *name; |
451de37e | 40 | const char *usage; |
675febfa BP |
41 | int min_args; |
42 | int max_args; | |
1636c761 | 43 | ovs_cmdl_handler handler; |
1f4a7252 | 44 | enum { OVS_RO, OVS_RW } mode; /* Does this command modify things? */ |
675febfa BP |
45 | }; |
46 | ||
5f383751 | 47 | char *ovs_cmdl_long_options_to_short_options(const struct option *options); |
1830add6 BP |
48 | |
49 | struct ovs_cmdl_parsed_option { | |
50 | const struct option *o; | |
51 | char *arg; | |
52 | }; | |
53 | char *ovs_cmdl_parse_all(int argc, char *argv[], const struct option *, | |
54 | struct ovs_cmdl_parsed_option **, size_t *) | |
55 | OVS_WARN_UNUSED_RESULT; | |
56 | ||
6e26ff63 AG |
57 | char **ovs_cmdl_env_parse_all(int *argcp, char *argv_[], |
58 | const char *env_options); | |
59 | ||
5f383751 RB |
60 | void ovs_cmdl_print_options(const struct option *options); |
61 | void ovs_cmdl_print_commands(const struct ovs_cmdl_command *commands); | |
1830add6 | 62 | |
1f4a7252 RM |
63 | void ovs_cmdl_run_command(struct ovs_cmdl_context *, |
64 | const struct ovs_cmdl_command[]); | |
65 | void ovs_cmdl_run_command_read_only(struct ovs_cmdl_context *, | |
66 | const struct ovs_cmdl_command[]); | |
064af421 | 67 | |
5f383751 | 68 | void ovs_cmdl_proctitle_init(int argc, char **argv); |
666afb55 | 69 | #if defined(__FreeBSD__) || defined(__NetBSD__) |
5f383751 | 70 | #define ovs_cmdl_proctitle_set setproctitle |
fb301c74 | 71 | #else |
5f383751 | 72 | void ovs_cmdl_proctitle_set(const char *, ...) |
cab50449 | 73 | OVS_PRINTF_FORMAT(1, 2); |
fb301c74 | 74 | #endif |
5f383751 | 75 | void ovs_cmdl_proctitle_restore(void); |
40f0707c | 76 | |
064af421 | 77 | #endif /* command-line.h */ |