From 4653c5583a3ec9d7184782fee3d2f93602795686 Mon Sep 17 00:00:00 2001 From: Ethan Jackson Date: Fri, 10 Aug 2012 16:36:18 -0700 Subject: [PATCH] cfm: Report opup as undefined if not in extended mode. The cfm_get_opup() function's result doesn't make sense when CFM is not configured in extended mode. This patch makes it report -1 in this case. Future patches will rely on this behavior. Signed-off-by: Ethan Jackson --- lib/cfm.c | 13 +++++++++---- lib/cfm.h | 2 +- ofproto/ofproto-dpif.c | 9 +++++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/lib/cfm.c b/lib/cfm.c index 134d8b78..fc999ab2 100644 --- a/lib/cfm.c +++ b/lib/cfm.c @@ -684,12 +684,17 @@ cfm_get_health(const struct cfm *cfm) /* Gets the operational state of 'cfm'. 'cfm' is considered operationally down * if it has received a CCM with the operationally down bit set from any of its - * remote maintenance points. Returns true if 'cfm' is operationally up. False - * otherwise. */ -bool + * remote maintenance points. Returns 1 if 'cfm' is operationally up, 0 if + * 'cfm' is operationally down, or -1 if 'cfm' has no operational state + * (because it isn't in extended mode). */ +int cfm_get_opup(const struct cfm *cfm) { - return cfm->remote_opup; + if (cfm->extended) { + return cfm->remote_opup; + } else { + return -1; + } } /* Populates 'rmps' with an array of remote maintenance points reachable by diff --git a/lib/cfm.h b/lib/cfm.h index 628d539f..de4c2992 100644 --- a/lib/cfm.h +++ b/lib/cfm.h @@ -71,7 +71,7 @@ bool cfm_should_process_flow(const struct cfm *cfm, const struct flow *); void cfm_process_heartbeat(struct cfm *, const struct ofpbuf *packet); int cfm_get_fault(const struct cfm *); int cfm_get_health(const struct cfm *); -bool cfm_get_opup(const struct cfm *); +int cfm_get_opup(const struct cfm *); void cfm_get_remote_mpids(const struct cfm *, const uint64_t **rmps, size_t *n_rmps); const char *cfm_fault_reason_to_str(int fault); diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 95195a30..5851dcd5 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -2464,9 +2464,14 @@ port_run(struct ofport_dpif *ofport) port_run_fast(ofport); if (ofport->cfm) { + int cfm_opup = cfm_get_opup(ofport->cfm); + cfm_run(ofport->cfm); - enable = enable && !cfm_get_fault(ofport->cfm) - && cfm_get_opup(ofport->cfm); + enable = enable && !cfm_get_fault(ofport->cfm); + + if (cfm_opup >= 0) { + enable = enable && cfm_opup; + } } if (ofport->bundle) { -- 2.30.2