summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Pfaff <blp@ovn.org>2017-12-08 12:36:57 -0800
committerBen Pfaff <blp@ovn.org>2017-12-22 11:51:47 -0800
commit9041097aeec97b41f8a2d607e2c72a99b4f60d6a (patch)
treeb95ae9d0a345b160339bdc06799bb1b0b7e7d894
parent80f66ee041423930d99a8f958082fffa4e82f0b9 (diff)
downloadopenvswitch-9041097aeec97b41f8a2d607e2c72a99b4f60d6a.tar.gz
ovsdb-client: Show even constraint-breaking data in "dump" output.
The ovsdb-client "dump" command is a fairly low-level tool that can be used, among other purposes, to debug the OVSDB protocol. It's better if it just prints what the server sends without being too judgmental about it. Thus, we might as well ignore constraints for the purpose of dumping tables. Signed-off-by: Ben Pfaff <blp@ovn.org> Acked-by: Justin Pettit <jpettit@ovn.org>
-rw-r--r--lib/ovsdb-data.c17
-rw-r--r--lib/ovsdb-data.h5
-rw-r--r--ovsdb/ovsdb-client.c5
3 files changed, 24 insertions, 3 deletions
diff --git a/lib/ovsdb-data.c b/lib/ovsdb-data.c
index cdd1bb653..87d8effd1 100644
--- a/lib/ovsdb-data.c
+++ b/lib/ovsdb-data.c
@@ -1341,6 +1341,23 @@ ovsdb_transient_datum_from_json(struct ovsdb_datum *datum,
return ovsdb_datum_from_json(datum, &relaxed_type, json, NULL);
}
+/* Parses 'json' as a datum of the type described by 'type', but ignoring all
+ * constraints. */
+struct ovsdb_error * OVS_WARN_UNUSED_RESULT
+ovsdb_unconstrained_datum_from_json(struct ovsdb_datum *datum,
+ const struct ovsdb_type *type,
+ const struct json *json)
+{
+ struct ovsdb_type relaxed_type;
+
+ ovsdb_base_type_init(&relaxed_type.key, type->key.type);
+ ovsdb_base_type_init(&relaxed_type.value, type->value.type);
+ relaxed_type.n_min = 0;
+ relaxed_type.n_max = UINT_MAX;
+
+ return ovsdb_datum_from_json(datum, &relaxed_type, json, NULL);
+}
+
static struct json *
ovsdb_base_to_json(const union ovsdb_atom *atom,
const struct ovsdb_base_type *base,
diff --git a/lib/ovsdb-data.h b/lib/ovsdb-data.h
index 84639c4a3..c842fe28f 100644
--- a/lib/ovsdb-data.h
+++ b/lib/ovsdb-data.h
@@ -173,6 +173,11 @@ struct ovsdb_error *ovsdb_transient_datum_from_json(
const struct ovsdb_type *,
const struct json *)
OVS_WARN_UNUSED_RESULT;
+struct ovsdb_error *
+ovsdb_unconstrained_datum_from_json(struct ovsdb_datum *,
+ const struct ovsdb_type *,
+ const struct json *)
+ OVS_WARN_UNUSED_RESULT;
struct json *ovsdb_datum_to_json(const struct ovsdb_datum *,
const struct ovsdb_type *);
diff --git a/ovsdb/ovsdb-client.c b/ovsdb/ovsdb-client.c
index 947cad0c7..f930c0e09 100644
--- a/ovsdb/ovsdb-client.c
+++ b/ovsdb/ovsdb-client.c
@@ -1312,9 +1312,8 @@ dump_table(const char *table_name, const struct shash *cols,
y, table_name, columns[x]->name);
}
- check_ovsdb_error(ovsdb_datum_from_json(&data[y][x],
- &columns[x]->type,
- json, NULL));
+ check_ovsdb_error(ovsdb_unconstrained_datum_from_json(
+ &data[y][x], &columns[x]->type, json));
}
}