Skip to content

Commit

Permalink
cfm: Notify connectivity_seq on remote maintenance points change.
Browse files Browse the repository at this point in the history
Commit f23d157 ("ofproto-dpif: Don't poll ports when nothing changes")
did not ensure the update of the row of remote maintenance points in ovsdb
when it changes.  This commit makes the update happen by notifying the
global connectivity_seq.

Bug #1192265

Signed-off-by: Alex Wang <[email protected]>
Acked-by: Ben Pfaff <[email protected]>
  • Loading branch information
yew011 committed Mar 19, 2014
1 parent 64d3297 commit d627fff
Showing 1 changed file with 13 additions and 9 deletions.
22 changes: 13 additions & 9 deletions lib/cfm.c
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,10 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
if (timer_expired(&cfm->fault_timer)) {
long long int interval = cfm_fault_interval(cfm);
struct remote_mp *rmp, *rmp_next;
uint64_t old_flap_count = cfm->flap_count;
int old_health = cfm->health;
size_t old_rmps_array_len = cfm->rmps_array_len;
bool old_rmps_deleted = false;
bool old_cfm_fault = cfm->fault;
bool old_rmp_opup = cfm->remote_opup;
bool demand_override;
Expand All @@ -423,7 +427,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
cfm->health = 0;
} else {
int exp_ccm_recvd;
int old_health = cfm->health;

rmp = CONTAINER_OF(hmap_first(&cfm->remote_mps),
struct remote_mp, node);
Expand All @@ -438,10 +441,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
cfm->health = MIN(cfm->health, 100);
rmp->num_health_ccm = 0;
ovs_assert(cfm->health >= 0 && cfm->health <= 100);

if (cfm->health != old_health) {
seq_change(connectivity_seq_get());
}
}
cfm->health_interval = 0;
}
Expand All @@ -461,6 +460,7 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
" %lldms", cfm->name, rmp->mpid,
time_msec() - rmp->last_rx);
if (!demand_override) {
old_rmps_deleted = true;
hmap_remove(&cfm->remote_mps, &rmp->node);
free(rmp);
}
Expand All @@ -484,10 +484,6 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
cfm->remote_opup = true;
}

if (old_rmp_opup != cfm->remote_opup) {
seq_change(connectivity_seq_get());
}

if (hmap_is_empty(&cfm->remote_mps)) {
cfm->fault |= CFM_FAULT_RECV;
}
Expand All @@ -509,7 +505,15 @@ cfm_run(struct cfm *cfm) OVS_EXCLUDED(mutex)
if (old_cfm_fault == false || cfm->fault == false) {
cfm->flap_count++;
}
}

/* These variables represent the cfm session status, it is desirable
* to update them to database immediately after change. */
if (old_health != cfm->health
|| old_rmp_opup != cfm->remote_opup
|| (old_rmps_array_len != cfm->rmps_array_len || old_rmps_deleted)
|| old_cfm_fault != cfm->fault
|| old_flap_count != cfm->flap_count) {
seq_change(connectivity_seq_get());
}

Expand Down

0 comments on commit d627fff

Please sign in to comment.