[ovs-dev] [PATCH 33/38] Allow decoding of Open Flow 1.1 & 1.2 Flow Removed Messages

Simon Horman horms at verge.net.au
Fri Aug 10 00:35:07 UTC 2012


On Thu, Aug 09, 2012 at 11:41:01AM -0700, Ben Pfaff wrote:
> On Thu, Aug 09, 2012 at 05:49:54PM +0900, Simon Horman wrote:
> > Signed-off-by: Simon Horman <horms at verge.net.au>
> 
> I decided that it made sense to commit this after the patch to allow
> encoding these messages.  I support for hard_timeout and an ofp-print
> test.  Here is what I am going to apply:

Thanks, that looks good to me.

Sorry for missing hard_timeout, I'm unsure how that slipped through
without even a comment in the code about it.

> 
> --8<--------------------------cut here-------------------------->8--
> 
> From: Simon Horman <horms at verge.net.au>
> Date: Thu, 9 Aug 2012 17:49:54 +0900
> Subject: [PATCH] Allow decoding of Open Flow 1.1 & 1.2 Flow Removed Messages
> 
> Signed-off-by: Simon Horman <horms at verge.net.au>
> [blp at nicira.com added support for hard_timeout, plus a test]
> Signed-off-by: Ben Pfaff <blp at nicira.com>
> ---
>  lib/ofp-util.c     |   23 ++++++++++++++++++++++-
>  tests/ofp-print.at |   13 ++++++++++++-
>  2 files changed, 34 insertions(+), 2 deletions(-)
> 
> diff --git a/lib/ofp-util.c b/lib/ofp-util.c
> index a8030ff..edcc163 100644
> --- a/lib/ofp-util.c
> +++ b/lib/ofp-util.c
> @@ -1825,7 +1825,28 @@ ofputil_decode_flow_removed(struct ofputil_flow_removed *fr,
>  
>      ofpbuf_use_const(&b, oh, ntohs(oh->length));
>      raw = ofpraw_pull_assert(&b);
> -    if (raw == OFPRAW_OFPT10_FLOW_REMOVED) {
> +    if (raw == OFPRAW_OFPT11_FLOW_REMOVED) {
> +        const struct ofp12_flow_removed *ofr;
> +        enum ofperr error;
> +
> +        ofr = ofpbuf_pull(&b, sizeof *ofr);
> +
> +        error = ofputil_pull_ofp11_match(&b, ntohs(ofr->priority),
> +                                         &fr->rule, NULL);
> +        if (error) {
> +            return error;
> +        }
> +
> +        fr->cookie = ofr->cookie;
> +        fr->reason = ofr->reason;
> +        /* XXX: ofr->table_id is ignored */
> +        fr->duration_sec = ntohl(ofr->duration_sec);
> +        fr->duration_nsec = ntohl(ofr->duration_nsec);
> +        fr->idle_timeout = ntohs(ofr->idle_timeout);
> +        fr->hard_timeout = ntohs(ofr->hard_timeout);
> +        fr->packet_count = ntohll(ofr->packet_count);
> +        fr->byte_count = ntohll(ofr->byte_count);
> +    } else if (raw == OFPRAW_OFPT10_FLOW_REMOVED) {
>          const struct ofp_flow_removed *ofr;
>  
>          ofr = ofpbuf_pull(&b, sizeof *ofr);
> diff --git a/tests/ofp-print.at b/tests/ofp-print.at
> index 842869c..a0bd643 100644
> --- a/tests/ofp-print.at
> +++ b/tests/ofp-print.at
> @@ -355,7 +355,7 @@ priority:0,tunnel:0,metadata:0,in_port:0000,tci(0) mac(00:23:20:83:c1:5f->ff:ff:
>  ])
>  AT_CLEANUP
>  
> -AT_SETUP([OFPT_FLOW_REMOVED])
> +AT_SETUP([OFPT_FLOW_REMOVED - OF1.0])
>  AT_KEYWORDS([ofp-print])
>  AT_CHECK([ovs-ofctl ofp-print "\
>  01 0b 00 58 00 00 00 00 00 00 00 00 00 03 50 54 \
> @@ -369,6 +369,17 @@ OFPT_FLOW_REMOVED (xid=0x0): priority=65535,arp,in_port=3,vlan_tci=0x0000,dl_src
>  ])
>  AT_CLEANUP
>  
> +AT_SETUP([OFPT_FLOW_REMOVED - OF1.2])
> +AT_KEYWORDS([ofp-print])
> +AT_CHECK([ovs-ofctl ofp-print "\
> +03 0b 00 40 00 00 00 00 fe dc ba 98 76 54 32 10 \
> +80 00 01 05 00 00 00 01 00 98 96 80 00 3c 00 78 \
> +00 00 00 00 00 12 d6 87 00 00 00 00 6f 68 ba 66 \
> +00 01 00 0a 80 00 0c 02 00 09 00 00 00 00 00 00"], [0], [dnl
> +OFPT_FLOW_REMOVED (OF1.2) (xid=0x0): dl_vlan=9 reason=hard cookie:0xfedcba9876543210 duration1.01s idle60 hard120 pkts1234567 bytes1869134438
> +])
> +AT_CLEANUP
> +
>  AT_SETUP([OFPT_PORT_STATUS - OF1.0])
>  AT_KEYWORDS([ofp-print])
>  AT_CHECK([ovs-ofctl ofp-print "\
> -- 
> 1.7.2.5
> 



More information about the dev mailing list