You made changes to a few randomly selected OpenFlow messages.  What
is special about these messages?  Why change them and not others?

On Wed, May 23, 2012 at 11:59:15AM +0000, Prabina Pattnaik wrote:
> Hi Ben,
> 
> Design description and rationale -
> ---------------------------------------
> We are adding switch configuration message (OFPT_FEATURE_REQUEST) and 
> statistics message (OFPT_STATS_REQUEST) as a condition in vconn.c file 
> to prevent the reset of connection on receiving incorrect version in 
> feature request and stat request packets from controller.
> Checking the version mismatch between stat request / feature request 
> packets and version supported by switch in ofproto.c file. If versions 
> are different then return the error packet to controller.  
> 
> Testing after merging patch in OVS 1.4.1
> -------------------------------------------------
> 
> 1.    Verify OFPET_BAD_REQUEST  OFPBRC_BAD_VERSION code message from 
> switch to controller for  switch description statistics,  aggregate 
> statistics, 
> table statistics,  port statistics and queue statistics when there is 
> mismatch version.
> 2.    Verify stats request  and reply message from controller to switch 
> for switch description statistics,  aggregate statistics, table statistics,  
> port statistics and queue statistics when version match.
> 3.    Verify OFPET_BAD_REQUEST  OFPBRC_BAD_VERSION code message from switch 
> to controller for  feature request message when there is mismatch version.
> 4.    Verify feature request and feature reply messages from controller to 
> switch for switch description statistics,  aggregate statistics, table 
> statistics,  
> flow statistics and queue statistics when version match.
> 
> 
> Patch
> ---------
>  ofproto/ofproto.c               |   21 +++++++++++++++++++++
>  lib/vconn.c |    4 +++-
>  2 files changed, 24 insertions(+), 1 deletions(-)
> 
> diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
> index 9057215..0a7fbcc 100644
> --- a/ofproto/ofproto.c
> +++ b/ofproto/ofproto.c
> @@ -2894,6 +2894,9 @@ handle_openflow__(struct ofconn *ofconn, const struct 
> ofpbuf *msg)
>          return handle_echo_request(ofconn, oh);
>  
>      case OFPUTIL_OFPT_FEATURES_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION); 
> +        }
>          return handle_features_request(ofconn, oh);
>  
>      case OFPUTIL_OFPT_GET_CONFIG_REQUEST:
> @@ -2933,23 +2936,41 @@ handle_openflow__(struct ofconn *ofconn, const struct 
> ofpbuf *msg)
>  
>          /* Statistics requests. */
>      case OFPUTIL_OFPST_DESC_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION);
> +        }
>          return handle_desc_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_OFPST_FLOW_REQUEST:
>      case OFPUTIL_NXST_FLOW_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION); 
> +        }
>          return handle_flow_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_OFPST_AGGREGATE_REQUEST:
>      case OFPUTIL_NXST_AGGREGATE_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION); 
> +        }
>          return handle_aggregate_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_OFPST_TABLE_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION);
> +        }
>          return handle_table_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_OFPST_PORT_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION); 
> +        }
>          return handle_port_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_OFPST_QUEUE_REQUEST:
> +        if (oh->version != OFP_VERSION) {
> +            return ofp_mkerr(OFPET_BAD_REQUEST,OFPBRC_BAD_VERSION);
> +         }
>          return handle_queue_stats_request(ofconn, msg->data);
>  
>      case OFPUTIL_MSG_INVALID:
> 
> diff --git a/lib/vconn.c b/lib/vconn.c
> index 6ea9366..c499623 100644
> --- a/lib/vconn.c
> +++ b/lib/vconn.c
> @@ -546,7 +546,9 @@ do_recv(struct vconn *vconn, struct ofpbuf **msgp)
>              && oh->type != OFPT_ERROR
>              && oh->type != OFPT_ECHO_REQUEST
>              && oh->type != OFPT_ECHO_REPLY
> -            && oh->type != OFPT_VENDOR)
> +            && oh->type != OFPT_VENDOR
> +            && oh->type != OFPT_FEATURES_REQUEST
> +            && oh->type != OFPT_STATS_REQUEST)
>          {
>              if (vconn->version < 0) {
>                  VLOG_ERR_RL(&bad_ofmsg_rl,
> 
> Regards,
> Prabina
> 
> -----Original Message-----
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Ben Pfaff
> Sent: Tuesday, May 22, 2012 11:40 PM
> To: Varun Gupta
> Cc: [email protected]
> Subject: Re: [ovs-discuss] OpenVSwitch - "OFPBRC_BAD_VERSION" error packet 
> not received when there is version mismatch between stats request and stats 
> reply
> 
> Can you provide a patch?  I'll apply it, if it's reasonable.
> 
> On Tue, May 22, 2012 at 07:40:49AM +0000, Varun Gupta wrote:
> > The two issues I raised (stats request/reply and feature request/reply) 
> > were found when we were evaluating the switch's response in case the 
> > controller behave indifferently. 
> > Our objective is to make OVS more robust and respond with an error 
> > (OFPBRC_BAD_VERSION)  in the cases of 'OFPET_BAD_REQUEST' error type as 
> > mentioned in spec (1.0):
> > 
> > -------------------------------------------
> > 
> > For the OFPET_BAD_REQUEST error type, the following codes are currently de-
> > fined:
> > /* ofp_error_msg 'code' values for OFPET_BAD_REQUEST. 'data' contains at 
> > least
> > * the first 64 bytes of the failed request. */
> > enum ofp_bad_request_code {
> > OFPBRC_BAD_VERSION, /* ofp_header.version not supported. */
> > ----------
> > ----------
> > };
> > 
> > ------------------------------------------
> > 
> > Regards,
> > Varun
> > 
> > -----Original Message-----
> > From: Ben Pfaff [mailto:[email protected]] 
> > Sent: Monday, May 21, 2012 10:04 PM
> > To: Varun Gupta
> > Cc: [email protected]
> > Subject: Re: [ovs-discuss] OpenVSwitch - "OFPBRC_BAD_VERSION" error packet 
> > not received when there is version mismatch between stats request and stats 
> > reply
> > 
> > On Mon, May 21, 2012 at 10:50:19AM +0000, Varun Gupta wrote:
> > > Switch is not notifying the controller for OFPBRC_BAD_VERSION, /*
> > > ofp_header.version not supported. */ when there is version mismatch
> > > between stats request and stats reply. The switch was resetting the
> > > connection and only a warning message was generated on switch in log
> > > (/var/log/messages) before resetting connection.
> > 
> > It's hard for me to consider this a serious bug, because it's a bug
> > in the controller to send an OpenFlow message of a version that was
> > not negotiated in the OpenFlow version negotiation.  I don't know why
> > you'd do that.
> > 
> > 
> > 
> > DISCLAIMER:
> > 
> > -----------------------------------------------------------------------------------------------------------------------
> > 
> > The contents of this e-mail and any attachment(s) are confidential and
> > intended
> > 
> > for the named recipient(s) only. 
> > 
> > It shall not attach any liability on the originator or NECHCL or its
> > 
> > affiliates. Any views or opinions presented in 
> > 
> > this email are solely those of the author and may not necessarily reflect 
> > the
> > 
> > opinions of NECHCL or its affiliates. 
> > 
> > Any form of reproduction, dissemination, copying, disclosure, modification,
> > 
> > distribution and / or publication of 
> > 
> > this message without the prior written consent of the author of this e-mail 
> > is
> > 
> > strictly prohibited. If you have 
> > 
> > received this email in error please delete it and notify the sender
> > 
> > immediately. .
> > 
> > -----------------------------------------------------------------------------------------------------------------------
> _______________________________________________
> discuss mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/discuss
> 
> 
> 
> DISCLAIMER:
> 
> -----------------------------------------------------------------------------------------------------------------------
> 
> The contents of this e-mail and any attachment(s) are confidential and
> intended
> 
> for the named recipient(s) only. 
> 
> It shall not attach any liability on the originator or NECHCL or its
> 
> affiliates. Any views or opinions presented in 
> 
> this email are solely those of the author and may not necessarily reflect the
> 
> opinions of NECHCL or its affiliates. 
> 
> Any form of reproduction, dissemination, copying, disclosure, modification,
> 
> distribution and / or publication of 
> 
> this message without the prior written consent of the author of this e-mail is
> 
> strictly prohibited. If you have 
> 
> received this email in error please delete it and notify the sender
> 
> immediately. .
> 
> -----------------------------------------------------------------------------------------------------------------------
_______________________________________________
discuss mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to