X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utilities%2Fovs-vsctl.c;h=573c9481d29f3f335f9c8bf848700904502d5c1e;hb=35d25d444257d086411a4347f8142c53d5ca5d3f;hp=104f65eff3c9ca4090de87191900f95da8182353;hpb=9b1735a720bb83b855f77e7cb3e6e34fab741d6f;p=openvswitch diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index 104f65ef..573c9481 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -262,7 +262,7 @@ parse_options(int argc, char *argv[]) usage(); case 'V': - OVS_PRINT_VERSION(0, 0); + ovs_print_version(0, 0); exit(EXIT_SUCCESS); case 't': @@ -444,7 +444,7 @@ vsctl_fatal(const char *format, ...) message = xvasprintf(format, args); va_end(args); - vlog_set_levels(&VLM_vsctl, VLF_CONSOLE, VLL_EMER); + vlog_set_levels(&VLM_vsctl, VLF_CONSOLE, VLL_OFF); VLOG_ERR("%s", message); ovs_error(0, "%s", message); vsctl_exit(EXIT_FAILURE); @@ -785,8 +785,7 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info) struct ovsrec_port *port_cfg = br_cfg->ports[j]; if (!sset_add(&ports, port_cfg->name)) { - VLOG_WARN("%s: database contains duplicate port name", - port_cfg->name); + /* Duplicate port name. (We will warn about that later.) */ continue; } @@ -800,7 +799,6 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info) sset_destroy(&ports); sset_init(&bridges); - sset_init(&ports); for (i = 0; i < ovs->n_bridges; i++) { struct ovsrec_bridge *br_cfg = ovs->bridges[i]; struct vsctl_bridge *br; @@ -815,7 +813,18 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info) struct vsctl_port *port; size_t k; - if (!sset_add(&ports, port_cfg->name)) { + port = shash_find_data(&info->ports, port_cfg->name); + if (port) { + if (port_cfg == port->port_cfg) { + VLOG_WARN("%s: port is in multiple bridges (%s and %s)", + port_cfg->name, br->name, port->bridge->name); + } else { + /* Log as an error because this violates the database's + * uniqueness constraints, so the database server shouldn't + * have allowed it. */ + VLOG_ERR("%s: database contains duplicate port name", + port_cfg->name); + } continue; } @@ -841,9 +850,21 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info) struct ovsrec_interface *iface_cfg = port_cfg->interfaces[k]; struct vsctl_iface *iface; - if (shash_find(&info->ifaces, iface_cfg->name)) { - VLOG_WARN("%s: database contains duplicate interface name", - iface_cfg->name); + iface = shash_find_data(&info->ifaces, iface_cfg->name); + if (iface) { + if (iface_cfg == iface->iface_cfg) { + VLOG_WARN("%s: interface is in multiple ports " + "(%s and %s)", + iface_cfg->name, + iface->port->port_cfg->name, + port->port_cfg->name); + } else { + /* Log as an error because this violates the database's + * uniqueness constraints, so the database server + * shouldn't have allowed it. */ + VLOG_ERR("%s: database contains duplicate interface " + "name", iface_cfg->name); + } continue; } @@ -855,7 +876,6 @@ get_info(struct vsctl_context *ctx, struct vsctl_info *info) } } sset_destroy(&bridges); - sset_destroy(&ports); } static void @@ -3592,7 +3612,9 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, struct vsctl_context ctx; vsctl_context_init(&ctx, c, idl, txn, ovs, symtab); - (c->syntax->run)(&ctx); + if (c->syntax->run) { + (c->syntax->run)(&ctx); + } vsctl_context_done(&ctx, c); if (ctx.try_again) { @@ -3640,6 +3662,7 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, txn = the_idl_txn = NULL; switch (status) { + case TXN_UNCOMMITTED: case TXN_INCOMPLETE: NOT_REACHED(); @@ -3657,6 +3680,10 @@ do_vsctl(const char *args, struct vsctl_command *commands, size_t n_commands, case TXN_ERROR: vsctl_fatal("transaction error: %s", error); + case TXN_NOT_LOCKED: + /* Should not happen--we never call ovsdb_idl_set_lock(). */ + vsctl_fatal("database not locked"); + default: NOT_REACHED(); } @@ -3786,7 +3813,8 @@ static const struct vsctl_command_syntax all_commands[] = { /* Switch commands. */ {"emer-reset", 0, 0, pre_cmd_emer_reset, cmd_emer_reset, NULL, "", RW}, - /* Parameter commands. */ + /* Database commands. */ + {"comment", 0, INT_MAX, NULL, NULL, NULL, "", RO}, {"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},