nxm_put(b, field, version, &value, &mask, sizeof value);
}
+static void
+nxm_put_128m(struct ofpbuf *b,
+ enum mf_field_id field, enum ofp_version version,
+ const ovs_be128 value, const ovs_be128 mask)
+{
+ nxm_put(b, field, version, &value, &mask, sizeof(value));
+}
+
static void
nxm_put_eth_masked(struct ofpbuf *b,
enum mf_field_id field, enum ofp_version version,
flow->nw_tos & IP_ECN_MASK);
}
- if (!oxm && match->wc.masks.nw_ttl) {
+ if (match->wc.masks.nw_ttl) {
nxm_put_8(b, MFF_IP_TTL, oxm, flow->nw_ttl);
}
int match_len;
int i;
- BUILD_ASSERT_DECL(FLOW_WC_SEQ == 33);
+ BUILD_ASSERT_DECL(FLOW_WC_SEQ == 35);
/* Metadata. */
if (match->wc.masks.dp_hash) {
flow->tunnel.ip_src, match->wc.masks.tunnel.ip_src);
nxm_put_32m(b, MFF_TUN_DST, oxm,
flow->tunnel.ip_dst, match->wc.masks.tunnel.ip_dst);
+ nxm_put_ipv6(b, MFF_TUN_IPV6_SRC, oxm,
+ &flow->tunnel.ipv6_src, &match->wc.masks.tunnel.ipv6_src);
+ nxm_put_ipv6(b, MFF_TUN_IPV6_DST, oxm,
+ &flow->tunnel.ipv6_dst, &match->wc.masks.tunnel.ipv6_dst);
nxm_put_16m(b, MFF_TUN_GBP_ID, oxm,
flow->tunnel.gbp_id, match->wc.masks.tunnel.gbp_id);
nxm_put_8m(b, MFF_TUN_GBP_FLAGS, oxm,
}
}
- /* Mark. */
+ /* Packet mark. */
nxm_put_32m(b, MFF_PKT_MARK, oxm, htonl(flow->pkt_mark),
htonl(match->wc.masks.pkt_mark));
+ /* Connection tracking. */
+ nxm_put_32m(b, MFF_CT_STATE, oxm, htonl(flow->ct_state),
+ htonl(match->wc.masks.ct_state));
+ nxm_put_16m(b, MFF_CT_ZONE, oxm, htons(flow->ct_zone),
+ htons(match->wc.masks.ct_zone));
+ nxm_put_32m(b, MFF_CT_MARK, oxm, htonl(flow->ct_mark),
+ htonl(match->wc.masks.ct_mark));
+ nxm_put_128m(b, MFF_CT_LABEL, oxm, hton128(flow->ct_label),
+ hton128(match->wc.masks.ct_label));
+
/* OpenFlow 1.1+ Metadata. */
nxm_put_64m(b, MFF_METADATA, oxm,
flow->metadata, match->wc.masks.metadata);