Commit 9a9e3786b3a8 (ofproto: Merge all the CFM query functions into one.) mistakenly interpreted struct ofproto_cfm_status as always being in the range [0,100]. It can in fact take the value -1 if the health status is not currently well-defined.
Signed-off-by: Ben Pfaff <b...@nicira.com> --- ofproto/ofproto.h | 9 +++++++-- vswitchd/bridge.c | 6 +++++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h index 3ea56df..5960d7b 100644 --- a/ofproto/ofproto.h +++ b/ofproto/ofproto.h @@ -362,8 +362,8 @@ void ofproto_free_ofproto_controller_info(struct shash *); /* 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, @@ -371,6 +371,11 @@ struct ofproto_cfm_status { * 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; diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 311753d..f7932c7 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -1779,7 +1779,11 @@ iface_refresh_cfm_stats(struct iface *iface) 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); + } } } -- 1.7.2.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev