[ovs-dev] [PATCH 4/5] flow: Only un-wildcard relevant IP headers.

Rajahalme, Jarno (NSN - FI/Espoo) jarno.rajahalme at nsn.com
Fri Jun 28 08:00:17 UTC 2013


On Jun 28, 2013, at 4:16 , ext Justin Pettit wrote:
...
> diff --git a/lib/flow.c b/lib/flow.c
> index a42fea1..1a5084b 100644
> --- a/lib/flow.c
> +++ b/lib/flow.c
> @@ -781,7 +781,8 @@ flow_hash_symmetric_l4(const struct flow *flow, uint32_t basis)
> 
> /* Masks the fields in 'wc' that are used by the flow hash 'fields'. */
> void
> -flow_mask_hash_fields(struct flow_wildcards *wc, enum nx_hash_fields fields)
> +flow_mask_hash_fields(const struct flow *flow, struct flow_wildcards *wc,
> +                      enum nx_hash_fields fields)
> {
>     switch (fields) {
>     case NX_HASH_FIELDS_ETH_SRC:
> @@ -791,11 +792,18 @@ flow_mask_hash_fields(struct flow_wildcards *wc, enum nx_hash_fields fields)
>     case NX_HASH_FIELDS_SYMMETRIC_L4:
>         memset(&wc->masks.dl_src, 0xff, sizeof wc->masks.dl_src);
>         memset(&wc->masks.dl_dst, 0xff, sizeof wc->masks.dl_dst);
> -        memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
> -        memset(&wc->masks.nw_src, 0xff, sizeof wc->masks.nw_src);
> -        memset(&wc->masks.nw_dst, 0xff, sizeof wc->masks.nw_dst);
> -        memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
> -        memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
> +        if (flow->dl_type == htons(ETH_TYPE_IP)) {
> +            memset(&wc->masks.nw_src, 0xff, sizeof wc->masks.nw_src);
> +            memset(&wc->masks.nw_dst, 0xff, sizeof wc->masks.nw_dst);
> +        } else {
> +            memset(&wc->masks.ipv6_src, 0xff, sizeof wc->masks.ipv6_src);
> +            memset(&wc->masks.ipv6_dst, 0xff, sizeof wc->masks.ipv6_dst);
> +        }
> +        if (is_ip_any(flow)) {
> +            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
> +            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
> +            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
> +        }

Why bother checking for is_ip_any, when you already assume above that it is either IPv4 or IPv6?

  Jarno


More information about the dev mailing list