17#ifndef BACKENDS_EBPF_PSA_EBPFPSAGEN_H_
18#define BACKENDS_EBPF_PSA_EBPFPSAGEN_H_
20#include "backends/bmv2/psa_switch/psaSwitch.h"
21#include "backends/ebpf/codeGen.h"
22#include "backends/ebpf/ebpfObject.h"
23#include "backends/ebpf/ebpfOptions.h"
24#include "ebpfPipeline.h"
25#include "ebpfPsaParser.h"
26#include "xdpHelpProgram.h"
30enum pipeline_type { TC_INGRESS, TC_EGRESS, XDP_INGRESS, XDP_EGRESS, TC_TRAFFIC_MANAGER };
35 std::vector<EBPF::EBPFType *> ebpfTypes;
38 : options(options), ebpfTypes(ebpfTypes) {}
41 virtual void emitPreamble(
CodeBuilder *builder)
const = 0;
50 static const unsigned MaxClones = 64;
51 static const unsigned MaxCloneSessions = 1024;
64 void emitPreamble(
CodeBuilder *builder)
const override;
65 void emitCommonPreamble(
CodeBuilder *builder)
const override;
66 void emitInternalStructures(
CodeBuilder *pBuilder)
const override;
67 void emitTypes(
CodeBuilder *builder)
const override;
68 void emitGlobalHeadersMetadata(
CodeBuilder *builder)
const override;
69 void emitPacketReplicationTables(
CodeBuilder *builder)
const;
70 void emitPipelineInstances(
CodeBuilder *builder)
const override;
72 virtual void emitInitializerSection(
CodeBuilder *builder)
const = 0;
73 void emitHelperFunctions(
CodeBuilder *builder)
const;
76 void emitCRC32LookupTableTypes(
CodeBuilder *builder)
const;
77 void emitCRC32LookupTableInitializer(
CodeBuilder *builder)
const;
78 void emitCRC32LookupTableInstance(
CodeBuilder *builder)
const;
91 void emitInstances(
CodeBuilder *builder)
const override;
92 void emitInitializerSection(
CodeBuilder *builder)
const override;
101 static const unsigned egressDevmapSize = 256;
107 tcIngressForXDP(tcTrafficManager),
108 tcEgressForXDP(tcEgress) {}
112 void emitPreamble(
CodeBuilder *builder)
const override;
113 void emitInstances(
CodeBuilder *builder)
const override;
114 void emitInitializerSection(
CodeBuilder *builder)
const override;
116 void emitXDP2TCInternalStructures(
CodeBuilder *builder)
const;
128 : options(options), typemap(typemap), refmap(refmap), ebpf_psa_arch(
nullptr) {}
131 const IR::Node *preorder(IR::ToplevelBlock *p)
override;
138 const pipeline_type type;
140 const IR::ParserBlock *parserBlock;
141 const IR::ControlBlock *controlBlock;
142 const IR::ControlBlock *deparserBlock;
149 const IR::ParserBlock *parserBlock,
const IR::ControlBlock *controlBlock,
155 parserBlock(parserBlock),
156 controlBlock(controlBlock),
157 deparserBlock(deparserBlock),
162 bool preorder(
const IR::PackageBlock *block)
override;
175 : program(program), type(type), typemap(typemap), parser(
nullptr) {}
177 bool preorder(
const IR::ParserBlock *prsr)
override;
178 bool preorder(
const IR::P4ValueSet *pvs)
override;
187 const IR::Parameter *parserHeaders;
196 parserHeaders(parserHeaders),
199 bool preorder(
const IR::TableBlock *)
override;
200 bool preorder(
const IR::ControlBlock *)
override;
201 bool preorder(
const IR::Declaration_Variable *)
override;
202 bool preorder(
const IR::Member *m)
override;
203 bool preorder(
const IR::IfStatement *a)
override;
204 bool preorder(
const IR::ExternBlock *instance)
override;
211 pipeline_type pipelineType;
213 const IR::Parameter *parserHeaders;
214 const IR::Parameter *istd;
219 const IR::Parameter *istd, pipeline_type type)
222 parserHeaders(parserHeaders),
226 bool preorder(
const IR::ControlBlock *)
override;
227 bool preorder(
const IR::Declaration_Instance *)
override;
Definition ebpfPsaGen.h:182
Definition ebpfPsaGen.h:209
Definition ebpfPsaGen.h:166
Definition ebpfPsaGen.h:120
Definition ebpfPsaGen.h:136
Definition ebpfPsaControl.h:58
Definition ebpfPsaDeparser.h:39
Definition ebpfParser.h:79
Definition ebpfPipeline.h:30
Definition ebpfProgram.h:39
Definition ebpfPsaParser.h:40
Definition ebpfPsaGen.h:32
Definition ebpfPsaGen.h:81
void emit(CodeBuilder *builder) const override
Definition ebpfPsaGen.cpp:419
Definition ebpfPsaGen.h:95
Definition ebpfPsaGen.h:48
Definition xdpHelpProgram.h:24
Definition ebpfOptions.h:26
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66