+static void
+post_db_reload_check_init(void)
+{
+ n_neoteric_ifaces = 0;
+}
+
+static void
+post_db_reload_expect_iface(const struct ovsrec_interface *iface)
+{
+ if (n_neoteric_ifaces >= allocated_neoteric_ifaces) {
+ neoteric_ifaces = x2nrealloc(neoteric_ifaces,
+ &allocated_neoteric_ifaces,
+ sizeof *neoteric_ifaces);
+ }
+ neoteric_ifaces[n_neoteric_ifaces++] = iface->header_.uuid;
+}
+
+static void
+post_db_reload_do_checks(const struct vsctl_context *ctx)
+{
+ struct ds dead_ifaces = DS_EMPTY_INITIALIZER;
+ size_t i;
+
+ for (i = 0; i < n_neoteric_ifaces; i++) {
+ const struct uuid *uuid;
+
+ uuid = ovsdb_idl_txn_get_insert_uuid(ctx->txn, &neoteric_ifaces[i]);
+ if (uuid) {
+ const struct ovsrec_interface *iface;
+
+ iface = ovsrec_interface_get_for_uuid(ctx->idl, uuid);
+ if (iface && (!iface->ofport || *iface->ofport == -1)) {
+ ds_put_format(&dead_ifaces, "'%s', ", iface->name);
+ }
+ }
+ }
+
+ if (dead_ifaces.length) {
+ dead_ifaces.length -= 2; /* Strip off trailing comma and space. */
+ ovs_error(0, "Error detected while setting up %s. See ovs-vswitchd "
+ "log for details.", ds_cstr(&dead_ifaces));
+ }
+
+ ds_destroy(&dead_ifaces);
+}
+