CHECK_FEATURE(ct_state)
CHECK_FEATURE(ct_zone)
+CHECK_FEATURE(ct_mark)
#undef CHECK_FEATURE
#undef CHECK_FEATURE__
backer->support.odp.ct_state = check_ct_state(backer);
backer->support.odp.ct_zone = check_ct_zone(backer);
+ backer->support.odp.ct_mark = check_ct_mark(backer);
}
static int
rule_check(struct rule *rule)
{
uint16_t ct_state, ct_zone;
+ uint32_t ct_mark;
ct_state = MINIFLOW_GET_U16(rule->cr.match.flow, ct_state);
ct_zone = MINIFLOW_GET_U16(rule->cr.match.flow, ct_zone);
+ ct_mark = MINIFLOW_GET_U32(rule->cr.match.flow, ct_mark);
- if (ct_state || ct_zone) {
+ if (ct_state || ct_zone || ct_mark) {
struct ofproto_dpif *ofproto = ofproto_dpif_cast(rule->ofproto);
const struct odp_support *support = &ofproto_dpif_get_support(ofproto)->odp;
if ((ct_state && !support->ct_state)
- || (ct_zone && !support->ct_zone)) {
+ || (ct_zone && !support->ct_zone)
+ || (ct_mark && !support->ct_mark)) {
return OFPERR_OFPBMC_BAD_FIELD;
}
if (ct_state & CS_UNSUPPORTED_MASK) {