return !wc->masks.ct_zone;
case MFF_CT_MARK:
return !wc->masks.ct_mark;
+ case MFF_CT_LABEL:
+ return ovs_u128_is_zero(&wc->masks.ct_label);
CASE_MFF_REGS:
return !wc->masks.regs[mf->id - MFF_REG0];
CASE_MFF_XREGS:
case MFF_PKT_MARK:
case MFF_CT_ZONE:
case MFF_CT_MARK:
+ case MFF_CT_LABEL:
CASE_MFF_REGS:
CASE_MFF_XREGS:
case MFF_ETH_SRC:
value->be32 = htonl(flow->ct_mark);
break;
+ case MFF_CT_LABEL:
+ hton128(&flow->ct_label, &value->be128);
+ break;
+
CASE_MFF_REGS:
value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
break;
match_set_ct_mark(match, ntohl(value->be32));
break;
+ case MFF_CT_LABEL: {
+ ovs_u128 label;
+
+ ntoh128(&value->be128, &label);
+ match_set_ct_label(match, label);
+ break;
+ }
+
CASE_MFF_REGS:
match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
break;
flow->ct_mark = ntohl(value->be32);
break;
+ case MFF_CT_LABEL:
+ ntoh128(&value->be128, &flow->ct_label);
+ break;
+
CASE_MFF_REGS:
flow->regs[mf->id - MFF_REG0] = ntohl(value->be32);
break;
match->wc.masks.ct_mark = 0;
break;
+ case MFF_CT_LABEL:
+ memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
+ memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
+ break;
+
CASE_MFF_REGS:
match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
break;
match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
break;
+ case MFF_CT_LABEL: {
+ ovs_u128 hlabel, hmask;
+
+ ntoh128(&value->be128, &hlabel);
+ if (mask) {
+ ntoh128(&mask->be128, &hmask);
+ } else {
+ hmask.u64.lo = hmask.u64.hi = UINT64_MAX;
+ }
+ match_set_ct_label_masked(match, hlabel, hmask);
+ break;
+ }
+
case MFF_ETH_DST:
match_set_dl_dst_masked(match, value->mac, mask->mac);
break;