From: Alex Wang Date: Thu, 16 Oct 2014 20:27:32 +0000 (-0700) Subject: command-line: Add function to print command usage. X-Git-Tag: v2.4.0~1100 X-Git-Url: http://git.cascardo.eti.br/?a=commitdiff_plain;ds=sidebyside;h=451de37e7fe6a89a482771fbec5e653be6117380;p=cascardo%2Fovs.git 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 Acked-by: Ben Pfaff --- 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)