7#ifndef BACKENDS_EBPF_PSA_EBPFPSADEPARSER_H_
8#define BACKENDS_EBPF_PSA_EBPFPSADEPARSER_H_
10#include "backends/ebpf/ebpfDeparser.h"
11#include "backends/ebpf/psa/ebpfPsaParser.h"
12#include "backends/ebpf/psa/externs/ebpfPsaChecksum.h"
13#include "backends/ebpf/psa/externs/ebpfPsaDigest.h"
14#include "ebpfPsaControl.h"
21class DeparserBodyTranslatorPSA :
public DeparserBodyTranslator {
29class EBPFDeparserPSA :
public EBPFDeparser {
31 const IR::Parameter *user_metadata;
32 const IR::Parameter *istd;
33 const IR::Parameter *resubmit_meta;
34 std::map<cstring, EBPFChecksumPSA *> checksums;
35 std::map<cstring, EBPFDigestPSA *> digests;
37 EBPFDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
38 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
39 : EBPFDeparser(program, control, parserHeaders), istd(istd) {
44 void emitDigestInstances(
CodeBuilder *builder)
const;
45 void emitDeclaration(
CodeBuilder *builder,
const IR::Declaration *decl)
override;
48 auto result = ::P4::get(checksums, name);
49 BUG_CHECK(result !=
nullptr,
"No checksum named %1%", name);
54 auto result = ::P4::get(digests, name);
55 BUG_CHECK(result !=
nullptr,
"No digest named %1%", name);
60 controlBlock->container->body->apply(*codeGen);
64 DECLARE_TYPEINFO(EBPFDeparserPSA, EBPFDeparser);
67class IngressDeparserPSA :
public EBPFDeparserPSA {
69 IngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
70 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
71 : EBPFDeparserPSA(program, control, parserHeaders, istd) {}
73 bool build()
override;
75 DECLARE_TYPEINFO(IngressDeparserPSA, EBPFDeparserPSA);
78class EgressDeparserPSA :
public EBPFDeparserPSA {
80 EgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
81 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
82 : EBPFDeparserPSA(program, control, parserHeaders, istd) {}
84 bool build()
override;
86 DECLARE_TYPEINFO(EgressDeparserPSA, EBPFDeparserPSA);
89class TCIngressDeparserPSA :
public IngressDeparserPSA {
91 TCIngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
92 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
93 : IngressDeparserPSA(program, control, parserHeaders, istd) {}
97 DECLARE_TYPEINFO(TCIngressDeparserPSA, IngressDeparserPSA);
100class TCEgressDeparserPSA :
public EgressDeparserPSA {
102 TCEgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
103 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
104 : EgressDeparserPSA(program, control, parserHeaders, istd) {}
106 DECLARE_TYPEINFO(TCEgressDeparserPSA, EgressDeparserPSA);
109class TCIngressDeparserForTrafficManagerPSA :
public TCIngressDeparserPSA {
111 TCIngressDeparserForTrafficManagerPSA(
const EBPFProgram *program,
112 const IR::ControlBlock *control,
113 const IR::Parameter *parserHeaders,
114 const IR::Parameter *istd)
115 : TCIngressDeparserPSA(program, control, parserHeaders, istd) {}
117 void emitDeparserExternCalls(
CodeBuilder *builder)
override {
122 DECLARE_TYPEINFO(TCIngressDeparserForTrafficManagerPSA, TCIngressDeparserPSA);
125class XDPIngressDeparserPSA :
public IngressDeparserPSA {
127 XDPIngressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
128 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
129 : IngressDeparserPSA(program, control, parserHeaders, istd) {}
133 DECLARE_TYPEINFO(XDPIngressDeparserPSA, IngressDeparserPSA);
136class XDPEgressDeparserPSA :
public EgressDeparserPSA {
138 XDPEgressDeparserPSA(
const EBPFProgram *program,
const IR::ControlBlock *control,
139 const IR::Parameter *parserHeaders,
const IR::Parameter *istd)
140 : EgressDeparserPSA(program, control, parserHeaders, istd) {}
144 DECLARE_TYPEINFO(XDPEgressDeparserPSA, EgressDeparserPSA);
Definition ebpf/codeGen.h:33
Definition ebpfPsaDeparser.h:21
Definition ebpfPsaChecksum.h:15
Definition ebpfPsaDeparser.h:29
Definition ebpfPsaDigest.h:18
Definition ebpfProgram.h:30
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:168
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:124
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:278
void emitPreDeparser(CodeBuilder *builder) override
Definition ebpfPsaDeparser.cpp:183
Definition methodInstance.h:194
Definition methodInstance.h:168
Definition codeGen.cpp:25