Indexing is different between ovsdb_row to ovsdb_monitor_row. To be able to evaluate conditions on ovsdb_monitor_row we need this mapping.
signed-off-by: Liran Schour <lir...@il.ibm.com> --- ovsdb/monitor.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ovsdb/monitor.c b/ovsdb/monitor.c index 0dde54e..51f4e09 100644 --- a/ovsdb/monitor.c +++ b/ovsdb/monitor.c @@ -116,6 +116,9 @@ struct ovsdb_monitor_table { struct ovsdb_monitor_column *columns; size_t n_columns; + /* map between column->index to columns */ + unsigned int *columns_index_map; + /* Contains 'ovsdb_monitor_changes' indexed by 'transaction'. */ struct hmap changes; }; @@ -347,6 +350,8 @@ ovsdb_monitor_add_table(struct ovsdb_monitor *m, mt->table = table; shash_add(&m->tables, table->schema->name, mt); hmap_init(&mt->changes); + mt->columns_index_map = + xmalloc(sizeof(unsigned int) * shash_count(&table->schema->columns)); } void @@ -1065,6 +1070,7 @@ struct ovsdb_monitor * ovsdb_monitor_add(struct ovsdb_monitor *new_dbmon) { struct ovsdb_monitor *dbmon; + struct shash_node *node; size_t hash; /* New_dbmon should be associated with only one jsonrpc @@ -1078,6 +1084,16 @@ ovsdb_monitor_add(struct ovsdb_monitor *new_dbmon) } } + /* Prepare columns index map */ + SHASH_FOR_EACH (node, &new_dbmon->tables) { + struct ovsdb_monitor_table *mt = node->data; + int i; + + for (i = 0; i < mt->n_columns; i++) { + mt->columns_index_map[mt->columns[i].column->index] = i; + } + } + hmap_insert(&ovsdb_monitors, &new_dbmon->hmap_node, hash); return new_dbmon; } @@ -1106,6 +1122,7 @@ ovsdb_monitor_destroy(struct ovsdb_monitor *dbmon) } hmap_destroy(&mt->changes); free(mt->columns); + free(mt->columns_index_map); free(mt); } shash_destroy(&dbmon->tables); -- 2.1.4 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev