X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=utilities%2Fovs-vsctl.c;h=66d3d9805a77dbb3c3a2353a31043ec844271720;hb=777ece0952d1087e2ac1c3aa33e9dda1fe60add6;hp=091e6bc7b8af2ed9494f305b5bfcf90ddb846640;hpb=76ce9432393df462e2030036021ea60096a734d4;p=openvswitch diff --git a/utilities/ovs-vsctl.c b/utilities/ovs-vsctl.c index 091e6bc7..66d3d980 100644 --- a/utilities/ovs-vsctl.c +++ b/utilities/ovs-vsctl.c @@ -439,6 +439,9 @@ SSL commands:\n\ del-ssl delete the SSL configuration\n\ set-ssl PRIV-KEY CERT CA-CERT set the SSL configuration\n\ \n\ +Switch commands:\n\ + emer-reset reset switch to known good state\n\ +\n\ Database commands:\n\ list TBL [REC] list RECord (or all records) in TBL\n\ get TBL REC COL[:KEY] print values of COLumns in RECORD in TBL\n\ @@ -856,6 +859,84 @@ cmd_init(struct vsctl_context *ctx OVS_UNUSED) { } +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_controller(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_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); + } +} + static void cmd_add_br(struct vsctl_context *ctx) { @@ -1798,6 +1879,12 @@ static const struct vsctl_table_class tables[] = { {&ovsrec_table_ssl, {{&ovsrec_table_open_vswitch, NULL, &ovsrec_open_vswitch_col_ssl}}}, + {&ovsrec_table_sflow, + {{&ovsrec_table_bridge, + &ovsrec_bridge_col_name, + &ovsrec_bridge_col_sflow}, + {NULL, NULL, NULL}}}, + {NULL, {{NULL, NULL, NULL}, {NULL, NULL, NULL}}} }; @@ -2645,6 +2732,9 @@ static const struct vsctl_command_syntax all_commands[] = { {"del-ssl", 0, 0, cmd_del_ssl, NULL, ""}, {"set-ssl", 3, 3, cmd_set_ssl, NULL, "--bootstrap"}, + /* Switch commands. */ + {"emer-reset", 0, 0, cmd_emer_reset, NULL, ""}, + /* Parameter commands. */ {"get", 3, INT_MAX, cmd_get, NULL, "--if-exists"}, {"list", 1, INT_MAX, cmd_list, NULL, ""},