/* CFM status query. */
struct ofproto_cfm_status {
- enum cfm_fault_reason faults; /* 0 if not faulted. */
- int health; /* Health status in [0,100] range. */
+ /* 0 if not faulted, otherwise a combination of one or more reasons. */
+ enum cfm_fault_reason faults;
/* 0 if the remote CFM endpoint is operationally down,
* 1 if the remote CFM endpoint is operationally up,
* mode. */
int remote_opstate;
+ /* Ordinarily a "health status" in the range 0...100 inclusive, with 0
+ * being worst and 100 being best, or -1 if the health status is not
+ * well-defined. */
+ int health;
+
/* MPIDs of remote maintenance points whose CCMs have been received. */
const uint64_t *rmps;
size_t n_rmps;
ovsrec_interface_set_cfm_remote_mpids(cfg,
(const int64_t *)status.rmps,
status.n_rmps);
- ovsrec_interface_set_cfm_health(cfg, &cfm_health, 1);
+ if (cfm_health >= 0) {
+ ovsrec_interface_set_cfm_health(cfg, &cfm_health, 1);
+ } else {
+ ovsrec_interface_set_cfm_health(cfg, NULL, 0);
+ }
}
}