+ ovsdb_idl_txn_add_comment(txn, "ovs-brcompatd: delbr %s", br_name);
+
+ /* Delete everything that the bridge points to, then delete the bridge
+ * itself. */
+ while (br->n_ports > 0) {
+ del_port(br, br->ports[0]);
+ }
+ for (i = 0; i < br->n_mirrors; i++) {
+ ovsrec_mirror_delete(br->mirrors[i]);
+ }
+ if (br->netflow) {
+ ovsrec_netflow_delete(br->netflow);
+ }
+ if (br->sflow) {
+ ovsrec_sflow_delete(br->sflow);
+ }
+ for (i = 0; i < br->n_controller; i++) {
+ ovsrec_controller_delete(br->controller[i]);
+ }
+
+ /* Remove 'br' from the vswitch's list of bridges. */
+ bridges = xmalloc(sizeof *ovs->bridges * ovs->n_bridges);
+ for (i = n = 0; i < ovs->n_bridges; i++) {
+ if (ovs->bridges[i] != br) {
+ bridges[n++] = ovs->bridges[i];
+ }
+ }
+ ovsrec_open_vswitch_set_bridges(ovs, bridges, n);
+ free(bridges);
+
+ /* Delete the bridge itself. */
+ ovsrec_bridge_delete(br);
+
+ return commit_txn(txn, true);