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"
29using namespace P4::literals;
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;
105 ActionSelector_Model()
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;
129 explicit CounterOrMeter_Model(
cstring name)
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;
155 DigestReceiver_Model() : Elem(
"digest"_cs), receiverType(IR::Type_Bits::get(32)) {}
156 const IR::Type *receiverType;
159struct Counter_Model :
public CounterOrMeter_Model {
160 Counter_Model() : CounterOrMeter_Model(
"counter"_cs), increment(
"count"_cs) {}
164struct Meter_Model :
public CounterOrMeter_Model {
165 Meter_Model() : CounterOrMeter_Model(
"meter"_cs), executeMeter(
"execute_meter"_cs) {}
169struct DirectMeter_Model :
public CounterOrMeter_Model {
170 DirectMeter_Model() : CounterOrMeter_Model(
"direct_meter"_cs), read(
"read"_cs) {}
174struct DirectCounter_Model :
public CounterOrMeter_Model {
175 DirectCounter_Model() : CounterOrMeter_Model(
"direct_counter"_cs), count(
"count"_cs) {}
180 explicit StandardMetadataType_Model(
cstring name)
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) {}
249struct TableAttributes_Model {
250 TableAttributes_Model()
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 ::P4::Model::Elem file;
310 const ::P4::Model::Elem standardMetadata;
311 const ::P4::Model::Elem intrinsicMetadata;
312 const ::P4::Model::Elem queueingMetadata;
313 const ::P4::Model::Type_Model headersType;
314 const ::P4::Model::Type_Model metadataType;
329 const ::P4::Model::Elem resubmit;
331 const ::P4::Model::Elem rangeMatchType;
332 const ::P4::Model::Elem optionalMatchType;
333 const ::P4::Model::Elem selectorMatchType;
340 const ::P4::Model::Elem drop;
341 const ::P4::Model::Elem recirculate;
342 const ::P4::Model::Elem verify_checksum;
343 const ::P4::Model::Elem update_checksum;
344 const ::P4::Model::Elem verify_checksum_with_payload;
345 const ::P4::Model::Elem update_checksum_with_payload;
346 const ::P4::Model::Elem log_msg;
350 static V1Model instance;
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: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