diff options
-rw-r--r-- | AUTHORS | 2 | ||||
-rw-r--r-- | lib/cfm.c | 16 |
2 files changed, 14 insertions, 4 deletions
@@ -67,6 +67,7 @@ Natasha Gude natasha@nicira.com Neil McKee neil.mckee@inmon.com Paraneetharan Chandrasekaran paraneetharanc@gmail.com Paul Fazzone pfazzone@nicira.com +Paul Ingram paul@nicira.com Pavithra Ramesh paramesh@vmware.com Philippe Jung phil.jung@free.fr Pravin B Shelar pshelar@nicira.com @@ -186,7 +187,6 @@ Nagi Reddy Jonnala njonnala@Brocade.com Niklas Andersson nandersson@nicira.com Padmanabhan Krishnan kprad1@yahoo.com Pankaj Thakkar thakkar@nicira.com -Paul Ingram paul@nicira.com Paulo Cravero pcravero@as2594.net Peter Balland peter@nicira.com Peter Phaal peter.phaal@inmon.com @@ -390,6 +390,8 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex) struct remote_mp *rmp, *rmp_next; bool old_cfm_fault = cfm->fault; bool demand_override; + bool rmp_set_opup = false; + bool rmp_set_opdown = false; cfm->fault = cfm->recv_fault; cfm->recv_fault = 0; @@ -399,7 +401,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex) cfm->rmps_array = xmalloc(hmap_count(&cfm->remote_mps) * sizeof *cfm->rmps_array); - cfm->remote_opup = true; if (cfm->health_interval == CFM_HEALTH_INTERVAL) { /* Calculate the cfm health of the interface. If the number of * remote_mpids of a cfm interface is > 1, the cfm health is @@ -451,14 +452,23 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex) } else { rmp->recv = false; - if (!rmp->opup) { - cfm->remote_opup = rmp->opup; + if (rmp->opup) { + rmp_set_opup = true; + } else { + rmp_set_opdown = true; } cfm->rmps_array[cfm->rmps_array_len++] = rmp->mpid; } } + if (rmp_set_opdown) { + cfm->remote_opup = false; + } + else if (rmp_set_opup) { + cfm->remote_opup = true; + } + if (hmap_is_empty(&cfm->remote_mps)) { cfm->fault |= CFM_FAULT_RECV; } |