On Mon, Jun 10, 2013 at 9:10 AM, Andy Zhou <az...@nicira.com> wrote:
> On Fri, Jun 7, 2013 at 4:43 PM, Jesse Gross <je...@nicira.com> wrote:
>> On Wed, Jun 5, 2013 at 10:46 PM, Andy Zhou <az...@nicira.com> wrote:
>> > +static void flow_key_mask(struct sw_flow_key *dst,
>> > +                         const struct sw_flow_key *src,
>> > +                         const struct sw_flow_mask *mfm)
>> > +{
>> > +       u8 *m = (u8 *)&mfm->key + mfm->desc.start;
>> > +       u8 *s = (u8 *)src + mfm->desc.start;
>> > +       u8 *d = (u8 *)dst + mfm->desc.start;
>>
>> You could improve the performance here by using longs instead of chars.
>
> What about CPU architectures requires longs to be aligned? What is the
> conventional #ifdef style here?

There is a 64 bit value in struct sw_flow_key, so the compiler will
enforce alignment for us.

>> > +static bool __flow_cmp_key_mask(struct sw_flow *flow, u32 hash, u8
>> > *key,
>> > +                               int key_start, int key_len,
>> > +                               struct sw_flow_mask *mfm)
>> > +{
>> > +       return (flow->hash == hash && (flow->mfm == mfm) &&
>> > +               !memcmp((u8 *)&flow->key + key_start, key, (key_len -
>> > key_start)));
>> > +}
>>
>> Since the flows are non-overlapping, do we need to compare the masks?
>
> Yes, we are comparing masked key, which is no longer unique without
> comparing the mask.

Well, more to the point, I think we want to make sure that they are
unique. The ordering of the masks has no inherent meaning so in order
to avoid surprising behavior I think we need to enforce that there is
no possibility of overlap. This should happen naturally when we start
looking up exact matches on flow setup.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to