8#ifndef BACKENDS_UBPF_UBPFMODEL_H_
9#define BACKENDS_UBPF_UBPFMODEL_H_
11#include "frontends/common/model.h"
12#include "frontends/p4/coreLibrary.h"
14#include "ir/pass_manager.h"
15#include "lib/cstring.h"
19using namespace P4::literals;
23 : Elem(
"Pipeline"_cs), parser(
"prs"_cs), control(
"p"_cs), deparser(
"dprs"_cs) {}
32 : Extern_Model(
"Register"_cs),
36 initial_value(
"initial_value"_cs),
61 : CPacketName(
"pkt"_cs),
62 packet(
"packet"_cs, P4::P4CoreLibrary::instance().packetIn, 0),
65 drop(
"mark_to_drop"_cs),
66 pass(
"mark_to_pass"_cs),
67 ubpf_time_get_ns(
"ubpf_time_get_ns"_cs),
68 truncate(
"truncate"_cs),
69 csum_replace2(
"csum_replace2"_cs),
70 csum_replace4(
"csum_replace4"_cs),
75 static UBPFModel instance;
90 unsigned version = 20200515;
92 static cstring reserved(
cstring name) {
return reservedPrefix + name; }
94 int numberOfParserArguments()
const {
return version >= 20200515 ? 4 : 3; }
95 int numberOfControlBlockArguments()
const {
return version >= 20200515 ? 3 : 2; }
98 bool preorder(
const IR::Declaration_Constant *dc)
override {
99 if (dc->name ==
"__ubpf_model_version") {
100 auto val = dc->initializer->to<IR::Constant>();
101 UBPFModel::instance.version =
static_cast<unsigned>(val->value);
105 bool preorder(
const IR::Declaration *)
override {
return false; }
108 const IR::P4Program *run(
const IR::P4Program *program) {
109 if (program ==
nullptr)
return nullptr;
115 passes.setName(
"UBPFFrontEnd");
116 passes.setStopOnError(
true);
117 const IR::P4Program *result = program->apply(passes);
Definition frontends/common/model.h:64
Definition ir/pass_manager.h:40
Definition ubpfModel.h:97
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 ubpfModel.h:48
Definition ubpfModel.h:54
Definition ubpfModel.h:21
Definition ubpfModel.h:30