+out:
+ ovs_mutex_unlock(&mutex);
+}
+
+static void
+cfm_unixctl_set_fault(struct unixctl_conn *conn, int argc, const char *argv[],
+ void *aux OVS_UNUSED) OVS_EXCLUDED(mutex)
+{
+ const char *fault_str = argv[argc - 1];
+ int fault_override;
+ struct cfm *cfm;
+
+ ovs_mutex_lock(&mutex);
+ 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_error(conn, "unknown fault string");
+ goto out;
+ }
+
+ if (argc > 2) {
+ cfm = cfm_find(argv[1]);
+ if (!cfm) {
+ unixctl_command_reply_error(conn, "no such CFM object");
+ goto out;
+ }
+ cfm->fault_override = fault_override;
+ } else {
+ HMAP_FOR_EACH (cfm, hmap_node, all_cfms) {
+ cfm->fault_override = fault_override;
+ }
+ }
+
+ seq_change(connectivity_seq_get());
+ unixctl_command_reply(conn, "OK");
+
+out:
+ ovs_mutex_unlock(&mutex);