[ovs-dev] [PATCH] ofproto: Delete fail-open flow when turning off fail-open mode.

Justin Pettit jpettit at nicira.com
Tue Feb 23 15:30:02 PST 2010


Looks good to me.

--Justin


On Feb 23, 2010, at 3:14 PM, Ben Pfaff wrote:

> fail_open_destroy() was not deleting the fail-open flow, so turning off
> fail-open mode did not work if fail-open had already been triggered.
> This commit fixes the problem.
> 
> Reported by Paul Ingram <paul at nicira.com>.
> ---
> ofproto/fail-open.c |   15 +++++++++++++--
> ofproto/ofproto.c   |    4 +++-
> 2 files changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/ofproto/fail-open.c b/ofproto/fail-open.c
> index 54a91cd..ff77de8 100644
> --- a/ofproto/fail-open.c
> +++ b/ofproto/fail-open.c
> @@ -1,5 +1,5 @@
> /*
> - * Copyright (c) 2008, 2009 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -76,6 +76,8 @@ struct fail_open {
>     struct rconn_packet_counter *bogus_packet_counter;
> };
> 
> +static void fail_open_recover(struct fail_open *);
> +
> /* Returns true if 'fo' should be in fail-open mode, otherwise false. */
> static inline bool
> should_fail_open(const struct fail_open *fo)
> @@ -155,7 +157,15 @@ fail_open_run(struct fail_open *fo)
> void
> fail_open_maybe_recover(struct fail_open *fo)
> {
> -    if (fail_open_is_active(fo) && rconn_is_admitted(fo->controller)) {
> +    if (rconn_is_admitted(fo->controller)) {
> +        fail_open_recover(fo);
> +    }
> +}
> +
> +static void
> +fail_open_recover(struct fail_open *fo)
> +{
> +    if (fail_open_is_active(fo)) {
>         flow_t flow;
> 
>         VLOG_WARN("No longer in fail-open mode");
> @@ -235,6 +245,7 @@ void
> fail_open_destroy(struct fail_open *fo)
> {
>     if (fo) {
> +        fail_open_recover(fo);
>         /* We don't own fo->controller. */
>         switch_status_unregister(fo->ss_cat);
>         rconn_packet_counter_destroy(fo->bogus_packet_counter);
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index a431cc7..b1f022f 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -679,6 +679,9 @@ ofproto_destroy(struct ofproto *p)
>         return;
>     }
> 
> +    /* Destroy fail-open early, because it touches the classifier. */
> +    ofproto_set_failure(p, false);
> +
>     ofproto_flush_flows(p);
>     classifier_destroy(&p->cls);
> 
> @@ -697,7 +700,6 @@ ofproto_destroy(struct ofproto *p)
>     switch_status_destroy(p->switch_status);
>     in_band_destroy(p->in_band);
>     discovery_destroy(p->discovery);
> -    fail_open_destroy(p->fail_open);
>     pinsched_destroy(p->miss_sched);
>     pinsched_destroy(p->action_sched);
>     netflow_destroy(p->netflow);
> -- 
> 1.6.6.1
> 
> 
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev_openvswitch.org





More information about the dev mailing list