Looks good,
Ethan

On Thu, Jan 19, 2012 at 17:03, Ben Pfaff <[email protected]> wrote:
> This will acquire a new user in an upcoming commit.
>
> Signed-off-by: Ben Pfaff <[email protected]>
> ---
>  lib/dpif.c    |    9 +--------
>  lib/packets.c |   20 +++++++++++++++++++-
>  lib/packets.h |    5 ++++-
>  3 files changed, 24 insertions(+), 10 deletions(-)
>
> diff --git a/lib/dpif.c b/lib/dpif.c
> index 37c0012..e1698ba 100644
> --- a/lib/dpif.c
> +++ b/lib/dpif.c
> @@ -679,14 +679,7 @@ dpif_flow_stats_extract(const struct flow *flow, struct 
> ofpbuf *packet,
>                         struct dpif_flow_stats *stats)
>  {
>     memset(stats, 0, sizeof(*stats));
> -
> -    if ((flow->dl_type == htons(ETH_TYPE_IP)) && packet->l4) {
> -        if ((flow->nw_proto == IPPROTO_TCP) && packet->l7) {
> -            struct tcp_header *tcp = packet->l4;
> -            stats->tcp_flags = TCP_FLAGS(tcp->tcp_ctl);
> -        }
> -    }
> -
> +    stats->tcp_flags = packet_get_tcp_flags(packet, flow);
>     stats->n_bytes = packet->size;
>     stats->n_packets = 1;
>  }
> diff --git a/lib/packets.c b/lib/packets.c
> index eaf3e43..738eb6f 100644
> --- a/lib/packets.c
> +++ b/lib/packets.c
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2009, 2010, 2011 Nicira Networks.
> + * Copyright (c) 2009, 2010, 2011, 2012 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -23,6 +23,7 @@
>  #include <stdlib.h>
>  #include "byte-order.h"
>  #include "csum.h"
> +#include "flow.h"
>  #include "dynamic-string.h"
>  #include "ofpbuf.h"
>
> @@ -478,3 +479,20 @@ packet_set_udp_port(struct ofpbuf *packet, ovs_be16 src, 
> ovs_be16 dst)
>         uh->udp_dst = dst;
>     }
>  }
> +
> +/* If 'packet' is a TCP packet, returns the TCP flags.  Otherwise, returns 0.
> + *
> + * 'flow' must be the flow corresponding to 'packet' and 'packet''s header
> + * pointers must be properly initialized (e.g. with flow_extract()). */
> +uint8_t
> +packet_get_tcp_flags(struct ofpbuf *packet, const struct flow *flow)
> +{
> +    /* XXX IPv6? */
> +    if (flow->dl_type == htons(ETH_TYPE_IP) && packet->l4
> +        && flow->nw_proto == IPPROTO_TCP && packet->l7) {
> +        const struct tcp_header *tcp = packet->l4;
> +        return TCP_FLAGS(tcp->tcp_ctl);
> +    } else {
> +        return 0;
> +    }
> +}
> diff --git a/lib/packets.h b/lib/packets.h
> index 78ccfe9..736f58e 100644
> --- a/lib/packets.h
> +++ b/lib/packets.h
> @@ -1,5 +1,5 @@
>  /*
> - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
> + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks.
>  *
>  * Licensed under the Apache License, Version 2.0 (the "License");
>  * you may not use this file except in compliance with the License.
> @@ -29,6 +29,7 @@
>
>  struct ofpbuf;
>  struct ds;
> +struct flow;
>
>  bool dpid_from_string(const char *s, uint64_t *dpidp);
>
> @@ -468,4 +469,6 @@ void packet_set_ipv4(struct ofpbuf *, ovs_be32 src, 
> ovs_be32 dst, uint8_t tos,
>  void packet_set_tcp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst);
>  void packet_set_udp_port(struct ofpbuf *, ovs_be16 src, ovs_be16 dst);
>
> +uint8_t packet_get_tcp_flags(struct ofpbuf *, const struct flow *);
> +
>  #endif /* packets.h */
> --
> 1.7.2.5
>
> _______________________________________________
> dev mailing list
> [email protected]
> http://openvswitch.org/mailman/listinfo/dev
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev

Reply via email to