From 526d174aaba5f3aa99e4294e89ca41cce96dbd35 Mon Sep 17 00:00:00 2001 From: Alex Wang Date: Wed, 16 Oct 2013 03:32:33 +0000 Subject: [PATCH] cfm: Add cfm_wake_time() function. This commit adds a new function "cfm_wake_time()" that returns the next wakeup time associated with the "struct cfm". Signed-off-by: Alex Wang Signed-off-by: Ethan Jackson Acked-by: Ethan Jackson --- lib/cfm.c | 19 +++++++++++++++++-- lib/cfm.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/cfm.c b/lib/cfm.c index e8f86dc9f..730a00f81 100644 --- a/lib/cfm.c +++ b/lib/cfm.c @@ -580,12 +580,27 @@ cfm_compose_ccm(struct cfm *cfm, struct ofpbuf *packet, void cfm_wait(struct cfm *cfm) OVS_EXCLUDED(mutex) { + poll_timer_wait_until(cfm_wake_time(cfm)); +} + + +/* Returns the next cfm wakeup time. */ +long long int +cfm_wake_time(struct cfm *cfm) OVS_EXCLUDED(mutex) +{ + long long int retval; + + if (!cfm) { + return LLONG_MAX; + } + ovs_mutex_lock(&mutex); - timer_wait(&cfm->tx_timer); - timer_wait(&cfm->fault_timer); + retval = MIN(cfm->tx_timer.t, cfm->fault_timer.t); ovs_mutex_unlock(&mutex); + return retval; } + /* Configures 'cfm' with settings from 's'. */ bool cfm_configure(struct cfm *cfm, const struct cfm_settings *s) diff --git a/lib/cfm.h b/lib/cfm.h index cff713f98..9d1ea4c35 100644 --- a/lib/cfm.h +++ b/lib/cfm.h @@ -82,4 +82,5 @@ int cfm_get_opup(const struct cfm *); void cfm_get_remote_mpids(const struct cfm *, uint64_t **rmps, size_t *n_rmps); const char *cfm_fault_reason_to_str(int fault); +long long int cfm_wake_time(struct cfm*); #endif /* cfm.h */ -- 2.47.0