From 7ff2009a9599a4cebeea038764a2d3f13c60f601 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Mon, 26 Sep 2011 14:59:35 -0700 Subject: [PATCH] ovs-appctl: Print command arguments for "help". --- lib/bond.c | 20 +++++++++++--------- lib/cfm.c | 2 +- lib/coverage.c | 2 +- lib/lacp.c | 2 +- lib/stress.c | 10 ++++++---- lib/unixctl.c | 28 +++++++++++++--------------- lib/unixctl.h | 2 +- lib/vlog.c | 8 +++++--- ofproto/ofproto-dpif.c | 12 +++++++----- ofproto/ofproto.c | 2 +- ovsdb/ovsdb-server.c | 10 +++++----- tests/test-openflowd.c | 2 +- vswitchd/bridge.c | 10 +++++----- vswitchd/ovs-vswitchd.c | 2 +- 14 files changed, 59 insertions(+), 53 deletions(-) diff --git a/lib/bond.c b/lib/bond.c index 416f2b30..1f2b641a 100644 --- a/lib/bond.c +++ b/lib/bond.c @@ -1205,16 +1205,18 @@ bond_unixctl_hash(struct unixctl_conn *conn, const char *args_, void bond_init(void) { - unixctl_command_register("bond/list", bond_unixctl_list, NULL); - unixctl_command_register("bond/show", bond_unixctl_show, NULL); - unixctl_command_register("bond/migrate", bond_unixctl_migrate, NULL); - unixctl_command_register("bond/set-active-slave", + unixctl_command_register("bond/list", "", bond_unixctl_list, NULL); + unixctl_command_register("bond/show", "port", bond_unixctl_show, NULL); + unixctl_command_register("bond/migrate", "port hash slave", + bond_unixctl_migrate, NULL); + unixctl_command_register("bond/set-active-slave", "port slave", bond_unixctl_set_active_slave, NULL); - unixctl_command_register("bond/enable-slave", bond_unixctl_enable_slave, - NULL); - unixctl_command_register("bond/disable-slave", bond_unixctl_disable_slave, - NULL); - unixctl_command_register("bond/hash", bond_unixctl_hash, NULL); + unixctl_command_register("bond/enable-slave", "port slave", + bond_unixctl_enable_slave, NULL); + unixctl_command_register("bond/disable-slave", "port slave", + bond_unixctl_disable_slave, NULL); + unixctl_command_register("bond/hash", "mac [vlan] [basis]", + bond_unixctl_hash, NULL); } static void diff --git a/lib/cfm.c b/lib/cfm.c index c3d96d8a..0bb2bf19 100644 --- a/lib/cfm.c +++ b/lib/cfm.c @@ -220,7 +220,7 @@ lookup_remote_mp(const struct cfm *cfm, uint64_t mpid) void cfm_init(void) { - unixctl_command_register("cfm/show", cfm_unixctl_show, NULL); + unixctl_command_register("cfm/show", "interface", cfm_unixctl_show, NULL); } /* Allocates a 'cfm' object called 'name'. 'cfm' should be initialized by diff --git a/lib/coverage.c b/lib/coverage.c index 2b8b6e6c..105cd37d 100644 --- a/lib/coverage.c +++ b/lib/coverage.c @@ -58,7 +58,7 @@ coverage_unixctl_log(struct unixctl_conn *conn, const char *args OVS_UNUSED, void coverage_init(void) { - unixctl_command_register("coverage/log", coverage_unixctl_log, NULL); + unixctl_command_register("coverage/log", "", coverage_unixctl_log, NULL); } /* Sorts coverage counters in descending order by count, within equal counts diff --git a/lib/lacp.c b/lib/lacp.c index 2504e6b3..a565419d 100644 --- a/lib/lacp.c +++ b/lib/lacp.c @@ -187,7 +187,7 @@ parse_lacp_packet(const struct ofpbuf *b) void lacp_init(void) { - unixctl_command_register("lacp/show", lacp_unixctl_show, NULL); + unixctl_command_register("lacp/show", "port", lacp_unixctl_show, NULL); } /* Creates a LACP object. */ diff --git a/lib/stress.c b/lib/stress.c index 53f6fc02..412df4fe 100644 --- a/lib/stress.c +++ b/lib/stress.c @@ -215,8 +215,10 @@ stress_unixctl_set(struct unixctl_conn *conn, const char *args_, void stress_init_command(void) { - unixctl_command_register("stress/list", stress_unixctl_list, NULL); - unixctl_command_register("stress/set", stress_unixctl_set, NULL); - unixctl_command_register("stress/enable", stress_unixctl_enable, NULL); - unixctl_command_register("stress/disable", stress_unixctl_disable, NULL); + unixctl_command_register("stress/list", "", stress_unixctl_list, NULL); + unixctl_command_register("stress/set", "option period [random | periodic]", + stress_unixctl_set, NULL); + unixctl_command_register("stress/enable", "", stress_unixctl_enable, NULL); + unixctl_command_register("stress/disable", "", + stress_unixctl_disable, NULL); } diff --git a/lib/unixctl.c b/lib/unixctl.c index ca90b396..7cc7e5e2 100644 --- a/lib/unixctl.c +++ b/lib/unixctl.c @@ -48,6 +48,7 @@ COVERAGE_DEFINE(unixctl_received); COVERAGE_DEFINE(unixctl_replied); struct unixctl_command { + const char *args; unixctl_cb_func *cb; void *aux; }; @@ -85,23 +86,18 @@ unixctl_help(struct unixctl_conn *conn, const char *args OVS_UNUSED, void *aux OVS_UNUSED) { struct ds ds = DS_EMPTY_INITIALIZER; - struct shash_node *node; - struct svec names; - const char *name; + const struct shash_node **nodes = shash_sort(&commands); size_t i; ds_put_cstr(&ds, "The available commands are:\n"); - svec_init(&names); - SHASH_FOR_EACH (node, &commands) { - svec_add(&names, node->name); + for (i = 0; i < shash_count(&commands); i++) { + const struct shash_node *node = nodes[i]; + const struct unixctl_command *command = node->data; + + ds_put_format(&ds, " %-23s%s\n", node->name, command->args); } - svec_sort(&names); - - SVEC_FOR_EACH (i, name, &names) { - ds_put_format(&ds, "\t%s\n", name); - } - svec_destroy(&names); + free(nodes); unixctl_command_reply(conn, 214, ds_cstr(&ds)); ds_destroy(&ds); @@ -115,13 +111,15 @@ unixctl_version(struct unixctl_conn *conn, const char *args OVS_UNUSED, } void -unixctl_command_register(const char *name, unixctl_cb_func *cb, void *aux) +unixctl_command_register(const char *name, const char *args, + unixctl_cb_func *cb, void *aux) { struct unixctl_command *command; assert(!shash_find_data(&commands, name) || shash_find_data(&commands, name) == cb); command = xmalloc(sizeof *command); + command->args = args; command->cb = cb; command->aux = aux; shash_add(&commands, name, command); @@ -212,8 +210,8 @@ unixctl_server_create(const char *path, struct unixctl_server **serverp) return 0; } - unixctl_command_register("help", unixctl_help, NULL); - unixctl_command_register("version", unixctl_version, NULL); + unixctl_command_register("help", "", unixctl_help, NULL); + unixctl_command_register("version", "", unixctl_version, NULL); server = xmalloc(sizeof *server); list_init(&server->conns); diff --git a/lib/unixctl.h b/lib/unixctl.h index 2ab9a685..d93e5e44 100644 --- a/lib/unixctl.h +++ b/lib/unixctl.h @@ -41,7 +41,7 @@ const char *unixctl_client_target(const struct unixctl_client *); struct unixctl_conn; typedef void unixctl_cb_func(struct unixctl_conn *, const char *args, void *aux); -void unixctl_command_register(const char *name, +void unixctl_command_register(const char *name, const char *args, unixctl_cb_func *cb, void *aux); void unixctl_command_reply(struct unixctl_conn *, int code, const char *body); diff --git a/lib/vlog.c b/lib/vlog.c index 1fe23837..301473cd 100644 --- a/lib/vlog.c +++ b/lib/vlog.c @@ -464,9 +464,11 @@ vlog_init(void) VLOG_ERR("current time is negative: %s (%ld)", s, (long int) now); } - unixctl_command_register("vlog/set", vlog_unixctl_set, NULL); - unixctl_command_register("vlog/list", vlog_unixctl_list, NULL); - unixctl_command_register("vlog/reopen", vlog_unixctl_reopen, NULL); + unixctl_command_register("vlog/set", + "{module[:facility[:level]] | PATTERN:facility:pattern}", + vlog_unixctl_set, NULL); + unixctl_command_register("vlog/list", "", vlog_unixctl_list, NULL); + unixctl_command_register("vlog/reopen", "", vlog_unixctl_reopen, NULL); } /* Closes the logging subsystem. */ diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index f9738e74..165732c9 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -4687,11 +4687,13 @@ ofproto_dpif_unixctl_init(void) } registered = true; - unixctl_command_register("ofproto/trace", ofproto_unixctl_trace, NULL); - unixctl_command_register("fdb/show", ofproto_unixctl_fdb_show, NULL); - - unixctl_command_register("ofproto/clog", ofproto_dpif_clog, NULL); - unixctl_command_register("ofproto/unclog", ofproto_dpif_unclog, NULL); + unixctl_command_register("ofproto/trace", + "bridge {tun_id in_port packet | odp_flow [-generate]}", + ofproto_unixctl_trace, NULL); + unixctl_command_register("fdb/show", "bridge", ofproto_unixctl_fdb_show, + NULL); + unixctl_command_register("ofproto/clog", "", ofproto_dpif_clog, NULL); + unixctl_command_register("ofproto/unclog", "", ofproto_dpif_unclog, NULL); } const struct ofproto_class ofproto_dpif_class = { diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 1309b492..1cc1e4e1 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -3115,5 +3115,5 @@ ofproto_unixctl_init(void) } registered = true; - unixctl_command_register("ofproto/list", ofproto_unixctl_list, NULL); + unixctl_command_register("ofproto/list", "", ofproto_unixctl_list, NULL); } diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index 06ac98be..530568ae 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -135,11 +135,11 @@ main(int argc, char *argv[]) daemonize_complete(); - unixctl_command_register("exit", ovsdb_server_exit, &exiting); - unixctl_command_register("ovsdb-server/compact", ovsdb_server_compact, - file); - unixctl_command_register("ovsdb-server/reconnect", ovsdb_server_reconnect, - jsonrpc); + unixctl_command_register("exit", "", ovsdb_server_exit, &exiting); + unixctl_command_register("ovsdb-server/compact", "", + ovsdb_server_compact, file); + unixctl_command_register("ovsdb-server/reconnect", "", + ovsdb_server_reconnect, jsonrpc); exiting = false; while (!exiting) { diff --git a/tests/test-openflowd.c b/tests/test-openflowd.c index 3cc3a751..4cd93127 100644 --- a/tests/test-openflowd.c +++ b/tests/test-openflowd.c @@ -109,7 +109,7 @@ main(int argc, char *argv[]) exit(EXIT_FAILURE); } - unixctl_command_register("exit", test_openflowd_exit, &exiting); + unixctl_command_register("exit", "", test_openflowd_exit, &exiting); VLOG_INFO("Open vSwitch version %s", VERSION BUILDNR); VLOG_INFO("OpenFlow protocol version 0x%02x", OFP_VERSION); diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 46d06182..33c9bd76 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -272,11 +272,11 @@ bridge_init(const char *remote) ovsdb_idl_omit(idl, &ovsrec_ssl_col_external_ids); /* Register unixctl commands. */ - unixctl_command_register("qos/show", qos_unixctl_show, NULL); - unixctl_command_register("bridge/dump-flows", bridge_unixctl_dump_flows, - NULL); - unixctl_command_register("bridge/reconnect", bridge_unixctl_reconnect, - NULL); + unixctl_command_register("qos/show", "interface", qos_unixctl_show, NULL); + unixctl_command_register("bridge/dump-flows", "bridge", + bridge_unixctl_dump_flows, NULL); + unixctl_command_register("bridge/reconnect", "[bridge]", + bridge_unixctl_reconnect, NULL); lacp_init(); bond_init(); cfm_init(); diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c index 875da698..4910d699 100644 --- a/vswitchd/ovs-vswitchd.c +++ b/vswitchd/ovs-vswitchd.c @@ -80,7 +80,7 @@ main(int argc, char *argv[]) if (retval) { exit(EXIT_FAILURE); } - unixctl_command_register("exit", ovs_vswitchd_exit, &exiting); + unixctl_command_register("exit", "", ovs_vswitchd_exit, &exiting); bridge_init(remote); free(remote); -- 2.30.2