X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=ofproto%2Fofproto-dpif.c;h=689b4ebf071640a43453c11ee90fb53f95e7a8e2;hb=8e53fe8cf7a178cf9702fb1bb916f4645058e5e7;hp=2b731d18fad623ee28a7d3a86e7a20bbb0670722;hpb=07659514c3c1e8998a4935a998b627d716c559f9;p=cascardo%2Fovs.git diff --git a/ofproto/ofproto-dpif.c b/ofproto/ofproto-dpif.c index 2b731d18f..689b4ebf0 100644 --- a/ofproto/ofproto-dpif.c +++ b/ofproto/ofproto-dpif.c @@ -1269,6 +1269,7 @@ check_##NAME(struct dpif_backer *backer) \ CHECK_FEATURE(ct_state) CHECK_FEATURE(ct_zone) +CHECK_FEATURE(ct_mark) #undef CHECK_FEATURE #undef CHECK_FEATURE__ @@ -1287,6 +1288,7 @@ check_support(struct dpif_backer *backer) 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 @@ -4008,16 +4010,19 @@ static enum ofperr 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) {