decode_NXAST_RAW_CHECK_PKT_LARGER(
    const struct nx_action_check_pkt_larger *ncpl,
    enum ofp_version ofp_version OVS_UNUSED,
    const struct vl_mff_map *vl_mff_map, uint64_t *tlv_bitmap,
    struct ofpbuf *out)
{
    struct ofpact_check_pkt_larger *check_pkt_larger;
    enum ofperr error;

    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
    check_pkt_larger->dst.n_bits = 1;

    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));

    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
                                     &check_pkt_larger->dst.field,
                                     NULL, tlv_bitmap);
    if (error) {
        return error;
    }

    if (!is_all_zeros(b.data, b.size)) {
        return OFPERR_NXBRC_MUST_BE_ZERO;
    }

    return mf_check_dst(&check_pkt_larger->dst, NULL);
}
decode_NXAST_RAW_CHECK_PKT_LARGER(
    const struct nx_action_check_pkt_larger *ncpl,
    enum ofp_version ofp_version OVS_UNUSED,
    const struct vl_mff_map *vl_mff_map, uint64_t *tlv_bitmap,
    struct ofpbuf *out)
{
    struct ofpact_check_pkt_larger *check_pkt_larger;
    enum ofperr error;

    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
    check_pkt_larger->dst.n_bits = 1;

    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));

    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
                                     &check_pkt_larger->dst.field,
                                     NULL, tlv_bitmap);
    if (error) {
        return error;
    }

    if (!is_all_zeros(b.data, b.size)) {
        return OFPERR_NXBRC_MUST_BE_ZERO;
    }

    return mf_check_dst(&check_pkt_larger->dst, NULL);
}