From: Ben Pfaff Date: Thu, 24 Jun 2010 18:16:03 +0000 (-0700) Subject: ovs-vsctl: Make partial matches on record names optional. X-Git-Tag: v1.1.0pre1~211 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=53de028597806812cc2dc69a8f77bcc9bb1f9601;p=sliver-openvswitch.git ovs-vsctl: Make partial matches on record names optional. The wait-until command to be added to ovs-vsctl in an upcoming commit doesn't really want to wait for partial matches: if I'm waiting for br1 to be created I really don't want to be fooled by br10. So this commit adds infrastructure to avoid such partial matches. --- diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index b7577a019..b5502fdfb 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -1967,7 +1967,8 @@ get_table(const char *table_name) static const struct ovsdb_idl_row * get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table, - const struct vsctl_row_id *id, const char *record_id) + const struct vsctl_row_id *id, const char *record_id, + bool partial_match_ok) { const struct ovsdb_idl_row *referrer, *final; @@ -1999,8 +2000,11 @@ get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table, ovsdb_idl_txn_read(row, id->name_column, &name); if (name.n == 1) { - unsigned int score = score_partial_match(name.keys[0].string, - record_id); + unsigned int score; + + score = (partial_match_ok + ? score_partial_match(name.keys[0].string, record_id) + : !strcmp(name.keys[0].string, record_id)); if (score > best_score) { referrer = row; best_score = score; @@ -2040,8 +2044,9 @@ get_row_by_id(struct vsctl_context *ctx, const struct vsctl_table_class *table, } static const struct ovsdb_idl_row * -get_row(struct vsctl_context *ctx, - const struct vsctl_table_class *table, const char *record_id) +get_row__(struct vsctl_context *ctx, + const struct vsctl_table_class *table, const char *record_id, + bool partial_match_ok) { const struct ovsdb_idl_row *row; struct uuid uuid; @@ -2052,7 +2057,8 @@ get_row(struct vsctl_context *ctx, int i; for (i = 0; i < ARRAY_SIZE(table->row_ids); i++) { - row = get_row_by_id(ctx, table, &table->row_ids[i], record_id); + row = get_row_by_id(ctx, table, &table->row_ids[i], record_id, + partial_match_ok); if (row) { break; } @@ -2061,6 +2067,13 @@ get_row(struct vsctl_context *ctx, return row; } +static const struct ovsdb_idl_row * +get_row(struct vsctl_context *ctx, + const struct vsctl_table_class *table, const char *record_id) +{ + return get_row__(ctx, table, record_id, true); +} + static const struct ovsdb_idl_row * must_get_row(struct vsctl_context *ctx, const struct vsctl_table_class *table, const char *record_id)