+ ovsdb_idl_add_column(ctx->idl, &ovsrec_open_vswitch_col_managers);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_open_vswitch_col_ssl);
+
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_controller);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_fail_mode);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_mirrors);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_netflow);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_sflow);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_flood_vlans);
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_bridge_col_other_config);
+
+ ovsdb_idl_add_column(ctx->idl, &ovsrec_port_col_other_config);
+
+ ovsdb_idl_add_column(ctx->idl,
+ &ovsrec_interface_col_ingress_policing_rate);
+ ovsdb_idl_add_column(ctx->idl,
+ &ovsrec_interface_col_ingress_policing_burst);
+}
+
+static void
+cmd_emer_reset(struct vsctl_context *ctx)
+{
+ const struct ovsdb_idl *idl = ctx->idl;
+ const struct ovsrec_bridge *br;
+ const struct ovsrec_port *port;
+ const struct ovsrec_interface *iface;
+ const struct ovsrec_mirror *mirror, *next_mirror;
+ const struct ovsrec_controller *ctrl, *next_ctrl;
+ const struct ovsrec_netflow *nf, *next_nf;
+ const struct ovsrec_ssl *ssl, *next_ssl;
+ const struct ovsrec_sflow *sflow, *next_sflow;
+
+ /* Reset the Open_vSwitch table. */
+ ovsrec_open_vswitch_set_managers(ctx->ovs, NULL, 0);
+ ovsrec_open_vswitch_set_ssl(ctx->ovs, NULL);
+
+ OVSREC_BRIDGE_FOR_EACH (br, idl) {
+ int i;
+ char *hw_key = "hwaddr";
+ char *hw_val = NULL;
+
+ ovsrec_bridge_set_controller(br, NULL, 0);
+ ovsrec_bridge_set_fail_mode(br, NULL);
+ ovsrec_bridge_set_mirrors(br, NULL, 0);
+ ovsrec_bridge_set_netflow(br, NULL);
+ ovsrec_bridge_set_sflow(br, NULL);
+ ovsrec_bridge_set_flood_vlans(br, NULL, 0);
+
+ /* We only want to save the "hwaddr" key from other_config. */
+ for (i=0; i < br->n_other_config; i++) {
+ if (!strcmp(br->key_other_config[i], hw_key)) {
+ hw_val = br->value_other_config[i];
+ break;
+ }
+ }
+ if (hw_val) {
+ char *val = xstrdup(hw_val);
+ ovsrec_bridge_set_other_config(br, &hw_key, &val, 1);
+ free(val);
+ } else {
+ ovsrec_bridge_set_other_config(br, NULL, NULL, 0);
+ }
+ }
+
+ OVSREC_PORT_FOR_EACH (port, idl) {
+ ovsrec_port_set_other_config(port, NULL, NULL, 0);
+ }
+
+ OVSREC_INTERFACE_FOR_EACH (iface, idl) {
+ /* xxx What do we do about gre/patch devices created by mgr? */
+
+ ovsrec_interface_set_ingress_policing_rate(iface, 0);
+ ovsrec_interface_set_ingress_policing_burst(iface, 0);
+ }
+
+ OVSREC_MIRROR_FOR_EACH_SAFE (mirror, next_mirror, idl) {
+ ovsrec_mirror_delete(mirror);
+ }
+
+ OVSREC_CONTROLLER_FOR_EACH_SAFE (ctrl, next_ctrl, idl) {
+ ovsrec_controller_delete(ctrl);
+ }
+
+ OVSREC_NETFLOW_FOR_EACH_SAFE (nf, next_nf, idl) {
+ ovsrec_netflow_delete(nf);
+ }
+
+ OVSREC_SSL_FOR_EACH_SAFE (ssl, next_ssl, idl) {
+ ovsrec_ssl_delete(ssl);
+ }
+
+ OVSREC_SFLOW_FOR_EACH_SAFE (sflow, next_sflow, idl) {
+ ovsrec_sflow_delete(sflow);
+ }