Thanks Paul.  As part of this patch, I moved your name to the list of
people who've contributed code in the AUTHORS file.

Acked-by: Ethan Jackson <[email protected]>


On Fri, Aug 2, 2013 at 4:12 PM, Paul Ingram <[email protected]> wrote:
> The remote opstate for a CFM interface is presumed to be up unless a CCM is
> received which signals opstate down. This means than an interface configured
> for CFM demand mode may incorrectly appear to be opstate up if it has not
> received a CCM within the last fault interval.
>
> We should remember the last remote opstate for a CFM interface and only
> change it when a CCM arrives signaling a change.
>
> Bug #18806
> Signed-off-by: Paul Ingram <[email protected]>
> ---
>  lib/cfm.c |   16 +++++++++++++---
>  1 file changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/lib/cfm.c b/lib/cfm.c
> index 235d121..a7cc890 100644
> --- a/lib/cfm.c
> +++ b/lib/cfm.c
> @@ -350,6 +350,8 @@ cfm_run(struct cfm *cfm)
>          struct remote_mp *rmp, *rmp_next;
>          bool old_cfm_fault = cfm->fault;
>          bool demand_override;
> +        bool rmp_set_opup = false;
> +        bool rmp_set_opdown = false;
>
>          cfm->fault = cfm->recv_fault;
>          cfm->recv_fault = 0;
> @@ -359,7 +361,6 @@ cfm_run(struct cfm *cfm)
>          cfm->rmps_array = xmalloc(hmap_count(&cfm->remote_mps) *
>                                    sizeof *cfm->rmps_array);
>
> -        cfm->remote_opup = true;
>          if (cfm->health_interval == CFM_HEALTH_INTERVAL) {
>              /* Calculate the cfm health of the interface.  If the number of
>               * remote_mpids of a cfm interface is > 1, the cfm health is
> @@ -411,14 +412,23 @@ cfm_run(struct cfm *cfm)
>              } else {
>                  rmp->recv = false;
>
> -                if (!rmp->opup) {
> -                    cfm->remote_opup = rmp->opup;
> +                if (rmp->opup) {
> +                    rmp_set_opup = true;
> +                } else {
> +                    rmp_set_opdown = true;
>                  }
>
>                  cfm->rmps_array[cfm->rmps_array_len++] = rmp->mpid;
>              }
>          }
>
> +        if (rmp_set_opdown) {
> +            cfm->remote_opup = false;
> +        }
> +        else if (rmp_set_opup) {
> +            cfm->remote_opup = true;
> +        }
> +
>          if (hmap_is_empty(&cfm->remote_mps)) {
>              cfm->fault |= CFM_FAULT_RECV;
>          }
> --
> 1.7.9.5
>
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev
X-CudaMail-Whitelist-To: [email protected]
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to