+ const struct mf_field *field = mf_from_oxm_header(header);
+
+ if (field && field->variable_len) {
+ if (n <= field->n_bytes) {
+ int len = (nxm_hasmask(header) ? n * 2 : n) +
+ nxm_experimenter_len(header);
+
+ header = NXM_HEADER(nxm_vendor(header), nxm_class(header),
+ nxm_field(header),
+ nxm_hasmask(header) ? 1 : 0, len);
+ } else {
+ ovs_fatal(0, "expected to read at most %d bytes but got "
+ "%"PRIuSIZE, field->n_bytes, n);
+ }
+ } else {
+ ovs_fatal(0, "expected to read %d bytes but got %"PRIuSIZE,
+ nxm_field_bytes(header), n);
+ }