From: Ben Pfaff Date: Wed, 6 Mar 2013 22:50:26 +0000 (-0800) Subject: bridge: Fix interpretation of 'health' member of struct ofproto_cfm_status. X-Git-Tag: sliver-openvswitch-1.10.90-1~10^2~95 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=4cd9ab26c3a265d168d082b9e50777b9306fe2f8;p=sliver-openvswitch.git bridge: Fix interpretation of 'health' member of struct ofproto_cfm_status. 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 Acked-by: Ethan Jackson --- diff --git a/ofproto/ofproto.h b/ofproto/ofproto.h index 3ea56df56..5960d7bc3 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 311753db7..f7932c74a 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); + } } }