+/* Checks if there are packets received during the time since last call.
+ * If forwarding_if_rx is enabled and packets are received, updates the
+ * forwarding_if_rx_detect_time. */
+static void
+bfd_check_rx(struct bfd *bfd) OVS_REQUIRES(mutex)
+{
+ uint64_t rx_packets = bfd_rx_packets(bfd);
+ int64_t diff;
+
+ diff = rx_packets - bfd->rx_packets;
+ bfd->rx_packets = rx_packets;
+ if (diff < 0) {
+ VLOG_INFO_RL(&rl, "rx_packets count is smaller than last time.");
+ }
+ if (bfd->forwarding_if_rx && diff > 0) {
+ bfd_forwarding_if_rx_update(bfd);
+ }
+}
+
+/* Updates the forwarding_if_rx_detect_time. */
+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();
+}
+