[ovs-dev] [PATCH V4 08/10] bfd: Add bfd_wake_time() function.

Ethan Jackson ethan at nicira.com
Tue Oct 15 01:11:01 UTC 2013


Acked-by: Ethan Jackson <ethan at nicira.com>


On Fri, Oct 11, 2013 at 5:16 PM, Alex Wang <alexw at nicira.com> wrote:
> This commit adds a new function "bfd_wake_time()" that returns the
> next wakeup time associated with the "struct bfd".
>
> Signed-off-by: Alex Wang <alexw at nicira.com>
> ---
>
> v3 -> v4:
> - rebase to master.
>
> v2 -> v3:
> - fix the code duplication.
>
> v1 -> v2:
> - rebase to master.
>
> ---
>  lib/bfd.c |   26 ++++++++++++++++++++------
>  lib/bfd.h |    2 +-
>  2 files changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/lib/bfd.c b/lib/bfd.c
> index 6c9e920..115053b 100644
> --- a/lib/bfd.c
> +++ b/lib/bfd.c
> @@ -446,16 +446,30 @@ bfd_unref(struct bfd *bfd) OVS_EXCLUDED(mutex)
>  void
>  bfd_wait(const struct bfd *bfd) OVS_EXCLUDED(mutex)
>  {
> -    ovs_mutex_lock(&mutex);
> -    if (bfd->flags & FLAG_FINAL) {
> -        poll_immediate_wake();
> +    poll_timer_wait_until(bfd_wake_time(bfd));
> +}
> +
> +/* Returns the next wake up time. */
> +long long int
> +bfd_wake_time(const struct bfd *bfd) OVS_EXCLUDED(mutex)
> +{
> +    long long int retval;
> +
> +    if (!bfd) {
> +        return LLONG_MAX;
>      }
>
> -    poll_timer_wait_until(bfd->next_tx);
> -    if (bfd->state > STATE_DOWN) {
> -        poll_timer_wait_until(bfd->detect_time);
> +    ovs_mutex_lock(&mutex);
> +    if (bfd->flags & FLAG_FINAL) {
> +        retval = 0;
> +    } else {
> +        retval = bfd->next_tx;
> +        if (bfd->state > STATE_DOWN) {
> +            retval = MIN(bfd->detect_time, retval);
> +        }
>      }
>      ovs_mutex_unlock(&mutex);
> +    return retval;
>  }
>
>  void
> diff --git a/lib/bfd.h b/lib/bfd.h
> index 0e1e33d..f49a3d6 100644
> --- a/lib/bfd.h
> +++ b/lib/bfd.h
> @@ -49,5 +49,5 @@ void bfd_unref(struct bfd *);
>  bool bfd_forwarding(const struct bfd *);
>  void bfd_get_status(const struct bfd *, struct smap *);
>  void bfd_set_netdev(struct bfd *, const struct netdev *);
> -
> +long long int bfd_wake_time(const struct bfd *);
>  #endif /* bfd.h */
> --
> 1.7.9.5
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev



More information about the dev mailing list