+static struct hmap *
+get_all_fields(uint32_t header)
+{
+ return IS_OXM_HEADER(header) ? &all_oxm_fields : &all_nxm_fields;
+}
+
+static void
+nxm_init_add_field(const struct mf_field *mf, uint32_t header)
+{
+ struct hmap *all_fields = get_all_fields(header);
+
+ if (!header) {
+ return;
+ }
+ add_nxm_field(all_fields, header, mf);
+ if (mf->maskable == MFM_NONE) {
+ return;
+ }
+ add_nxm_field(all_fields, NXM_MAKE_WILD_HEADER(header), mf);
+}
+
+#ifndef NDEBUG
+static void
+nxm_init_verify_field(const struct mf_field *mf, uint32_t header)
+{
+ if (!header) {
+ return;
+ }
+ assert(mf_from_nxm_header(header) == mf);
+ /* Some OXM fields are not maskable while their NXM
+ * counterparts are, just skip this check for now */
+ if (mf->maskable == MFM_NONE || IS_OXM_HEADER(header)) {
+ return;
+ }
+ assert(mf_from_nxm_header(NXM_MAKE_WILD_HEADER(mf->nxm_header)) == mf);
+}
+#endif
+