17#ifndef BACKENDS_TC_EBPFCODEGEN_H_
18#define BACKENDS_TC_EBPFCODEGEN_H_
24class ConvertToBackendIR;
62 bool preorder(
const IR::Type_Error *errors)
override {
64 for (
auto decl : errors->members) {
66 if (decl->srcInfo.isValid()) {
67 auto sourceFile = decl->srcInfo.getSourceFile();
69 if (sourceFile.endsWith(
"p4include/core.p4"))
continue;
72 builder->emitIndent();
73 builder->appendFormat(
"static const ParserError_t %s = %d", decl->name.name,
id);
74 builder->endOfStatement(
true);
78 ::error(ErrorType::ERR_OVERLIMIT,
"%1%: Reached maximum number of possible errors",
125 void compileExtractField(
const IR::Expression *expr,
const IR::StructField *field,
127 void compileLookahead(
const IR::Expression *destination)
override;
144 void validateKeys()
const override;
158 bool isMatchTypeSupported(
const IR::Declaration_ID *matchType)
override {
159 if (matchType->name.name ==
"range" || matchType->name.name ==
"rangelist" ||
160 matchType->name.name ==
"optional")
162 return EBPF::EBPFTable::isMatchTypeSupported(matchType);
165 cstring actionRunVariable)
override;
167 cstring p4ActionToActionIDName(
const IR::P4Action *action)
const;
175 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
178 bool build()
override;
197 : options(options), typemap(typemap), refmap(refmap), ebpf_program(
nullptr), tcIR(tcIR) {}
200 const IR::Node *preorder(IR::ToplevelBlock *p)
override;
208 const EBPF::pipeline_type type;
210 const IR::ParserBlock *parserBlock;
211 const IR::ControlBlock *controlBlock;
212 const IR::ControlBlock *deparserBlock;
220 const IR::ParserBlock *parserBlock,
221 const IR::ControlBlock *controlBlock,
227 parserBlock(parserBlock),
228 controlBlock(controlBlock),
229 deparserBlock(deparserBlock),
235 bool preorder(
const IR::PackageBlock *block)
override;
248 : program(program), typemap(typemap), parser(
nullptr) {}
250 bool preorder(
const IR::ParserBlock *prsr)
override;
251 bool preorder(
const IR::P4ValueSet *pvs)
override;
259 EBPF::pipeline_type type;
262 const IR::Parameter *parserHeaders;
274 parserHeaders(parserHeaders),
278 bool preorder(
const IR::TableBlock *)
override;
279 bool preorder(
const IR::ControlBlock *)
override;
280 bool preorder(
const IR::Declaration_Variable *)
override;
281 bool preorder(
const IR::Member *m)
override;
282 bool preorder(
const IR::IfStatement *a)
override;
283 bool preorder(
const IR::ExternBlock *instance)
override;
284 bool checkPnaTimestampMem(
const IR::Member *m);
292 const IR::Parameter *parserHeaders;
293 const IR::Parameter *istd;
298 const IR::Parameter *istd)
299 : program(program), parserHeaders(parserHeaders), istd(istd), deparser(
nullptr) {}
301 bool preorder(
const IR::ControlBlock *)
override;
302 bool preorder(
const IR::Declaration_Instance *)
override;
320 bool checkPnaPortMem(
const IR::Member *m);
321 virtual cstring getParamName(
const IR::PathExpression *);
322 bool preorder(
const IR::AssignmentStatement *a)
override;
324 bool preorder(
const IR::Member *)
override;
325 bool IsTableAddOnMiss(
const IR::P4Table *table);
326 const IR::P4Action *GetAddOnMissHitAction(
cstring actionName);
327 void ValidateAddOnMissMissAction(
const IR::P4Action *act);
342 bool preorder(
const IR::PathExpression *pe)
override;
343 bool isActionParameter(
const IR::Expression *expression)
const;
345 cstring getParamInstanceName(
const IR::Expression *expression)
const override;
346 cstring getParamName(
const IR::PathExpression *)
override;
378 polynomial =
"0xA001";
379 updateMethod =
"crc16_update";
380 finalizeMethod =
"crc16_finalize";
390 initialValue =
"0xffffffff";
393 polynomial =
"0xEDB88320";
394 updateMethod =
"crc32_update";
395 finalizeMethod =
"crc32_finalize";
408 CRC16ChecksumAlgorithmPNA::emitGlobals(builder);
409 CRC32ChecksumAlgorithmPNA::emitGlobals(builder);
410 EBPF::InternetChecksumAlgorithm::emitGlobals(builder);
Definition ebpfTable.h:26
Definition ebpfPsaHashAlgorithm.h:74
Definition ebpfControl.h:28
Definition ebpfDeparser.h:38
Definition ebpfPsaControl.h:58
Definition ebpfDeparser.h:63
Definition ebpfPsaDeparser.h:39
Definition ebpfPsaHashAlgorithm.h:176
Definition ebpfParser.h:79
Definition ebpfPipeline.h:30
Definition ebpfProgram.h:39
Definition ebpfPsaParser.h:40
Definition ebpfPsaTable.h:29
Definition ebpfPsaGen.h:32
Definition ebpfPsaParser.h:29
Definition ebpfPipeline.h:206
Definition xdpHelpProgram.h:24
Definition ebpfOptions.h:26
Definition methodInstance.h:124
Definition methodInstance.h:176
Definition methodInstance.h:144
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
Definition ebpfCodeGen.h:333
Definition ebpfCodeGen.h:371
Definition ebpfCodeGen.h:386
Definition ebpfCodeGen.h:363
Definition ebpfCodeGen.h:308
Definition ebpfCodeGen.h:257
Definition ebpfCodeGen.h:290
Definition ebpfCodeGen.h:241
Definition ebpfCodeGen.h:187
Definition ebpfCodeGen.h:206
Definition ebpfCodeGen.h:351
Definition ebpfCodeGen.h:401
Definition ebpfCodeGen.h:130
Definition ebpfCodeGen.h:140
Definition ebpfCodeGen.h:172
Definition ebpfCodeGen.h:89
void emitParser(EBPF::CodeBuilder *builder) const override
Definition ebpfCodeGen.cpp:217
void emit(EBPF::CodeBuilder *builder) const override
Definition ebpfCodeGen.cpp:171
Definition ebpfCodeGen.h:29
Definition ebpfCodeGen.h:56
Definition ebpfCodeGen.h:118
Definition ebpfCodeGen.h:104
This file defines functions for the pass to generate the introspection file.
Definition backend.cpp:24