17#ifndef FRONTENDS_P4_FROMV1_0_V1MODEL_H_ 
   18#define FRONTENDS_P4_FROMV1_0_V1MODEL_H_ 
   20#include "frontends/common/model.h" 
   21#include "frontends/p4/coreLibrary.h" 
   22#include "frontends/p4/methodInstance.h" 
   24#include "lib/cstring.h" 
   39          packetParam(
"packet"_cs, P4::P4CoreLibrary::instance().packetIn, 0),
 
   40          headersParam(
"hdr"_cs, headersType, 1),
 
   41          metadataParam(
"meta"_cs, userMetaType, 2),
 
   42          standardMetadataParam(
"standard_metadata"_cs, standardMetadataType, 3) {}
 
 
   52          packetParam(
"packet"_cs, P4::P4CoreLibrary::instance().packetOut, 0),
 
   53          headersParam(
"hdr"_cs, headersType, 1) {}
 
 
   63          headersParam(
"hdr"_cs, headersType, 0),
 
   64          metadataParam(
"meta"_cs, metadataType, 1),
 
   65          standardMetadataParam(
"standard_metadata"_cs, standardMetadataType, 2) {}
 
 
   73        : 
Model::Elem(name), headersParam(
"hdr"_cs, headersType, 0) {}
 
 
   80          packets(
"packets"_cs),
 
   82          both(
"packets_and_bytes"_cs) {}
 
 
   97        : Extern_Model(
"action_profile"_cs),
 
   98          sizeType(IR::Type_Bits::get(32)),
 
   99          sizeParam(
"size"_cs) {}
 
  100    const IR::Type *sizeType;
 
 
  106        : Extern_Model(
"action_selector"_cs),
 
  107          sizeType(IR::Type_Bits::get(32)),
 
  108          sizeParam(
"size"_cs),
 
  109          widthType(IR::Type_Bits::get(32)),
 
  110          algorithmParam(
"algorithm"_cs) {}
 
  111    const IR::Type *sizeType;
 
  113    const IR::Type *widthType;
 
 
  118    Random_Model() : Elem(
"random"_cs), modify_field_rng_uniform(
"modify_field_rng_uniform"_cs) {}
 
 
  124    Truncate() : Extern_Model(
"truncate"_cs), length_type(IR::Type::Bits::get(32)) {}
 
  125    const IR::Type *length_type;
 
 
  130        : Extern_Model(name),
 
  131          sizeParam(
"size"_cs),
 
  132          typeParam(
"type"_cs),
 
  133          size_type(IR::Type_Bits::get(32)) {}
 
  136    const IR::Type *size_type;
 
 
  143        : Extern_Model(
"register"_cs),
 
  144          sizeParam(
"size"_cs),
 
  147          size_type(IR::Type_Bits::get(32)) {}
 
  151    const IR::Type *size_type;
 
 
  156    const IR::Type *receiverType;
 
 
  183          recirculate(
"recirculate_port"_cs),
 
  184          egress_spec(
"egress_spec"_cs) {}
 
 
  200          crc32_custom(
"crc32_custom"_cs),
 
  202          crc16_custom(
"crc16_custom"_cs),
 
  204          identity(
"identity"_cs),
 
 
  223        : Extern_Model(
"clone"_cs),
 
  224          clone3(
"clone_preserving_field_list"_cs),
 
  226          sessionType(IR::Type_Bits::get(32)) {}
 
  229    const IR::Type *sessionType;
 
 
  240          deparser(
"dep"_cs) {}
 
 
  251        : tableImplementation(
"implementation"_cs),
 
  252          counters(
"counters"_cs),
 
  255          supportTimeout(
"support_timeout"_cs) {}
 
  261    const unsigned defaultTableSize = 1024;
 
 
  267        : file(
"v1model.p4"_cs),
 
  268          standardMetadata(
"standard_metadata"_cs),
 
  270          intrinsicMetadata(
"intrinsic_metadata"_cs),
 
  271          queueingMetadata(
"queueing_metadata"_cs),
 
  272          headersType(
"headers"_cs),
 
  273          metadataType(
"metadata"_cs),
 
  274          standardMetadataType(
"standard_metadata_t"_cs),
 
  275          parser(headersType, metadataType, standardMetadataType),
 
  276          deparser(headersType),
 
  277          egress(
"egress"_cs, headersType, metadataType, standardMetadataType),
 
  278          ingress(
"ingress"_cs, headersType, metadataType, standardMetadataType),
 
  280          counterOrMeter(
"$"_cs),
 
  287          resubmit(
"resubmit_preserving_field_list"_cs),
 
  289          rangeMatchType(
"range"_cs),
 
  290          optionalMatchType(
"optional"_cs),
 
  291          selectorMatchType(
"selector"_cs),
 
  292          verify(
"verifyChecksum"_cs, headersType),
 
  293          compute(
"computeChecksum"_cs, headersType),
 
  298          drop(
"mark_to_drop"_cs),
 
  299          recirculate(
"recirculate_preserving_field_list"_cs),
 
  300          verify_checksum(
"verify_checksum"_cs),
 
  301          update_checksum(
"update_checksum"_cs),
 
  302          verify_checksum_with_payload(
"verify_checksum_with_payload"_cs),
 
  303          update_checksum_with_payload(
"update_checksum_with_payload"_cs),
 
  304          log_msg(
"log_msg"_cs),
 
  309    const ::Model::Elem file;
 
  310    const ::Model::Elem standardMetadata;
 
  311    const ::Model::Elem intrinsicMetadata;
 
  312    const ::Model::Elem queueingMetadata;
 
  313    const ::Model::Type_Model headersType;
 
  314    const ::Model::Type_Model metadataType;
 
  329    const ::Model::Elem resubmit;
 
  331    const ::Model::Elem rangeMatchType;
 
  332    const ::Model::Elem optionalMatchType;
 
  333    const ::Model::Elem selectorMatchType;
 
  340    const ::Model::Elem drop;
 
  341    const ::Model::Elem recirculate;
 
  342    const ::Model::Elem verify_checksum;
 
  343    const ::Model::Elem update_checksum;
 
  344    const ::Model::Elem verify_checksum_with_payload;
 
  345    const ::Model::Elem update_checksum_with_payload;
 
  346    const ::Model::Elem log_msg;
 
  352    static const char *versionInitial;  
 
  353    static const char *versionCurrent;  
 
 
  359    bool preorder(
const IR::Declaration_Constant *dc)
 override {
 
  360        if (dc->name == 
"__v1model_version") {
 
  361            auto val = dc->initializer->to<IR::Constant>();
 
  362            version = 
static_cast<unsigned>(val->value);
 
  366    bool preorder(
const IR::Declaration *)
 override { 
return false; }
 
  369    unsigned version = 0;
 
 
Definition frontends/common/model.h:64
 
Definition frontends/p4/fromv1.0/v1model.h:122
 
Definition frontends/p4/fromv1.0/v1model.h:264
 
Definition frontends/p4/fromv1.0/v1model.h:358
 
Definition frontends/common/model.h:28
 
Enum_Model : Type_Model.
Definition frontends/common/model.h:47
 
Extern_Model : Type_Model.
Definition frontends/common/model.h:52
 
Param_Model : Elem.
Definition frontends/common/model.h:57
 
Definition frontends/common/model.h:42
 
Definition frontends/p4/fromv1.0/v1model.h:95
 
Definition frontends/p4/fromv1.0/v1model.h:104
 
Definition frontends/p4/fromv1.0/v1model.h:196
 
Definition frontends/p4/fromv1.0/v1model.h:190
 
Definition frontends/p4/fromv1.0/v1model.h:221
 
Definition frontends/p4/fromv1.0/v1model.h:59
 
Definition frontends/p4/fromv1.0/v1model.h:159
 
Definition frontends/p4/fromv1.0/v1model.h:128
 
Definition frontends/p4/fromv1.0/v1model.h:77
 
Definition frontends/p4/fromv1.0/v1model.h:49
 
Definition frontends/p4/fromv1.0/v1model.h:154
 
Definition frontends/p4/fromv1.0/v1model.h:174
 
Definition frontends/p4/fromv1.0/v1model.h:169
 
Definition frontends/p4/fromv1.0/v1model.h:217
 
Definition frontends/p4/fromv1.0/v1model.h:164
 
Definition frontends/p4/fromv1.0/v1model.h:88
 
Definition frontends/p4/fromv1.0/v1model.h:35
 
Definition frontends/p4/fromv1.0/v1model.h:117
 
Definition frontends/p4/fromv1.0/v1model.h:141
 
Definition frontends/p4/fromv1.0/v1model.h:232
 
Definition frontends/p4/fromv1.0/v1model.h:249
 
Definition frontends/p4/fromv1.0/v1model.h:71