Pushed to master with changes as suggested.
Defined inline functions shown below, be32 variants were obsolete by earlier
changes, so did not add them now.
+static inline uint32_t flow_u32_value(const struct flow *flow, size_t index)
+{
+ return ((uint32_t *)(flow))[index];
+}
+
+static inline uint32_t *flow_u32_lvalue(struct flow *flow, size_t index)
+{
+ return &((uint32_t *)(flow))[index];
+}
+
Jarno
On Jun 13, 2014, at 10:26 AM, Ben Pfaff <[email protected]> wrote:
> On Mon, Jun 09, 2014 at 11:53:52AM -0700, Jarno Rajahalme wrote:
>> When, during a classifier lookup, we narrow down to a single potential
>> rule, it is enough to match on ("unwildcard") one bit that differs
>> between the packet and the rule.
>>
>> This is a special case of the more general algorithm, where it is
>> sufficient to match on enough bits that separates the packet from all
>> higher priority rules than the matched rule. For a miss that would be
>> all the rules. Implementing this is expensive for a more than a few
>> rules. This patch starts by doing this for a single rule when we
>> already have it, also reducing the lookup cost by finishing the lookup
>> earlier than before.
>>
>> Signed-off-by: Jarno Rajahalme <[email protected]>
>
> FLOW_U32_VALUE and FLOW_BE32_VALUE are not type-safe, since they are
> willing to cast absolutely anything to uint32_t * or ovs_be32 *. If
> you made them inline functions that take a "struct flow *", then they
> could return a pointer to uint32_t or ovs_be32 for the caller to
> dereference and have some type safety.
>
> Acked-by: Ben Pfaff <[email protected]>
>
_______________________________________________
dev mailing list
[email protected]
http://openvswitch.org/mailman/listinfo/dev