- struct ovsdb_jsonrpc_monitor_aux *aux = aux_;
- const struct ovsdb_jsonrpc_monitor *m = aux->monitor;
- struct ovsdb_table *table = new ? new->table : old->table;
- enum ovsdb_jsonrpc_monitor_selection type;
- struct json *old_json, *new_json;
- struct json *row_json;
- char uuid[UUID_LEN + 1];
- size_t i;
-
- if (!aux->mt || table != aux->mt->table) {
- aux->mt = shash_find_data(&m->tables, table->schema->name);
- aux->table_json = NULL;
- if (!aux->mt) {
- /* We don't care about rows in this table at all. Tell the caller
- * to skip it. */
- return false;
- }
- }
-
- type = (aux->initial ? OJMS_INITIAL
- : !old ? OJMS_INSERT
- : !new ? OJMS_DELETE
- : OJMS_MODIFY);
- if (!(aux->mt->select & type)) {
- /* We don't care about this type of change (but do want to be called
- * back for changes to other rows in the same table). */
- return true;
- }
-
- if (type == OJMS_MODIFY && !any_reportable_change(aux->mt, changed)) {
- /* Nothing of interest changed. */
- return true;
- }
-
- old_json = new_json = NULL;
- if (type & (OJMS_DELETE | OJMS_MODIFY)) {
- old_json = json_object_create();
- }
- if (type & (OJMS_INITIAL | OJMS_INSERT | OJMS_MODIFY)) {
- new_json = json_object_create();
- }
- for (i = 0; i < aux->mt->n_columns; i++) {
- const struct ovsdb_jsonrpc_monitor_column *c = &aux->mt->columns[i];
- const struct ovsdb_column *column = c->column;
- unsigned int idx = c->column->index;
-
- if (!(type & c->select)) {
- /* We don't care about this type of change for this particular
- * column (but we will care about it for some other column). */
- continue;
- }