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[])
struct command {
const char *name;
+ const char *usage;
int min_args;
int max_args;
void (*handler)(int argc, char *argv[]);
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);
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)
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,
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);
}
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;
}
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
\f
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
}
\f
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
}
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
}
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 *
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;
}
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 *
}
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 *
#endif /* _WIN32 */
\f
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
}
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
}
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)
{
usage();
}
+
+static void
+ofctl_list_commands(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+ print_commands(get_all_commands());
+}
\f
/* replace-flows and diff-flows commands. */
}
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)