P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfCodeGen.h
1/*
2Copyright (C) 2023 Intel Corporation
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing,
11software distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions
14and limitations under the License.
15*/
16
17#ifndef BACKENDS_TC_EBPFCODEGEN_H_
18#define BACKENDS_TC_EBPFCODEGEN_H_
19
20// FIXME: these include each other and present file
21#include "backend.h"
22#include "tcExterns.h"
23
24namespace P4::TC {
25
26using namespace P4::literals;
27
29class EBPFPnaParser;
30class EBPFRegisterPNA;
31class EBPFHashPNA;
32class EBPFRandomPNA;
33
34// Similar to class PSAEbpfGenerator in backends/ebpf/psa/ebpfPsaGen.h
35
36class PNAEbpfGenerator : public EBPF::EbpfCodeGenerator, public ICastable {
37 public:
38 EBPF::EBPFPipeline *pipeline;
39 const ConvertToBackendIR *tcIR;
40
41 PNAEbpfGenerator(const EbpfOptions &options, std::vector<EBPF::EBPFType *> &ebpfTypes,
42 EBPF::EBPFPipeline *pipeline, const ConvertToBackendIR *tcIR)
43 : EBPF::EbpfCodeGenerator(options, ebpfTypes), pipeline(pipeline), tcIR(tcIR) {}
44
45 virtual void emit(EBPF::CodeBuilder *builder) const = 0;
46 virtual void emitInstances(EBPF::CodeBuilder *builder) const = 0;
47 virtual void emitParser(EBPF::CodeBuilder *builder) const = 0;
48 virtual void emitHeader(EBPF::CodeBuilder *builder) const = 0;
49 void emitPNAIncludes(EBPF::CodeBuilder *builder) const;
50 void emitPreamble(EBPF::CodeBuilder *builder) const override;
51 void emitCommonPreamble(EBPF::CodeBuilder *builder) const override;
52 void emitInternalStructures(EBPF::CodeBuilder *pBuilder) const override;
53 void emitTypes(EBPF::CodeBuilder *builder) const override;
54 void emitGlobalHeadersMetadata(EBPF::CodeBuilder *builder) const override;
55 void emitPipelineInstances(EBPF::CodeBuilder *builder) const override;
56 void emitP4TCFilterFields(EBPF::CodeBuilder *builder) const;
57 void emitP4TCActionParam(EBPF::CodeBuilder *builder) const;
58 cstring getProgramName() const;
59
60 DECLARE_TYPEINFO(PNAEbpfGenerator);
61};
62
63// Similar to class PSAErrorCodesGen in backends/ebpf/psa/ebpfPsaGen.cpp
64
65class PNAErrorCodesGen : public Inspector {
66 EBPF::CodeBuilder *builder;
67
68 public:
69 explicit PNAErrorCodesGen(EBPF::CodeBuilder *builder) : builder(builder) {}
70
71 bool preorder(const IR::Type_Error *errors) override {
72 int id = -1;
73 for (auto decl : errors->members) {
74 ++id;
75 if (decl->srcInfo.isValid()) {
76 auto sourceFile = decl->srcInfo.getSourceFile();
77 // all the error codes are located in core.p4 file, they are defined in pna.h
78 if (sourceFile.endsWith("p4include/core.p4")) continue;
79 }
80
81 builder->emitIndent();
82 builder->appendFormat("static const ParserError_t %v = %d", decl->name, id);
83 builder->endOfStatement(true);
84
85 // type ParserError_t is u8, which can have values from 0 to 255
86 if (id > 255) {
87 ::P4::error(ErrorType::ERR_OVERLIMIT,
88 "%1%: Reached maximum number of possible errors", decl);
89 }
90 }
91 builder->newline();
92 return false;
93 }
94};
95
96// Similar to class PSAArchTC in backends/ebpf/psa/ebpfPsaGen.h
97
98class PNAArchTC : public PNAEbpfGenerator {
99 public:
101
102 PNAArchTC(const EbpfOptions &options, std::vector<EBPF::EBPFType *> &ebpfTypes,
104 const ConvertToBackendIR *tcIR)
105 : PNAEbpfGenerator(options, ebpfTypes, pipeline, tcIR), xdp(xdp) {}
106
107 void emit(EBPF::CodeBuilder *builder) const override;
108 void emitParser(EBPF::CodeBuilder *builder) const override;
109 void emitHeader(EBPF::CodeBuilder *builder) const override;
110 virtual void emitHeaderIncludes(EBPF::CodeBuilder *builder) const;
111 virtual void emitHeaderDefs(EBPF::CodeBuilder *builder) const;
112 void emitInstances(EBPF::CodeBuilder *builder) const override;
113 void emitGlobalFunctions(EBPF::CodeBuilder *builder) const;
114
115 DECLARE_TYPEINFO(PNAArchTC);
116};
117
118class TCIngressPipelinePNA : public EBPF::TCIngressPipeline {
119 public:
120 TCIngressPipelinePNA(cstring name, const EbpfOptions &options, P4::ReferenceMap *refMap,
121 P4::TypeMap *typeMap)
122 : EBPF::TCIngressPipeline(name, options, refMap, typeMap) {}
123
124 void emit(EBPF::CodeBuilder *builder) override;
125 void emitLocalVariables(EBPF::CodeBuilder *builder) override;
126 void emitGlobalMetadataInitializer(EBPF::CodeBuilder *builder) override;
127 void emitTrafficManager(EBPF::CodeBuilder *builder) override;
128
129 DECLARE_TYPEINFO(TCIngressPipelinePNA, EBPF::TCIngressPipeline);
130};
131
132class PnaStateTranslationVisitor : public EBPF::PsaStateTranslationVisitor {
133 public:
134 explicit PnaStateTranslationVisitor(P4::ReferenceMap *refMap, P4::TypeMap *typeMap,
136 : EBPF::PsaStateTranslationVisitor(refMap, typeMap, prsr) {}
137
138 bool preorder(const IR::Member *expression) override;
139 mutable bool extractedVarbit = false;
140
141 protected:
142 unsigned int compileExtractVarbits(const IR::Expression *, const IR::StructField *,
143 unsigned int, EBPF::EBPFType *, const char *);
144 unsigned int compileExtractField(const IR::Expression *, const IR::StructField *, unsigned int,
145 EBPF::EBPFType *, const char *);
146 void compileLookahead(const IR::Expression *destination) override;
147 bool preorder(const IR::SelectCase *selectCase) override;
148 bool preorder(const IR::SelectExpression *expression) override;
149 bool preorder(const IR::AssignmentStatement *statement) override;
150 void processMethod(const P4::ExternMethod *method) override;
151 void compileExtract(const IR::Expression *dest, const IR::Expression *varsize = 0);
152 char *visit_to_string(const IR::Expression *);
153};
154
155class EBPFPnaParser : public EBPF::EBPFPsaParser {
156 public:
157 EBPFPnaParser(const EBPF::EBPFProgram *program, const IR::ParserBlock *block,
158 const P4::TypeMap *typeMap);
159 void emit(EBPF::CodeBuilder *builder) override;
160 void emitRejectState(EBPF::CodeBuilder *) override;
161 void emitDeclaration(EBPF::CodeBuilder *builder, const IR::Declaration *decl) override;
162
163 DECLARE_TYPEINFO(EBPFPnaParser, EBPF::EBPFPsaParser);
164};
165
166class EBPFTablePNA : public EBPF::EBPFTablePSA {
167 protected:
168 EBPF::ActionTranslationVisitor *createActionTranslationVisitor(cstring valueName,
169 const EBPF::EBPFProgram *program,
170 const IR::P4Action *action,
171 bool isDefaultAction) const;
172 void validateKeys() const override;
173 void initDirectCounters();
174 void initDirectMeters();
175 const ConvertToBackendIR *tcIR;
176
177 public:
178 EBPFTablePNA(const EBPF::EBPFProgram *program, const IR::TableBlock *table,
179 EBPF::CodeGenInspector *codeGen, const ConvertToBackendIR *tcIR)
180 : EBPF::EBPFTablePSA(program, table, codeGen), tcIR(tcIR) {
181 initDirectCounters();
182 initDirectMeters();
183 }
184 void emitInitializer(EBPF::CodeBuilder *builder) override;
185 void emitDefaultActionStruct(EBPF::CodeBuilder *builder);
186 void emitKeyType(EBPF::CodeBuilder *builder) override;
187 void emitValueType(EBPF::CodeBuilder *builder) override;
188 void emitValueStructStructure(EBPF::CodeBuilder *builder) override;
189 void emitActionArguments(EBPF::CodeBuilder *builder, const IR::P4Action *action, cstring name);
190 void emitKeyPNA(EBPF::CodeBuilder *builder, cstring keyName);
191 bool isMatchTypeSupported(const IR::Declaration_ID *matchType) override {
192 if (matchType->name.name == "range" || matchType->name.name == "rangelist" ||
193 matchType->name.name == "optional")
194 return 1;
195 return EBPF::EBPFTable::isMatchTypeSupported(matchType);
196 }
197 void emitAction(EBPF::CodeBuilder *builder, cstring valueName,
198 cstring actionRunVariable) override;
199 void emitValueActionIDNames(EBPF::CodeBuilder *builder) override;
200 cstring p4ActionToActionIDName(const IR::P4Action *action) const;
201
202 DECLARE_TYPEINFO(EBPFTablePNA, EBPF::EBPFTablePSA);
203};
204
206
207class DeparserBodyTranslatorPNA : public EBPF::DeparserBodyTranslatorPSA {
208 public:
209 explicit DeparserBodyTranslatorPNA(const IngressDeparserPNA *deparser);
210
211 void processFunction(const P4::ExternFunction *function) override;
212 bool preorder(const IR::AssignmentStatement *a) override;
213};
214
215class IngressDeparserPNA : public EBPF::EBPFDeparserPSA {
216 public:
217 mutable bool touched_skb_metadata;
218
219 IngressDeparserPNA(const EBPF::EBPFProgram *program, const IR::ControlBlock *control,
220 const IR::Parameter *parserHeaders, const IR::Parameter *istd)
221 : EBPF::EBPFDeparserPSA(program, control, parserHeaders, istd),
222 touched_skb_metadata(false) {
223 codeGen = new DeparserBodyTranslatorPNA(this);
224 }
225
226 bool addExternDeclaration = false;
227 bool build() override;
228 void emit(EBPF::CodeBuilder *builder) override;
229 void emitPreDeparser(EBPF::CodeBuilder *builder) override;
230 void emitDeclaration(EBPF::CodeBuilder *builder, const IR::Declaration *decl) override;
231
232 void emitExternDefinition(EBPF::CodeBuilder *builder) {
233 if (addExternDeclaration) {
234 builder->emitIndent();
235 builder->appendLine("struct p4tc_ext_bpf_params ext_params = {};");
236 }
237 }
238 DECLARE_TYPEINFO(IngressDeparserPNA, EBPF::EBPFDeparserPSA);
239};
240
241// Similar to class ConvertToEbpfPSA in backends/ebpf/psa/ebpfPsaGen.h
242
243class ConvertToEbpfPNA : public Transform {
244 const EbpfOptions &options;
245 P4::TypeMap *typemap;
246 P4::ReferenceMap *refmap;
247 const PNAEbpfGenerator *ebpf_program;
248 const ConvertToBackendIR *tcIR;
249
250 public:
251 ConvertToEbpfPNA(const EbpfOptions &options, P4::ReferenceMap *refmap, P4::TypeMap *typemap,
252 const ConvertToBackendIR *tcIR)
253 : options(options), typemap(typemap), refmap(refmap), ebpf_program(nullptr), tcIR(tcIR) {}
254
255 const PNAEbpfGenerator *build(const IR::ToplevelBlock *prog);
256 const IR::Node *preorder(IR::ToplevelBlock *p) override;
257 const PNAEbpfGenerator *getEBPFProgram() { return ebpf_program; }
258};
259
260// Similar to class ConvertToEbpfPipeline in backends/ebpf/psa/ebpfPsaGen.h
261
262class ConvertToEbpfPipelineTC : public Inspector {
263 const cstring name;
264 const EBPF::pipeline_type type;
265 const EbpfOptions &options;
266 const IR::ParserBlock *parserBlock;
267 const IR::ControlBlock *controlBlock;
268 const IR::ControlBlock *deparserBlock;
269 P4::TypeMap *typemap;
270 P4::ReferenceMap *refmap;
271 EBPF::EBPFPipeline *pipeline;
272 const ConvertToBackendIR *tcIR;
273 std::vector<EBPF::EBPFType *> ebpfTypes;
274
275 public:
276 ConvertToEbpfPipelineTC(cstring name, EBPF::pipeline_type type, const EbpfOptions &options,
277 const IR::ParserBlock *parserBlock,
278 const IR::ControlBlock *controlBlock,
279 const IR::ControlBlock *deparserBlock, P4::ReferenceMap *refmap,
280 P4::TypeMap *typemap, const ConvertToBackendIR *tcIR,
281 std::vector<EBPF::EBPFType *> ebpfTypes)
282 : name(name),
283 type(type),
284 options(options),
285 parserBlock(parserBlock),
286 controlBlock(controlBlock),
287 deparserBlock(deparserBlock),
288 typemap(typemap),
289 refmap(refmap),
290 pipeline(nullptr),
291 tcIR(tcIR),
292 ebpfTypes(ebpfTypes) {}
293
294 bool preorder(const IR::PackageBlock *block) override;
295 EBPF::EBPFPipeline *getEbpfPipeline() { return pipeline; }
296};
297
298// Similar to class ConvertToEBPFParserPSA in backends/ebpf/psa/ebpfPsaGen.h
299
300class ConvertToEBPFParserPNA : public Inspector {
301 EBPF::EBPFProgram *program;
302 P4::TypeMap *typemap;
303 TC::EBPFPnaParser *parser;
304
305 public:
306 ConvertToEBPFParserPNA(EBPF::EBPFProgram *program, P4::TypeMap *typemap)
307 : program(program), typemap(typemap), parser(nullptr) {}
308
309 bool preorder(const IR::ParserBlock *prsr) override;
310 bool preorder(const IR::P4ValueSet *pvs) override;
311 EBPF::EBPFParser *getEBPFParser() { return parser; }
312};
313
314class EBPFControlPNA : public EBPF::EBPFControlPSA {
315 public:
316 bool addExternDeclaration = false;
317 std::map<cstring, EBPFRegisterPNA *> pna_registers;
318 std::map<cstring, EBPFHashPNA *> pna_hashes;
319 std::map<cstring, EBPFRandomPNA *> pna_randoms;
320
321 mutable bool touched_skb_metadata;
322
323 EBPFControlPNA(const EBPF::EBPFProgram *program, const IR::ControlBlock *control,
324 const IR::Parameter *parserHeaders)
325 : EBPF::EBPFControlPSA(program, control, parserHeaders), touched_skb_metadata(false) {}
326
327 EBPFRegisterPNA *getRegister(cstring name) const {
328 auto result = ::P4::get(pna_registers, name);
329 BUG_CHECK(result != nullptr, "No register named %1%", name);
330 return result;
331 }
332 EBPFHashPNA *getHash(cstring name) const {
333 auto result = ::P4::get(pna_hashes, name);
334 return result;
335 }
336 EBPFRandomPNA *getRandom(cstring name) const {
337 auto result = ::P4::get(pna_randoms, name);
338 return result;
339 }
340 void emitExternDefinition(EBPF::CodeBuilder *builder) {
341 if (addExternDeclaration) {
342 builder->emitIndent();
343 builder->appendLine("struct p4tc_ext_bpf_params ext_params = {};");
344 builder->emitIndent();
345 builder->appendLine("struct p4tc_ext_bpf_val ext_val = {};");
346 builder->emitIndent();
347 builder->appendLine("struct p4tc_ext_bpf_val *ext_val_ptr;");
348 }
349 }
350 void emitTableTypes(EBPF::CodeBuilder *builder) { EBPF::EBPFControl::emitTableTypes(builder); }
351 void emit(EBPF::CodeBuilder *builder);
352};
353
354// Similar to class ConvertToEBPFControlPSA in backends/ebpf/psa/ebpfPsaGen.h
355
356class ConvertToEBPFControlPNA : public Inspector {
357 EBPF::EBPFProgram *program;
358 EBPF::pipeline_type type;
359 EBPFControlPNA *control;
360
361 const IR::Parameter *parserHeaders;
362 P4::ReferenceMap *refmap;
363
364 const ConvertToBackendIR *tcIR;
365
366 public:
367 ConvertToEBPFControlPNA(EBPF::EBPFProgram *program, const IR::Parameter *parserHeaders,
368 P4::ReferenceMap *refmap, EBPF::pipeline_type type,
369 const ConvertToBackendIR *tcIR)
370 : program(program),
371 type(type),
372 control(nullptr),
373 parserHeaders(parserHeaders),
374 refmap(refmap),
375 tcIR(tcIR) {}
376
377 bool preorder(const IR::TableBlock *) override;
378 bool preorder(const IR::ControlBlock *) override;
379 bool preorder(const IR::Declaration_Variable *) override;
380 bool preorder(const IR::Member *m) override;
381 bool preorder(const IR::IfStatement *a) override;
382 bool preorder(const IR::ExternBlock *instance) override;
383 bool checkPnaTimestampMem(const IR::Member *m);
384 EBPFControlPNA *getEBPFControl() { return control; }
385};
386
387// Similar to class ConvertToEBPFDeparserPSA in backends/ebpf/psa/ebpfPsaGen.h
388
389class ConvertToEBPFDeparserPNA : public Inspector {
390 EBPF::EBPFProgram *program;
391 const IR::Parameter *parserHeaders;
392 const IR::Parameter *istd;
393 const ConvertToBackendIR *tcIR;
394 std::vector<EBPF::EBPFType *> ebpfTypes;
395 TC::IngressDeparserPNA *deparser;
396
397 public:
398 ConvertToEBPFDeparserPNA(EBPF::EBPFProgram *program, const IR::Parameter *parserHeaders,
399 const IR::Parameter *istd, const ConvertToBackendIR *tcIR,
400 std::vector<EBPF::EBPFType *> ebpfTypes)
401 : program(program),
402 parserHeaders(parserHeaders),
403 istd(istd),
404 tcIR(tcIR),
405 ebpfTypes(ebpfTypes),
406 deparser(nullptr) {}
407
408 bool preorder(const IR::ControlBlock *) override;
409 bool preorder(const IR::Declaration_Instance *) override;
410 EBPF::EBPFDeparserPSA *getEBPFDeparser() { return deparser; }
411};
412
413// Similar to class ControlBodyTranslatorPSA in backends/ebpf/psa/ebpfPsaControl.h
414
415class ControlBodyTranslatorPNA : public EBPF::ControlBodyTranslator {
416 public:
417 const ConvertToBackendIR *tcIR;
418 const EBPF::EBPFTablePSA *table;
419 explicit ControlBodyTranslatorPNA(const EBPFControlPNA *control);
420 explicit ControlBodyTranslatorPNA(const EBPFControlPNA *control,
421 const ConvertToBackendIR *tcIR);
422 explicit ControlBodyTranslatorPNA(const EBPFControlPNA *control, const ConvertToBackendIR *tcIR,
423 const EBPF::EBPFTablePSA *table);
424 void processFunction(const P4::ExternFunction *function) override;
425 void processApply(const P4::ApplyMethod *method) override;
426 virtual cstring getParamName(const IR::PathExpression *);
427 bool preorder(const IR::AssignmentStatement *a) override;
428 void processMethod(const P4::ExternMethod *method) override;
429 bool preorder(const IR::Member *) override;
430 bool IsTableAddOnMiss(const IR::P4Table *table);
431 const IR::P4Action *GetAddOnMissHitAction(cstring actionName);
432 void ValidateAddOnMissMissAction(const IR::P4Action *act);
433 bool arithCommon(const IR::Operation_Binary *, const char *, const char *);
434 bool sarithCommon(const IR::Operation_Binary *, const char *);
435 bool preorder(const IR::Concat *) override;
436 bool preorder(const IR::Add *) override;
437 bool preorder(const IR::Sub *) override;
438 bool preorder(const IR::Mul *) override;
439 bool preorder(const IR::Cast *) override;
440 bool preorder(const IR::Neg *) override;
441 bool preorder(const IR::Cmpl *) override;
442 bool preorder(const IR::Shl *) override;
443 bool preorder(const IR::Shr *) override;
444 bool preorder(const IR::Equ *) override;
445 bool preorder(const IR::Neq *) override;
446 bool preorder(const IR::Lss *) override;
447 bool preorder(const IR::Leq *) override;
448 bool preorder(const IR::Grt *) override;
449 bool preorder(const IR::Geq *) override;
450 bool preorder(const IR::BAnd *) override;
451 bool preorder(const IR::BOr *) override;
452 bool preorder(const IR::BXor *) override;
453 bool preorder(const IR::AddSat *) override;
454 bool preorder(const IR::SubSat *) override;
455 bool preorder(const IR::Constant *) override;
456 bool bigXSmallMul(const IR::Expression *, const IR::Constant *);
457 void visitHostOrder(const IR::Expression *);
458};
459
460// Similar to class ActionTranslationVisitorPSA in backends/ebpf/psa/ebpfPsaControl.h
461
462class ActionTranslationVisitorPNA : public EBPF::ActionTranslationVisitor,
463 public ControlBodyTranslatorPNA {
464 protected:
465 const EBPF::EBPFTablePSA *table;
466 bool isDefaultAction;
467
468 public:
469 const ConvertToBackendIR *tcIR;
470 ActionTranslationVisitorPNA(const EBPF::EBPFProgram *program, cstring valueName,
471 const EBPF::EBPFTablePSA *table, const ConvertToBackendIR *tcIR,
472 const IR::P4Action *act, bool isDefaultAction);
473 bool preorder(const IR::PathExpression *pe) override;
474 bool isActionParameter(const IR::Expression *expression) const;
475 void processMethod(const P4::ExternMethod *method) override;
476
477 cstring getParamInstanceName(const IR::Expression *expression) const override;
478 cstring getParamName(const IR::PathExpression *) override;
479};
480
481// Similar to class DeparserHdrEmitTranslator in backends/ebpf/ebpfDeparser.h
482
483class DeparserHdrEmitTranslatorPNA : public EBPF::DeparserPrepareBufferTranslator {
484 protected:
485 const EBPF::EBPFDeparser *deparser;
486
487 public:
488 bool in_var = false;
489 mutable bool hasVarbit = false;
490 explicit DeparserHdrEmitTranslatorPNA(const EBPF::EBPFDeparser *deparser);
491
492 void processMethod(const P4::ExternMethod *method) override;
493 void emitField(EBPF::CodeBuilder *builder, cstring field, const IR::Expression *hdrExpr,
494 unsigned alignment, EBPF::EBPFType *type, bool isMAC);
495};
496
497class SizeScanner : public EBPF::DeparserPrepareBufferTranslator {
498 protected:
499 const EBPF::EBPFDeparser *deparser;
500
501 public:
502 explicit SizeScanner(const EBPF::EBPFDeparser *deparser);
503
504 void processMethod(const P4::ExternMethod *method) override;
505 bool preorder(const IR::MethodCallStatement *) override;
506};
507
509 public:
510 static EBPFHashAlgorithmTypeFactoryPNA *instance() {
511 static EBPFHashAlgorithmTypeFactoryPNA factory;
512 return &factory;
513 }
514
515 EBPF::EBPFHashAlgorithmPSA *create(int type, const EBPF::EBPFProgram *program, cstring name);
516};
517
519 public:
520 static EBPFChecksumAlgorithmTypeFactoryPNA *instance() {
522 return &factory;
523 }
524
525 EBPF::EBPFHashAlgorithmPSA *create(int type, const EBPF::EBPFProgram *program, cstring name);
526};
527
528} // namespace P4::TC
529
530#endif /* BACKENDS_TC_EBPFCODEGEN_H_ */
Definition methodInstance.h:129
Definition ebpfTable.h:26
Definition ebpf/codeGen.h:33
Definition ebpf/codeGen.h:41
Definition ebpfControl.h:28
Definition ebpfPsaDeparser.h:31
This translator emits buffer preparation (eg. which headers will be emitted)
Definition ebpfDeparser.h:38
Definition ebpfPsaControl.h:59
Definition ebpfDeparser.h:63
Definition ebpfPsaDeparser.h:39
Definition ebpfPsaHashAlgorithm.h:26
Definition ebpfPsaHashAlgorithm.h:172
Definition ebpfParser.h:81
EBPFPipeline represents a single eBPF program in the TC/XDP hook.
Definition ebpfPipeline.h:28
cstring name
A custom name of eBPF program.
Definition ebpfPipeline.h:31
Definition ebpfProgram.h:39
Definition ebpfPsaParser.h:40
Definition ebpfPsaTable.h:29
Base class for EBPF types.
Definition ebpfType.h:29
Definition ebpfPsaGen.h:31
Definition ebpfPsaParser.h:29
Definition ebpfPipeline.h:199
Definition xdpHelpProgram.h:24
Definition ebpfOptions.h:26
Definition methodInstance.h:194
Definition methodInstance.h:168
Definition castable.h:36
Definition node.h:94
Class used to encode maps from paths to declarations.
Definition referenceMap.h:67
Definition tc/backend.h:329
Definition ebpfCodeGen.h:207
Definition ebpfCodeGen.h:314
Definition ebpfCodeGen.h:508
Definition tcExterns.h:181
Definition ebpfCodeGen.h:155
Definition tcExterns.h:321
Definition tcExterns.h:53
void validateKeys() const override
Definition ebpfCodeGen.cpp:3071
Definition ebpfCodeGen.h:215
void emitPreDeparser(EBPF::CodeBuilder *builder) override
Definition ebpfCodeGen.cpp:1807
void emit(EBPF::CodeBuilder *builder) const override
Definition ebpfCodeGen.cpp:180
void emitParser(EBPF::CodeBuilder *builder) const override
Definition ebpfCodeGen.cpp:278
Definition ebpfCodeGen.h:36
void emitLocalVariables(EBPF::CodeBuilder *builder) override
Generates a set of helper variables that are used during packet processing.
Definition ebpfCodeGen.cpp:609
void emitGlobalMetadataInitializer(EBPF::CodeBuilder *builder) override
Definition ebpfCodeGen.cpp:536
void emitTrafficManager(EBPF::CodeBuilder *builder) override
Definition ebpfCodeGen.cpp:578
Definition typeMap.h:41
Definition cstring.h:85
This file defines functions for the pass to generate the introspection file.
Definition tc/backend.cpp:27
void error(const char *format, Args &&...args)
Report an error with the given message.
Definition lib/error.h:58