[ovs-dev] [PATCH] connmgr: Fix violation of flow monitoring protocol description.

Guru Shetty guru at ovn.org
Thu Sep 28 21:35:41 UTC 2017


On 28 September 2017 at 10:38, Ben Pfaff <blp at ovn.org> wrote:

> nicira-ext.h says:
>
>  * 1. OVS sends an NXT_FLOW_MONITOR_PAUSED message to the controller,
> following
>  *    all the already queued notifications.  After it receives this
> message,
>  *    the controller knows that its view of the flow table, as represented
> by
>  *    flow monitor notifications, is incomplete.
>
> The actual implementation could send NXT_FLOW_MONITOR_PAUSED in the middle
> of a series of queued notifications.  This fixes it to always send it after
> those notifications.  Possibly this confused some controllers, since the
> documentation said that NXFME_ADD and NXFME_MODIFIED notifications wouldn't
> be sent between "pause" and "resume" messages, but this bug could cause
> them to be sent just after "pause".
>
> Signed-off-by: Ben Pfaff <blp at ovn.org>
>

Acked-by: Gurucharan Shetty <guru at ovn.org>


> VMware-BZ: #1919454
> ---
>  ofproto/connmgr.c | 28 ++++++++++++++--------------
>  1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/ofproto/connmgr.c b/ofproto/connmgr.c
> index c0ce828ce00a..30c627f43d9f 100644
> --- a/ofproto/connmgr.c
> +++ b/ofproto/connmgr.c
> @@ -2237,22 +2237,22 @@ ofmonitor_flush(struct connmgr *mgr)
>      struct ofconn *ofconn;
>
>      LIST_FOR_EACH (ofconn, node, &mgr->all_conns) {
> -        struct ofpbuf *msg;
> +        struct rconn_packet_counter *counter = ofconn->monitor_counter;
>
> +        struct ofpbuf *msg;
>          LIST_FOR_EACH_POP (msg, list_node, &ofconn->updates) {
> -            unsigned int n_bytes;
> -
> -            ofconn_send(ofconn, msg, ofconn->monitor_counter);
> -            n_bytes = rconn_packet_counter_n_bytes(
> ofconn->monitor_counter);
> -            if (!ofconn->monitor_paused && n_bytes > 128 * 1024) {
> -                struct ofpbuf *pause;
> -
> -                COVERAGE_INC(ofmonitor_pause);
> -                ofconn->monitor_paused = monitor_seqno++;
> -                pause = ofpraw_alloc_xid(OFPRAW_NXT_FLOW_MONITOR_PAUSED,
> -                                         OFP10_VERSION, htonl(0), 0);
> -                ofconn_send(ofconn, pause, ofconn->monitor_counter);
> -            }
> +            ofconn_send(ofconn, msg, counter);
> +        }
> +
> +        if (!ofconn->monitor_paused
> +            && rconn_packet_counter_n_bytes(counter) > 128 * 1024) {
> +            struct ofpbuf *pause;
> +
> +            COVERAGE_INC(ofmonitor_pause);
> +            ofconn->monitor_paused = monitor_seqno++;
> +            pause = ofpraw_alloc_xid(OFPRAW_NXT_FLOW_MONITOR_PAUSED,
> +                                     OFP10_VERSION, htonl(0), 0);
> +            ofconn_send(ofconn, pause, counter);
>          }
>      }
>  }
> --
> 2.10.2
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>


More information about the dev mailing list