P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfPsaParser.h
1/*
2 * SPDX-FileCopyrightText: 2022 Open Networking Foundation
3 * SPDX-FileCopyrightText: 2022 Orange
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7#ifndef BACKENDS_EBPF_PSA_EBPFPSAPARSER_H_
8#define BACKENDS_EBPF_PSA_EBPFPSAPARSER_H_
9
10#include "backends/ebpf/ebpfParser.h"
11#include "backends/ebpf/ebpfType.h"
12#include "backends/ebpf/psa/ebpfPsaTable.h"
13#include "backends/ebpf/psa/externs/ebpfPsaChecksum.h"
14
15namespace P4::EBPF {
16
17class EBPFPsaParser;
18
19class PsaStateTranslationVisitor : public StateTranslationVisitor {
20 public:
21 EBPFPsaParser *parser;
22
23 explicit PsaStateTranslationVisitor(P4::ReferenceMap *refMap, P4::TypeMap *typeMap,
24 EBPFPsaParser *prsr)
25 : StateTranslationVisitor(refMap, typeMap), parser(prsr) {}
26
27 void processMethod(const P4::ExternMethod *ext) override;
28};
29
30class EBPFPsaParser : public EBPFParser {
31 public:
32 std::map<cstring, EBPFChecksumPSA *> checksums;
33 const IR::Parameter *inputMetadata;
34
35 EBPFPsaParser(const EBPFProgram *program, const IR::ParserBlock *block,
36 const P4::TypeMap *typeMap);
37
38 void emit(CodeBuilder *builder) override;
39 void emitParserInputMetadata(CodeBuilder *builder);
40 void emitDeclaration(CodeBuilder *builder, const IR::Declaration *decl) override;
41 void emitRejectState(CodeBuilder *builder) override;
42
43 EBPFChecksumPSA *getChecksum(cstring name) const {
44 auto result = ::P4::get(checksums, name);
45 BUG_CHECK(result != nullptr, "No checksum named %1%", name);
46 return result;
47 }
48
49 DECLARE_TYPEINFO(EBPFPsaParser, EBPFParser);
50};
51
52} // namespace P4::EBPF
53
54#endif /* BACKENDS_EBPF_PSA_EBPFPSAPARSER_H_ */
Definition ebpf/codeGen.h:33
Definition ebpfPsaChecksum.h:15
Definition ebpfProgram.h:30
Definition ebpfPsaParser.h:30
Definition methodInstance.h:168
Class used to encode maps from paths to declarations.
Definition referenceMap.h:67
Definition typeMap.h:32
Definition cstring.h:85
Definition codeGen.cpp:25