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
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev