[ovs-dev] [PATCH 1/2] bfd: Change the update of forwarding_if_rx_detect_time.

Alex Wang alexw at nicira.com
Mon Dec 9 21:40:35 UTC 2013


Currently, the ovs updates the rx_packet counter approximately every
2000 ms.  If there is rx_packet and forwarding_if_rx is enabled, the
forwarding_if_rx_detect_time will be incremented by 2000 ms.  And as
long as forwarding_if_rx_detect_time is greater than current time,
the forwarding flag value is true.

However, this can introduce forwarding flag flaps, when the current
time just passes forwarding_if_rx_detect_time and some other thread
calls bfd_forwarding() before the rx_packet counter and
forwarding_if_rx_detect_time are updated.

This commit fixes the above issue by increasing the increment of
forwarding_if_rx_detect_time to 3000 ms.  So we have 1000 ms to
compensate for the race condition.

Reported-by: Joe Stringer <joestringer at nicira.com>
Signed-off-by: Alex Wang <alexw at nicira.com>
---
 lib/bfd.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/bfd.c b/lib/bfd.c
index 25129c9..4f7017d 100644
--- a/lib/bfd.c
+++ b/lib/bfd.c
@@ -1105,7 +1105,7 @@ static void
 bfd_forwarding_if_rx_update(struct bfd *bfd) OVS_REQUIRES(mutex)
 {
     int64_t incr = bfd_rx_interval(bfd) * bfd->mult;
-    bfd->forwarding_if_rx_detect_time = MAX(incr, 2000) + time_msec();
+    bfd->forwarding_if_rx_detect_time = MAX(incr, 3000) + time_msec();
     bfd_forwarding__(bfd);
 }
 
-- 
1.7.9.5




More information about the dev mailing list