+int oxm_put_match(struct ofpbuf *, const struct match *, enum ofp_version);
+void oxm_put_raw(struct ofpbuf *, const struct match *, enum ofp_version);
+void oxm_format_field_array(struct ds *, const struct field_array *);
+int oxm_put_field_array(struct ofpbuf *, const struct field_array *,
+ enum ofp_version version);
+
+/* Decoding and encoding OXM/NXM headers (just a field ID) or entries (a field
+ * ID followed by a value and possibly a mask). */
+enum ofperr nx_pull_entry(struct ofpbuf *, const struct mf_field **,
+ union mf_value *value, union mf_value *mask);
+enum ofperr nx_pull_header(struct ofpbuf *, const struct mf_field **,
+ bool *masked);
+void nxm_put__(struct ofpbuf *b, enum mf_field_id field,
+ enum ofp_version version, const void *value,
+ const void *mask, size_t n_bytes);
+void nx_put_entry(struct ofpbuf *, enum mf_field_id, enum ofp_version,
+ const union mf_value *value, const union mf_value *mask);
+void nx_put_header(struct ofpbuf *, enum mf_field_id, enum ofp_version,
+ bool masked);
+
+/* NXM and OXM protocol headers values.
+ *
+ * These are often alternatives to nx_pull_entry/header() and
+ * nx_put_entry/header() for decoding and encoding OXM/NXM. In those cases,
+ * the nx_*() functions should be preferred because they can support the 64-bit
+ * "experimenter" OXM format (even though it is not yet implemented). */
+uint32_t mf_nxm_header(enum mf_field_id);
+const struct mf_field *mf_from_nxm_header(uint32_t nxm_header);