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 dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev