+try_again:
+ /* Our transaction needs to be rerun, or a prerequisite was not met. Free
+ * resources and return so that the caller can try again. */
+ if (txn) {
+ ovsdb_idl_txn_abort(txn);
+ ovsdb_idl_txn_destroy(txn);
+ }
+ ovsdb_symbol_table_destroy(symtab);
+ for (c = commands; c < &commands[n_commands]; c++) {
+ ds_destroy(&c->output);
+ table_destroy(c->table);
+ free(c->table);
+ }
+ free(error);
+}
+
+static const struct vsctl_command_syntax all_commands[] = {
+ /* Open vSwitch commands. */
+ {"init", 0, 0, NULL, cmd_init, NULL, "", RW},
+
+ /* Bridge commands. */
+ {"add-br", 1, 3, pre_get_info, cmd_add_br, NULL, "--may-exist", RW},
+ {"del-br", 1, 1, pre_get_info, cmd_del_br, NULL, "--if-exists", RW},
+ {"list-br", 0, 0, pre_get_info, cmd_list_br, NULL, "", RO},
+ {"br-exists", 1, 1, pre_get_info, cmd_br_exists, NULL, "", RO},
+ {"br-to-vlan", 1, 1, pre_get_info, cmd_br_to_vlan, NULL, "", RO},
+ {"br-to-parent", 1, 1, pre_get_info, cmd_br_to_parent, NULL, "", RO},
+ {"br-set-external-id", 2, 3, pre_cmd_br_set_external_id,
+ cmd_br_set_external_id, NULL, "", RW},
+ {"br-get-external-id", 1, 2, pre_cmd_br_get_external_id,
+ cmd_br_get_external_id, NULL, "", RO},
+
+ /* Port commands. */
+ {"list-ports", 1, 1, pre_get_info, cmd_list_ports, NULL, "", RO},
+ {"add-port", 2, INT_MAX, pre_get_info, cmd_add_port, NULL, "--may-exist",
+ RW},
+ {"add-bond", 4, INT_MAX, pre_get_info, cmd_add_bond, NULL,
+ "--may-exist,--fake-iface", RW},
+ {"del-port", 1, 2, pre_get_info, cmd_del_port, NULL,
+ "--if-exists,--with-iface", RW},
+ {"port-to-br", 1, 1, pre_get_info, cmd_port_to_br, NULL, "", RO},
+
+ /* Interface commands. */
+ {"list-ifaces", 1, 1, pre_get_info, cmd_list_ifaces, NULL, "", RO},
+ {"iface-to-br", 1, 1, pre_get_info, cmd_iface_to_br, NULL, "", RO},
+
+ /* Controller commands. */
+ {"get-controller", 1, 1, pre_controller, cmd_get_controller, NULL, "", RO},
+ {"del-controller", 1, 1, pre_controller, cmd_del_controller, NULL, "", RW},
+ {"set-controller", 1, INT_MAX, pre_controller, cmd_set_controller, NULL,
+ "", RW},
+ {"get-fail-mode", 1, 1, pre_get_info, cmd_get_fail_mode, NULL, "", RO},
+ {"del-fail-mode", 1, 1, pre_get_info, cmd_del_fail_mode, NULL, "", RW},
+ {"set-fail-mode", 2, 2, pre_get_info, cmd_set_fail_mode, NULL, "", RW},
+
+ /* Manager commands. */
+ {"get-manager", 0, 0, pre_manager, cmd_get_manager, NULL, "", RO},
+ {"del-manager", 0, INT_MAX, pre_manager, cmd_del_manager, NULL, "", RW},
+ {"set-manager", 1, INT_MAX, pre_manager, cmd_set_manager, NULL, "", RW},
+
+ /* SSL commands. */
+ {"get-ssl", 0, 0, pre_cmd_get_ssl, cmd_get_ssl, NULL, "", RO},
+ {"del-ssl", 0, 0, pre_cmd_del_ssl, cmd_del_ssl, NULL, "", RW},
+ {"set-ssl", 3, 3, pre_cmd_set_ssl, cmd_set_ssl, NULL, "--bootstrap", RW},
+
+ /* Switch commands. */
+ {"emer-reset", 0, 0, pre_cmd_emer_reset, cmd_emer_reset, NULL, "", RW},
+
+ /* Parameter commands. */
+ {"get", 2, INT_MAX, pre_cmd_get, cmd_get, NULL, "--if-exists,--id=", RO},
+ {"list", 1, INT_MAX, pre_cmd_list, cmd_list, NULL, "--columns=", RO},
+ {"find", 1, INT_MAX, pre_cmd_find, cmd_find, NULL, "--columns=", RO},
+ {"set", 3, INT_MAX, pre_cmd_set, cmd_set, NULL, "", RW},
+ {"add", 4, INT_MAX, pre_cmd_add, cmd_add, NULL, "", RW},
+ {"remove", 4, INT_MAX, pre_cmd_remove, cmd_remove, NULL, "", RW},
+ {"clear", 3, INT_MAX, pre_cmd_clear, cmd_clear, NULL, "", RW},
+ {"create", 2, INT_MAX, pre_create, cmd_create, post_create, "--id=", RW},
+ {"destroy", 1, INT_MAX, pre_cmd_destroy, cmd_destroy, NULL, "--if-exists",
+ RW},
+ {"wait-until", 2, INT_MAX, pre_cmd_wait_until, cmd_wait_until, NULL, "",
+ RO},
+
+ {NULL, 0, 0, NULL, NULL, NULL, NULL, RO},
+};