+
+static void
+cfm_unixctl_set_fault(struct unixctl_conn *conn, int argc, const char *argv[],
+ void *aux OVS_UNUSED)
+{
+ const char *fault_str = argv[argc - 1];
+ int fault_override;
+ struct cfm *cfm;
+
+ if (!strcasecmp("true", fault_str)) {
+ fault_override = 1;
+ } else if (!strcasecmp("false", fault_str)) {
+ fault_override = 0;
+ } else if (!strcasecmp("normal", fault_str)) {
+ fault_override = -1;
+ } else {
+ unixctl_command_reply(conn, 501, "unknown fault string");
+ return;
+ }
+
+ if (argc > 2) {
+ cfm = cfm_find(argv[1]);
+ if (!cfm) {
+ unixctl_command_reply(conn, 501, "no such CFM object");
+ return;
+ }
+ cfm->fault_override = fault_override;
+ } else {
+ HMAP_FOR_EACH (cfm, hmap_node, &all_cfms) {
+ cfm->fault_override = fault_override;
+ }
+ }
+
+ unixctl_command_reply(conn, 200, "OK");
+}