Skip to content

Commit

Permalink
ofproto-dpif: Shortcut common case in rule_check().
Browse files Browse the repository at this point in the history
Typically the datapath will support all available features, so check
that first before attempting to retrieve various values out of a
minimask as the latter doesn't need to be checked if all fields are
supported.

ct_state is an exception, because support for the bits in this field is
not binary; only some bits are defined so far, so they must still be
checked against the current known supported bits.

Suggested-by: Jarno Rajahalme <jrajahalme@nicira.com>
Signed-off-by: Joe Stringer <joestringer@nicira.com>
Acked-by: Jarno Rajahalme <jarno@ovn.org>
  • Loading branch information
joestringer committed Dec 1, 2015
1 parent 95619d8 commit 1196838
Showing 1 changed file with 5 additions and 0 deletions.
5 changes: 5 additions & 0 deletions ofproto/ofproto-dpif.c
Expand Up @@ -4023,6 +4023,11 @@ rule_check(struct rule *rule)

support = &ofproto_dpif_get_support(ofproto)->odp;
ct_state = MINIFLOW_GET_U16(&rule->cr.match.mask->masks, ct_state);
if (support->ct_state && support->ct_zone && support->ct_mark
&& support->ct_label) {
return ct_state & CS_UNSUPPORTED_MASK ? OFPERR_OFPBMC_BAD_MASK : 0;
}

ct_zone = MINIFLOW_GET_U16(&rule->cr.match.mask->masks, ct_zone);
ct_mark = MINIFLOW_GET_U32(&rule->cr.match.mask->masks, ct_mark);
ct_label = MINIFLOW_GET_U128(&rule->cr.match.mask->masks, ct_label);
Expand Down

0 comments on commit 1196838

Please sign in to comment.