cfm: Add cfm_wake_time() function.
authorAlex Wang <alexw@nicira.com>
Wed, 16 Oct 2013 03:32:33 +0000 (03:32 +0000)
committerEthan Jackson <ethan@nicira.com>
Thu, 17 Oct 2013 01:08:05 +0000 (18:08 -0700)
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 <alexw@nicira.com>
Signed-off-by: Ethan Jackson <ethan@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
lib/cfm.c
lib/cfm.h

index e8f86dc..730a00f 100644 (file)
--- 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)
index cff713f..9d1ea4c 100644 (file)
--- 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 */