17#ifndef BACKENDS_EBPF_PSA_EBPFPSADEPARSER_H_
18#define BACKENDS_EBPF_PSA_EBPFPSADEPARSER_H_
20#include "backends/ebpf/ebpfDeparser.h"
21#include "backends/ebpf/psa/ebpfPsaParser.h"
22#include "backends/ebpf/psa/externs/ebpfPsaChecksum.h"
23#include "backends/ebpf/psa/externs/ebpfPsaDigest.h"
24#include "ebpfPsaControl.h"
31class DeparserBodyTranslatorPSA :
public DeparserBodyTranslator {
39class EBPFDeparserPSA :
public EBPFDeparser {
41 const IR::Parameter *user_metadata;
42 const IR::Parameter *istd;
43 const IR::Parameter *resubmit_meta;
44 std::map<cstring, EBPFChecksumPSA *> checksums;
45 std::map<cstring, EBPFDigestPSA *> digests;
47 EBPFDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
48 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
49 : EBPFDeparser(program, control, parserHeaders), istd(istd) {
54 void emitDigestInstances(
CodeBuilder *builder)
const;
55 void emitDeclaration(
CodeBuilder *builder,
const IR::Declaration *decl)
override;
58 auto result = ::P4::get(checksums, name);
59 BUG_CHECK(result !=
nullptr,
"No checksum named %1%", name);
64 auto result = ::P4::get(digests, name);
65 BUG_CHECK(result !=
nullptr,
"No digest named %1%", name);
70 controlBlock->container->body->apply(*codeGen);
74 DECLARE_TYPEINFO(EBPFDeparserPSA, EBPFDeparser);
77class IngressDeparserPSA :
public EBPFDeparserPSA {
79 IngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
80 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
81 : EBPFDeparserPSA(program, control, parserHeaders, istd) {}
83 bool build()
override;
85 DECLARE_TYPEINFO(IngressDeparserPSA, EBPFDeparserPSA);
88class EgressDeparserPSA :
public EBPFDeparserPSA {
90 EgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
91 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
92 : EBPFDeparserPSA(program, control, parserHeaders, istd) {}
94 bool build()
override;
96 DECLARE_TYPEINFO(EgressDeparserPSA, EBPFDeparserPSA);
99class TCIngressDeparserPSA :
public IngressDeparserPSA {
101 TCIngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
102 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
103 : IngressDeparserPSA(program, control, parserHeaders, istd) {}
107 DECLARE_TYPEINFO(TCIngressDeparserPSA, IngressDeparserPSA);
110class TCEgressDeparserPSA :
public EgressDeparserPSA {
112 TCEgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
113 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
114 : EgressDeparserPSA(program, control, parserHeaders, istd) {}
116 DECLARE_TYPEINFO(TCEgressDeparserPSA, EgressDeparserPSA);
119class TCIngressDeparserForTrafficManagerPSA :
public TCIngressDeparserPSA {
121 TCIngressDeparserForTrafficManagerPSA(
const EBPFProgram *program,
122 const IR::ControlBlock *control,
123 const IR::Parameter *parserHeaders,
124 const IR::Parameter *istd)
125 : TCIngressDeparserPSA(program, control, parserHeaders, istd) {}
127 void emitDeparserExternCalls(
CodeBuilder *builder)
override {
132 DECLARE_TYPEINFO(TCIngressDeparserForTrafficManagerPSA, TCIngressDeparserPSA);
135class XDPIngressDeparserPSA :
public IngressDeparserPSA {
137 XDPIngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
138 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
139 : IngressDeparserPSA(program, control, parserHeaders, istd) {}
143 DECLARE_TYPEINFO(XDPIngressDeparserPSA, IngressDeparserPSA);
146class XDPEgressDeparserPSA :
public EgressDeparserPSA {
148 XDPEgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
149 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
150 : EgressDeparserPSA(program, control, parserHeaders, istd) {}
154 DECLARE_TYPEINFO(XDPEgressDeparserPSA, EgressDeparserPSA);
Definition ebpf/codeGen.h:33
Definition ebpfPsaDeparser.h:31
Definition ebpfPsaChecksum.h:25
Definition ebpfPsaDeparser.h:39
Definition ebpfPsaDigest.h:27
Definition ebpfProgram.h:39
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:180
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:136
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:290
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:195
Definition methodInstance.h:194
Definition methodInstance.h:168
Definition codeGen.cpp:25