summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Wang <alexw@nicira.com>2014-10-16 13:27:32 -0700
committerAlex Wang <alexw@nicira.com>2014-10-28 18:43:11 -0700
commit451de37e7fe6a89a482771fbec5e653be6117380 (patch)
treeb95caf67c9236afa85036aba47fd025aa8502357
parent56cad66697eba8ee9b7c52ac3051407210dadc70 (diff)
downloadopenvswitch-451de37e7fe6a89a482771fbec5e653be6117380.tar.gz
command-line: Add function to print command usage.
This commit adds a new variable in 'struct command' for recording the command usage. Also, a new function is added to print the usage given the array of defined commands. Later patch will use the output in bash command-line completion script. Signed-off-by: Alex Wang <alexw@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--lib/command-line.c15
-rw-r--r--lib/command-line.h2
-rw-r--r--ovsdb/ovsdb-tool.c33
-rw-r--r--tests/ovstest.c5
-rw-r--r--tests/test-bitmap.c6
-rw-r--r--tests/test-classifier.c24
-rw-r--r--tests/test-cmap.c6
-rw-r--r--tests/test-heap.c15
-rw-r--r--tests/test-jsonrpc.c10
-rw-r--r--tests/test-ovsdb.c70
-rw-r--r--tests/test-reconnect.c32
-rw-r--r--tests/test-util.c32
-rw-r--r--tests/test-vconn.c18
-rw-r--r--utilities/ovs-benchmark.c10
-rw-r--r--utilities/ovs-ofctl.c176
15 files changed, 265 insertions, 189 deletions
diff --git a/lib/command-line.c b/lib/command-line.c
index 1f26c5c89..eb0a83b54 100644
--- a/lib/command-line.c
+++ b/lib/command-line.c
@@ -52,6 +52,21 @@ long_options_to_short_options(const struct option options[])
return xstrdup(short_options);
}
+/* Given the 'struct command' array, prints the usage of all commands. */
+void
+print_commands(const struct command commands[])
+{
+ struct ds ds = DS_EMPTY_INITIALIZER;
+
+ ds_put_cstr(&ds, "The available commands are:\n");
+ for (; commands->name; commands++) {
+ const struct command *c = commands;
+ ds_put_format(&ds, " %-23s %s\n", c->name, c->usage ? c->usage : "");
+ }
+ printf("%s", ds.string);
+ ds_destroy(&ds);
+}
+
/* Given the GNU-style options in 'options', prints all options. */
void
print_options(const struct option options[])
diff --git a/lib/command-line.h b/lib/command-line.h
index 157cb58a8..0c9e2d911 100644
--- a/lib/command-line.h
+++ b/lib/command-line.h
@@ -25,6 +25,7 @@ struct option;
struct command {
const char *name;
+ const char *usage;
int min_args;
int max_args;
void (*handler)(int argc, char *argv[]);
@@ -32,6 +33,7 @@ struct command {
char *long_options_to_short_options(const struct option *options);
void print_options(const struct option *options);
+void print_commands(const struct command *commands);
void run_command(int argc, char *argv[], const struct command[]);
void proctitle_init(int argc, char **argv);
diff --git a/ovsdb/ovsdb-tool.c b/ovsdb/ovsdb-tool.c
index 27bd1e638..509668c56 100644
--- a/ovsdb/ovsdb-tool.c
+++ b/ovsdb/ovsdb-tool.c
@@ -563,20 +563,27 @@ do_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
usage();
}
+static void
+do_list_commands(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+ print_commands(get_all_commands());
+}
+
static const struct command all_commands[] = {
- { "create", 0, 2, do_create },
- { "compact", 0, 2, do_compact },
- { "convert", 0, 3, do_convert },
- { "needs-conversion", 0, 2, do_needs_conversion },
- { "db-version", 0, 1, do_db_version },
- { "db-cksum", 0, 1, do_db_cksum },
- { "schema-version", 0, 1, do_schema_version },
- { "schema-cksum", 0, 1, do_schema_cksum },
- { "query", 1, 2, do_query },
- { "transact", 1, 2, do_transact },
- { "show-log", 0, 1, do_show_log },
- { "help", 0, INT_MAX, do_help },
- { NULL, 0, 0, NULL },
+ { "create", "[db [schema]]", 0, 2, do_create },
+ { "compact", "[db [dst]]", 0, 2, do_compact },
+ { "convert", "[db [schema [dst]]]", 0, 3, do_convert },
+ { "needs-conversion", NULL, 0, 2, do_needs_conversion },
+ { "db-version", "[db]", 0, 1, do_db_version },
+ { "db-cksum", "[db]", 0, 1, do_db_cksum },
+ { "schema-version", "[schema]", 0, 1, do_schema_version },
+ { "schema-cksum", "[schema]", 0, 1, do_schema_cksum },
+ { "query", "[db] trns", 1, 2, do_query },
+ { "transact", "[db] trns", 1, 2, do_transact },
+ { "show-log", "[db]", 0, 1, do_show_log },
+ { "help", NULL, 0, INT_MAX, do_help },
+ { "list-commands", NULL, 0, INT_MAX, do_list_commands },
+ { NULL, NULL, 0, 0, NULL },
};
static const struct command *get_all_commands(void)
diff --git a/tests/ovstest.c b/tests/ovstest.c
index dbb4555da..dc6d18f69 100644
--- a/tests/ovstest.c
+++ b/tests/ovstest.c
@@ -32,7 +32,7 @@ static size_t allocated_commands = 0;
static void
add_command(struct command *cmd)
{
- const struct command nil = {NULL, 0, 0, NULL};
+ const struct command nil = {NULL, NULL, 0, 0, NULL};
while (n_commands + 1 >= allocated_commands) {
commands = x2nrealloc(commands, &allocated_commands,
@@ -85,7 +85,7 @@ help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
static void
add_top_level_commands(void)
{
- struct command help_cmd = {"--help", 0, 0, help};
+ struct command help_cmd = {"--help", NULL, 0, 0, help};
add_command(&help_cmd);
}
@@ -96,6 +96,7 @@ ovstest_register(const char *test_name, ovstest_func f)
struct command test_cmd;
test_cmd.name = test_name;
+ test_cmd.usage = NULL;
test_cmd.min_args = 0;
test_cmd.max_args = INT_MAX;
test_cmd.handler = f;
diff --git a/tests/test-bitmap.c b/tests/test-bitmap.c
index 9e874b5ad..5008f5195 100644
--- a/tests/test-bitmap.c
+++ b/tests/test-bitmap.c
@@ -150,9 +150,9 @@ run_benchmarks(int argc OVS_UNUSED, char *argv[])
}
static const struct command commands[] = {
- {"check", 0, 0, run_tests},
- {"benchmark", 1, 1, run_benchmarks},
- {NULL, 0, 0, NULL},
+ {"check", NULL, 0, 0, run_tests},
+ {"benchmark", NULL, 1, 1, run_benchmarks},
+ {NULL, NULL, 0, 0, NULL},
};
static void
diff --git a/tests/test-classifier.c b/tests/test-classifier.c
index f4e65bfdb..2f5a181e4 100644
--- a/tests/test-classifier.c
+++ b/tests/test-classifier.c
@@ -1403,21 +1403,21 @@ test_minimask_combine(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
static const struct command commands[] = {
/* Classifier tests. */
- {"empty", 0, 0, test_empty},
- {"destroy-null", 0, 0, test_destroy_null},
- {"single-rule", 0, 0, test_single_rule},
- {"rule-replacement", 0, 0, test_rule_replacement},
- {"many-rules-in-one-list", 0, 0, test_many_rules_in_one_list},
- {"many-rules-in-one-table", 0, 0, test_many_rules_in_one_table},
- {"many-rules-in-two-tables", 0, 0, test_many_rules_in_two_tables},
- {"many-rules-in-five-tables", 0, 0, test_many_rules_in_five_tables},
+ {"empty", NULL, 0, 0, test_empty},
+ {"destroy-null", NULL, 0, 0, test_destroy_null},
+ {"single-rule", NULL, 0, 0, test_single_rule},
+ {"rule-replacement", NULL, 0, 0, test_rule_replacement},
+ {"many-rules-in-one-list", NULL, 0, 0, test_many_rules_in_one_list},
+ {"many-rules-in-one-table", NULL, 0, 0, test_many_rules_in_one_table},
+ {"many-rules-in-two-tables", NULL, 0, 0, test_many_rules_in_two_tables},
+ {"many-rules-in-five-tables", NULL, 0, 0, test_many_rules_in_five_tables},
/* Miniflow and minimask tests. */
- {"miniflow", 0, 0, test_miniflow},
- {"minimask_has_extra", 0, 0, test_minimask_has_extra},
- {"minimask_combine", 0, 0, test_minimask_combine},
+ {"miniflow", NULL, 0, 0, test_miniflow},
+ {"minimask_has_extra", NULL, 0, 0, test_minimask_has_extra},
+ {"minimask_combine", NULL, 0, 0, test_minimask_combine},
- {NULL, 0, 0, NULL},
+ {NULL, NULL, 0, 0, NULL},
};
static void
diff --git a/tests/test-cmap.c b/tests/test-cmap.c
index 2976d5f8f..8825e6f9a 100644
--- a/tests/test-cmap.c
+++ b/tests/test-cmap.c
@@ -638,9 +638,9 @@ benchmark_hmap(void)
}
static const struct command commands[] = {
- {"check", 0, 1, run_tests},
- {"benchmark", 3, 4, run_benchmarks},
- {NULL, 0, 0, NULL},
+ {"check", NULL, 0, 1, run_tests},
+ {"benchmark", NULL, 3, 4, run_benchmarks},
+ {NULL, NULL, 0, 0, NULL},
};
static void
diff --git a/tests/test-heap.c b/tests/test-heap.c
index 3a0afa5fa..fcb33ccea 100644
--- a/tests/test-heap.c
+++ b/tests/test-heap.c
@@ -465,16 +465,17 @@ test_heap_raw_delete(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
}
static const struct command commands[] = {
- { "insert-delete-same-order", 0, 0, test_heap_insert_delete_same_order, },
- { "insert-delete-reverse-order", 0, 0,
+ { "insert-delete-same-order", NULL, 0, 0,
+ test_heap_insert_delete_same_order, },
+ { "insert-delete-reverse-order", NULL, 0, 0,
test_heap_insert_delete_reverse_order, },
- { "insert-delete-every-order", 0, 0,
+ { "insert-delete-every-order", NULL, 0, 0,
test_heap_insert_delete_every_order, },
- { "insert-delete-same-order-with-dups", 0, 0,
+ { "insert-delete-same-order-with-dups", NULL, 0, 0,
test_heap_insert_delete_same_order_with_dups, },
- { "raw-insert", 0, 0, test_heap_raw_insert, },
- { "raw-delete", 0, 0, test_heap_raw_delete, },
- { NULL, 0, 0, NULL, },
+ { "raw-insert", NULL, 0, 0, test_heap_raw_insert, },
+ { "raw-delete", NULL, 0, 0, test_heap_raw_delete, },
+ { NULL, NULL, 0, 0, NULL, },
};
static void
diff --git a/tests/test-jsonrpc.c b/tests/test-jsonrpc.c
index cf90c4434..1fd753f35 100644
--- a/tests/test-jsonrpc.c
+++ b/tests/test-jsonrpc.c
@@ -330,11 +330,11 @@ do_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
}
static struct command all_commands[] = {
- { "listen", 1, 1, do_listen },
- { "request", 3, 3, do_request },
- { "notify", 3, 3, do_notify },
- { "help", 0, INT_MAX, do_help },
- { NULL, 0, 0, NULL },
+ { "listen", NULL, 1, 1, do_listen },
+ { "request", NULL, 3, 3, do_request },
+ { "notify", NULL, 3, 3, do_notify },
+ { "help", NULL, 0, INT_MAX, do_help },
+ { NULL, NULL, 0, 0, NULL },
};
static struct command *
diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c
index 4d73a0dd3..b95f1db06 100644
--- a/tests/test-ovsdb.c
+++ b/tests/test-ovsdb.c
@@ -1508,13 +1508,13 @@ static void
do_transact(int argc, char *argv[])
{
static const struct command do_transact_commands[] = {
- { "commit", 0, 0, do_transact_commit },
- { "abort", 0, 0, do_transact_abort },
- { "insert", 2, 3, do_transact_insert },
- { "delete", 1, 1, do_transact_delete },
- { "modify", 2, 3, do_transact_modify },
- { "print", 0, 0, do_transact_print },
- { NULL, 0, 0, NULL },
+ { "commit", NULL, 0, 0, do_transact_commit },
+ { "abort", NULL, 0, 0, do_transact_abort },
+ { "insert", NULL, 2, 3, do_transact_insert },
+ { "delete", NULL, 1, 1, do_transact_delete },
+ { "modify", NULL, 2, 3, do_transact_modify },
+ { "print", NULL, 0, 0, do_transact_print },
+ { NULL, NULL, 0, 0, NULL },
};
struct ovsdb_schema *schema;
@@ -1963,34 +1963,34 @@ do_idl(int argc, char *argv[])
}
static struct command all_commands[] = {
- { "log-io", 2, INT_MAX, do_log_io },
- { "default-atoms", 0, 0, do_default_atoms },
- { "default-data", 0, 0, do_default_data },
- { "parse-atomic-type", 1, 1, do_parse_atomic_type },
- { "parse-base-type", 1, 1, do_parse_base_type },
- { "parse-type", 1, 1, do_parse_type },
- { "parse-atoms", 2, INT_MAX, do_parse_atoms },
- { "parse-atom-strings", 2, INT_MAX, do_parse_atom_strings },
- { "parse-data", 2, INT_MAX, do_parse_data },
- { "parse-data-strings", 2, INT_MAX, do_parse_data_strings },
- { "sort-atoms", 2, 2, do_sort_atoms },
- { "parse-column", 2, 2, do_parse_column },
- { "parse-table", 2, 3, do_parse_table },
- { "parse-rows", 2, INT_MAX, do_parse_rows },
- { "compare-rows", 2, INT_MAX, do_compare_rows },
- { "parse-conditions", 2, INT_MAX, do_parse_conditions },
- { "evaluate-conditions", 3, 3, do_evaluate_conditions },
- { "parse-mutations", 2, INT_MAX, do_parse_mutations },
- { "execute-mutations", 3, 3, do_execute_mutations },
- { "query", 3, 3, do_query },
- { "query-distinct", 4, 4, do_query_distinct },
- { "transact", 1, INT_MAX, do_transact },
- { "parse-schema", 1, 1, do_parse_schema },
- { "execute", 2, INT_MAX, do_execute },
- { "trigger", 2, INT_MAX, do_trigger },
- { "idl", 1, INT_MAX, do_idl },
- { "help", 0, INT_MAX, do_help },
- { NULL, 0, 0, NULL },
+ { "log-io", NULL, 2, INT_MAX, do_log_io },
+ { "default-atoms", NULL, 0, 0, do_default_atoms },
+ { "default-data", NULL, 0, 0, do_default_data },
+ { "parse-atomic-type", NULL, 1, 1, do_parse_atomic_type },
+ { "parse-base-type", NULL, 1, 1, do_parse_base_type },
+ { "parse-type", NULL, 1, 1, do_parse_type },
+ { "parse-atoms", NULL, 2, INT_MAX, do_parse_atoms },
+ { "parse-atom-strings", NULL, 2, INT_MAX, do_parse_atom_strings },
+ { "parse-data", NULL, 2, INT_MAX, do_parse_data },
+ { "parse-data-strings", NULL, 2, INT_MAX, do_parse_data_strings },
+ { "sort-atoms", NULL, 2, 2, do_sort_atoms },
+ { "parse-column", NULL, 2, 2, do_parse_column },
+ { "parse-table", NULL, 2, 3, do_parse_table },
+ { "parse-rows", NULL, 2, INT_MAX, do_parse_rows },
+ { "compare-rows", NULL, 2, INT_MAX, do_compare_rows },
+ { "parse-conditions", NULL, 2, INT_MAX, do_parse_conditions },
+ { "evaluate-conditions", NULL, 3, 3, do_evaluate_conditions },
+ { "parse-mutations", NULL, 2, INT_MAX, do_parse_mutations },
+ { "execute-mutations", NULL, 3, 3, do_execute_mutations },
+ { "query", NULL, 3, 3, do_query },
+ { "query-distinct", NULL, 4, 4, do_query_distinct },
+ { "transact", NULL, 1, INT_MAX, do_transact },
+ { "parse-schema", NULL, 1, 1, do_parse_schema },
+ { "execute", NULL, 2, INT_MAX, do_execute },
+ { "trigger", NULL, 2, INT_MAX, do_trigger },
+ { "idl", NULL, 1, INT_MAX, do_idl },
+ { "help", NULL, 0, INT_MAX, do_help },
+ { NULL, NULL, 0, 0, NULL },
};
static struct command *
diff --git a/tests/test-reconnect.c b/tests/test-reconnect.c
index 35d5f4175..a3e97b066 100644
--- a/tests/test-reconnect.c
+++ b/tests/test-reconnect.c
@@ -271,22 +271,22 @@ do_listen_error(int argc OVS_UNUSED, char *argv[])
}
static const struct command all_commands[] = {
- { "enable", 0, 0, do_enable },
- { "disable", 0, 0, do_disable },
- { "force-reconnect", 0, 0, do_force_reconnect },
- { "disconnected", 0, 1, do_disconnected },
- { "connecting", 0, 0, do_connecting },
- { "connect-failed", 0, 1, do_connect_failed },
- { "connected", 0, 0, do_connected },
- { "activity", 0, 0, do_activity },
- { "run", 0, 1, do_run },
- { "advance", 1, 1, do_advance },
- { "timeout", 0, 0, do_timeout },
- { "set-max-tries", 1, 1, do_set_max_tries },
- { "passive", 0, 0, do_set_passive },
- { "listening", 0, 0, do_listening },
- { "listen-error", 1, 1, do_listen_error },
- { NULL, 0, 0, NULL },
+ { "enable", NULL, 0, 0, do_enable },
+ { "disable", NULL, 0, 0, do_disable },
+ { "force-reconnect", NULL, 0, 0, do_force_reconnect },
+ { "disconnected", NULL, 0, 1, do_disconnected },
+ { "connecting", NULL, 0, 0, do_connecting },
+ { "connect-failed", NULL, 0, 1, do_connect_failed },
+ { "connected", NULL, 0, 0, do_connected },
+ { "activity", NULL, 0, 0, do_activity },
+ { "run", NULL, 0, 1, do_run },
+ { "advance", NULL, 1, 1, do_advance },
+ { "timeout", NULL, 0, 0, do_timeout },
+ { "set-max-tries", NULL, 1, 1, do_set_max_tries },
+ { "passive", NULL, 0, 0, do_set_passive },
+ { "listening", NULL, 0, 0, do_listening },
+ { "listen-error", NULL, 1, 1, do_listen_error },
+ { NULL, NULL, 0, 0, NULL },
};
static const struct command *
diff --git a/tests/test-util.c b/tests/test-util.c
index a8060b0c4..fd01fcb92 100644
--- a/tests/test-util.c
+++ b/tests/test-util.c
@@ -1053,24 +1053,24 @@ test_file_name(int argc, char *argv[])
#endif /* _WIN32 */
static const struct command commands[] = {
- {"ctz", 0, 0, test_ctz},
- {"clz", 0, 0, test_clz},
- {"round_up_pow2", 0, 0, test_round_up_pow2},
- {"round_down_pow2", 0, 0, test_round_down_pow2},
- {"count_1bits", 0, 0, test_count_1bits},
- {"log_2_floor", 0, 0, test_log_2_floor},
- {"bitwise_copy", 0, 0, test_bitwise_copy},
- {"bitwise_zero", 0, 0, test_bitwise_zero},
- {"bitwise_one", 0, 0, test_bitwise_one},
- {"bitwise_is_all_zeros", 0, 0, test_bitwise_is_all_zeros},
- {"follow-symlinks", 1, INT_MAX, test_follow_symlinks},
- {"assert", 0, 0, test_assert},
- {"ovs_scan", 0, 0, test_ovs_scan},
- {"snprintf", 0, 0, test_snprintf},
+ {"ctz", NULL, 0, 0, test_ctz},
+ {"clz", NULL, 0, 0, test_clz},
+ {"round_up_pow2", NULL, 0, 0, test_round_up_pow2},
+ {"round_down_pow2", NULL, 0, 0, test_round_down_pow2},
+ {"count_1bits", NULL, 0, 0, test_count_1bits},
+ {"log_2_floor", NULL, 0, 0, test_log_2_floor},
+ {"bitwise_copy", NULL, 0, 0, test_bitwise_copy},
+ {"bitwise_zero", NULL, 0, 0, test_bitwise_zero},
+ {"bitwise_one", NULL, 0, 0, test_bitwise_one},
+ {"bitwise_is_all_zeros", NULL, 0, 0, test_bitwise_is_all_zeros},
+ {"follow-symlinks", NULL, 1, INT_MAX, test_follow_symlinks},
+ {"assert", NULL, 0, 0, test_assert},
+ {"ovs_scan", NULL, 0, 0, test_ovs_scan},
+ {"snprintf", NULL, 0, 0, test_snprintf},
#ifndef _WIN32
- {"file_name", 1, INT_MAX, test_file_name},
+ {"file_name", NULL, 1, INT_MAX, test_file_name},
#endif
- {NULL, 0, 0, NULL},
+ {NULL, NULL, 0, 0, NULL},
};
static void
diff --git a/tests/test-vconn.c b/tests/test-vconn.c
index 266ad4e77..bcaa3da95 100644
--- a/tests/test-vconn.c
+++ b/tests/test-vconn.c
@@ -433,15 +433,15 @@ test_send_invalid_version_hello(int argc OVS_UNUSED, char *argv[])
}
static const struct command commands[] = {
- {"refuse-connection", 1, 1, test_refuse_connection},
- {"accept-then-close", 1, 1, test_accept_then_close},
- {"read-hello", 1, 1, test_read_hello},
- {"send-plain-hello", 1, 1, test_send_plain_hello},
- {"send-long-hello", 1, 1, test_send_long_hello},
- {"send-echo-hello", 1, 1, test_send_echo_hello},
- {"send-short-hello", 1, 1, test_send_short_hello},
- {"send-invalid-version-hello", 1, 1, test_send_invalid_version_hello},
- {NULL, 0, 0, NULL},
+ {"refuse-connection", NULL, 1, 1, test_refuse_connection},
+ {"accept-then-close", NULL, 1, 1, test_accept_then_close},
+ {"read-hello", NULL, 1, 1, test_read_hello},
+ {"send-plain-hello", NULL, 1, 1, test_send_plain_hello},
+ {"send-long-hello", NULL, 1, 1, test_send_long_hello},
+ {"send-echo-hello", NULL, 1, 1, test_send_echo_hello},
+ {"send-short-hello", NULL, 1, 1, test_send_short_hello},
+ {"send-invalid-version-hello", NULL, 1, 1, test_send_invalid_version_hello},
+ {NULL, NULL, 0, 0, NULL},
};
static void
diff --git a/utilities/ovs-benchmark.c b/utilities/ovs-benchmark.c
index 386e6540c..010d68648 100644
--- a/utilities/ovs-benchmark.c
+++ b/utilities/ovs-benchmark.c
@@ -617,11 +617,11 @@ cmd_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
}
static const struct command all_commands[] = {
- { "listen", 0, 0, cmd_listen },
- { "rate", 0, 0, cmd_rate },
- { "latency", 0, 0, cmd_latency },
- { "help", 0, 0, cmd_help },
- { NULL, 0, 0, NULL },
+ { "listen", NULL, 0, 0, cmd_listen },
+ { "rate", NULL, 0, 0, cmd_rate },
+ { "latency", NULL, 0, 0, cmd_latency },
+ { "help", NULL, 0, 0, cmd_help },
+ { NULL, NULL, 0, 0, NULL },
};
static const struct command *get_all_commands(void)
diff --git a/utilities/ovs-ofctl.c b/utilities/ovs-ofctl.c
index 77f5a298e..b6b775f65 100644
--- a/utilities/ovs-ofctl.c
+++ b/utilities/ovs-ofctl.c
@@ -2239,6 +2239,12 @@ ofctl_help(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
{
usage();
}
+
+static void
+ofctl_list_commands(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+ print_commands(get_all_commands());
+}
/* replace-flows and diff-flows commands. */
@@ -3443,71 +3449,115 @@ ofctl_encode_hello(int argc OVS_UNUSED, char *argv[])
}
static const struct command all_commands[] = {
- { "show", 1, 1, ofctl_show },
- { "monitor", 1, 3, ofctl_monitor },
- { "snoop", 1, 1, ofctl_snoop },
- { "dump-desc", 1, 1, ofctl_dump_desc },
- { "dump-tables", 1, 1, ofctl_dump_tables },
- { "dump-table-features", 1, 1, ofctl_dump_table_features },
- { "dump-flows", 1, 2, ofctl_dump_flows },
- { "dump-aggregate", 1, 2, ofctl_dump_aggregate },
- { "queue-stats", 1, 3, ofctl_queue_stats },
- { "queue-get-config", 2, 2, ofctl_queue_get_config },
- { "add-flow", 2, 2, ofctl_add_flow },
- { "add-flows", 2, 2, ofctl_add_flows },
- { "mod-flows", 2, 2, ofctl_mod_flows },
- { "del-flows", 1, 2, ofctl_del_flows },
- { "replace-flows", 2, 2, ofctl_replace_flows },
- { "diff-flows", 2, 2, ofctl_diff_flows },
- { "add-meter", 2, 2, ofctl_add_meter },
- { "mod-meter", 2, 2, ofctl_mod_meter },
- { "del-meter", 2, 2, ofctl_del_meters },
- { "del-meters", 1, 1, ofctl_del_meters },
- { "dump-meter", 2, 2, ofctl_dump_meters },
- { "dump-meters", 1, 1, ofctl_dump_meters },
- { "meter-stats", 1, 2, ofctl_meter_stats },
- { "meter-features", 1, 1, ofctl_meter_features },
- { "packet-out", 4, INT_MAX, ofctl_packet_out },
- { "dump-ports", 1, 2, ofctl_dump_ports },
- { "dump-ports-desc", 1, 2, ofctl_dump_ports_desc },
- { "mod-port", 3, 3, ofctl_mod_port },
- { "mod-table", 3, 3, ofctl_mod_table },
- { "get-frags", 1, 1, ofctl_get_frags },
- { "set-frags", 2, 2, ofctl_set_frags },
- { "probe", 1, 1, ofctl_probe },
- { "ping", 1, 2, ofctl_ping },
- { "benchmark", 3, 3, ofctl_benchmark },
-
- { "ofp-parse", 1, 1, ofctl_ofp_parse },
- { "ofp-parse-pcap", 1, INT_MAX, ofctl_ofp_parse_pcap },
-
- { "add-group", 1, 2, ofctl_add_group },
- { "add-groups", 1, 2, ofctl_add_groups },
- { "mod-group", 1, 2, ofctl_mod_group },
- { "del-groups", 1, 2, ofctl_del_groups },
- { "dump-groups", 1, 2, ofctl_dump_group_desc },
- { "dump-group-stats", 1, 2, ofctl_dump_group_stats },
- { "dump-group-features", 1, 1, ofctl_dump_group_features },
- { "help", 0, INT_MAX, ofctl_help },
+ { "show", "switch",
+ 1, 1, ofctl_show },
+ { "monitor", "switch [misslen] [invalid_ttl] [watch:[...]]",
+ 1, 3, ofctl_monitor },
+ { "snoop", "switch",
+ 1, 1, ofctl_snoop },
+ { "dump-desc", "switch",
+ 1, 1, ofctl_dump_desc },
+ { "dump-tables", "switch",
+ 1, 1, ofctl_dump_tables },
+ { "dump-table-features", "switch",
+ 1, 1, ofctl_dump_table_features },
+ { "dump-flows", "switch",
+ 1, 2, ofctl_dump_flows },
+ { "dump-aggregate", "switch",
+ 1, 2, ofctl_dump_aggregate },
+ { "queue-stats", "switch [port [queue]]",
+ 1, 3, ofctl_queue_stats },
+ { "queue-get-config", "switch port",
+ 2, 2, ofctl_queue_get_config },
+ { "add-flow", "switch flow",
+ 2, 2, ofctl_add_flow },
+ { "add-flows", "switch file",
+ 2, 2, ofctl_add_flows },
+ { "mod-flows", "switch flow",
+ 2, 2, ofctl_mod_flows },
+ { "del-flows", "switch [flow]",
+ 1, 2, ofctl_del_flows },
+ { "replace-flows", "switch file",
+ 2, 2, ofctl_replace_flows },
+ { "diff-flows", "source1 source2",
+ 2, 2, ofctl_diff_flows },
+ { "add-meter", "switch meter",
+ 2, 2, ofctl_add_meter },
+ { "mod-meter", "switch meter",
+ 2, 2, ofctl_mod_meter },
+ { "del-meter", "switch meter",
+ 2, 2, ofctl_del_meters },
+ { "del-meters", "switch",
+ 1, 1, ofctl_del_meters },
+ { "dump-meter", "switch meter",
+ 2, 2, ofctl_dump_meters },
+ { "dump-meters", "switch",
+ 1, 1, ofctl_dump_meters },
+ { "meter-stats", "switch [meter]",
+ 1, 2, ofctl_meter_stats },
+ { "meter-features", "switch",
+ 1, 1, ofctl_meter_features },
+ { "packet-out", "switch in_port actions packet...",
+ 4, INT_MAX, ofctl_packet_out },
+ { "dump-ports", "switch [port]",
+ 1, 2, ofctl_dump_ports },
+ { "dump-ports-desc", "switch [port]",
+ 1, 2, ofctl_dump_ports_desc },
+ { "mod-port", "switch iface act",
+ 3, 3, ofctl_mod_port },
+ { "mod-table", "switch mod",
+ 3, 3, ofctl_mod_table },
+ { "get-frags", "switch",
+ 1, 1, ofctl_get_frags },
+ { "set-frags", "switch frag_mode",
+ 2, 2, ofctl_set_frags },
+ { "probe", "target",
+ 1, 1, ofctl_probe },
+ { "ping", "target [n]",
+ 1, 2, ofctl_ping },
+ { "benchmark", "target n count",
+ 3, 3, ofctl_benchmark },
+
+ { "ofp-parse", "file",
+ 1, 1, ofctl_ofp_parse },
+ { "ofp-parse-pcap", "pcap",
+ 1, INT_MAX, ofctl_ofp_parse_pcap },
+
+ { "add-group", "switch group",
+ 1, 2, ofctl_add_group },
+ { "add-groups", "switch file",
+ 1, 2, ofctl_add_groups },
+ { "mod-group", "switch group",
+ 1, 2, ofctl_mod_group },
+ { "del-groups", "switch [group]",
+ 1, 2, ofctl_del_groups },
+ { "dump-groups", "switch [group]",
+ 1, 2, ofctl_dump_group_desc },
+ { "dump-group-stats", "switch [group]",
+ 1, 2, ofctl_dump_group_stats },
+ { "dump-group-features", "switch",
+ 1, 1, ofctl_dump_group_features },
+ { "help", NULL, 0, INT_MAX, ofctl_help },
+ { "list-commands", NULL, 0, INT_MAX, ofctl_list_commands },
/* Undocumented commands for testing. */
- { "parse-flow", 1, 1, ofctl_parse_flow },
- { "parse-flows", 1, 1, ofctl_parse_flows },
- { "parse-nx-match", 0, 0, ofctl_parse_nxm },
- { "parse-nxm", 0, 0, ofctl_parse_nxm },
- { "parse-oxm", 1, 1, ofctl_parse_oxm },
- { "parse-actions", 1, 1, ofctl_parse_actions },
- { "parse-instructions", 1, 1, ofctl_parse_instructions },
- { "parse-ofp10-match", 0, 0, ofctl_parse_ofp10_match },
- { "parse-ofp11-match", 0, 0, ofctl_parse_ofp11_match },
- { "parse-pcap", 1, 1, ofctl_parse_pcap },
- { "check-vlan", 2, 2, ofctl_check_vlan },
- { "print-error", 1, 1, ofctl_print_error },
- { "encode-error-reply", 2, 2, ofctl_encode_error_reply },
- { "ofp-print", 1, 2, ofctl_ofp_print },
- { "encode-hello", 1, 1, ofctl_encode_hello },
-
- { NULL, 0, 0, NULL },
+ { "parse-flow", NULL, 1, 1, ofctl_parse_flow },
+ { "parse-flows", NULL, 1, 1, ofctl_parse_flows },
+ { "parse-nx-match", NULL, 0, 0, ofctl_parse_nxm },
+ { "parse-nxm", NULL, 0, 0, ofctl_parse_nxm },
+ { "parse-oxm", NULL, 1, 1, ofctl_parse_oxm },
+ { "parse-actions", NULL, 1, 1, ofctl_parse_actions },
+ { "parse-instructions", NULL, 1, 1, ofctl_parse_instructions },
+ { "parse-ofp10-match", NULL, 0, 0, ofctl_parse_ofp10_match },
+ { "parse-ofp11-match", NULL, 0, 0, ofctl_parse_ofp11_match },
+ { "parse-pcap", NULL, 1, 1, ofctl_parse_pcap },
+ { "check-vlan", NULL, 2, 2, ofctl_check_vlan },
+ { "print-error", NULL, 1, 1, ofctl_print_error },
+ { "encode-error-reply", NULL, 2, 2, ofctl_encode_error_reply },
+ { "ofp-print", NULL, 1, 2, ofctl_ofp_print },
+ { "encode-hello", NULL, 1, 1, ofctl_encode_hello },
+
+ { NULL, NULL, 0, 0, NULL },
};
static const struct command *get_all_commands(void)