P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfProgram.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 * Copyright 2013-present Barefoot Networks, Inc.
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
8#ifndef BACKENDS_EBPF_EBPFPROGRAM_H_
9#define BACKENDS_EBPF_EBPFPROGRAM_H_
10
11#include "codeGen.h"
12#include "ebpfModel.h"
13#include "ebpfObject.h"
14#include "ebpfOptions.h"
15#include "frontends/common/options.h"
16#include "frontends/p4/evaluator/evaluator.h"
17#include "frontends/p4/typeMap.h"
18#include "ir/ir.h"
19#include "target.h"
20
21namespace P4::EBPF {
22
23class EBPFProgram;
24class EBPFParser;
25class EBPFControl;
26class EBPFDeparser;
27class EBPFTable;
28class EBPFType;
29
30class EBPFProgram : public EBPFObject {
31 public:
32 // The builder->target defines either TC or XDP target,
33 // while for PSA-eBPF we may use both of them interchangeably.
34 // This field stores the Target object that is unique per eBPF program (pipeline).
35 const Target *progTarget;
36 const EbpfOptions &options;
37 const IR::P4Program *program;
38 const IR::ToplevelBlock *toplevel;
39 P4::ReferenceMap *refMap;
40 P4::TypeMap *typeMap;
41 EBPFParser *parser;
42 EBPFControl *control;
43 EBPFModel &model;
46
47 cstring endLabel, offsetVar, lengthVar, headerStartVar;
48 cstring zeroKey, functionName, errorVar;
49 cstring packetStartVar, packetEndVar, byteVar;
50 cstring errorEnum;
51 cstring license = "GPL"_cs;
53
54 virtual bool build();
55
56 EBPFProgram(const EbpfOptions &options, const IR::P4Program *program, P4::ReferenceMap *refMap,
57 P4::TypeMap *typeMap, const IR::ToplevelBlock *toplevel)
58 : progTarget(nullptr),
59 options(options),
60 program(program),
61 toplevel(toplevel),
62 refMap(refMap),
63 typeMap(typeMap),
64 parser(nullptr),
65 control(nullptr),
66 model(EBPFModel::instance),
67 deparser(nullptr) {
68 // NB: offsetVar not used in eBPF backend - uBPF and TC only
69 offsetVar = EBPFModel::reserved("packetOffsetInBits"_cs);
70 zeroKey = EBPFModel::reserved("zero"_cs);
71 functionName = EBPFModel::reserved("filter"_cs);
72 errorVar = EBPFModel::reserved("errorCode"_cs);
73 packetStartVar = EBPFModel::reserved("packetStart"_cs);
74 packetEndVar = EBPFModel::reserved("packetEnd"_cs);
75 headerStartVar = EBPFModel::reserved("headerStart"_cs);
76 lengthVar = EBPFModel::reserved("pkt_len"_cs);
77 byteVar = EBPFModel::reserved("byte"_cs);
78 endLabel = EBPFModel::reserved("end"_cs);
79 errorEnum = EBPFModel::reserved("errorCodes"_cs);
80 }
81
82 protected:
83 virtual void emitPreamble(CodeBuilder *builder);
84 virtual void emitTypes(CodeBuilder *builder);
85 virtual void emitHeaderInstances(CodeBuilder *builder);
86 virtual void emitLocalVariables(CodeBuilder *builder);
87 virtual void emitPipeline(CodeBuilder *builder);
88
92 virtual bool isLibraryMethod(cstring methodName);
93
94 public:
95 virtual void emitCommonPreamble(CodeBuilder *builder);
96 virtual void emitGeneratedComment(CodeBuilder *builder);
97 virtual void emitH(CodeBuilder *builder,
98 const std::filesystem::path &headerFile); // emits C headers
99 virtual void emitC(CodeBuilder *builder,
100 const std::filesystem::path &headerFile); // emits C program
101
102 DECLARE_TYPEINFO(EBPFProgram, EBPFObject);
103};
104
105} // namespace P4::EBPF
106
107#endif /* BACKENDS_EBPF_EBPFPROGRAM_H_ */
Definition ebpf/codeGen.h:33
Definition ebpfControl.h:57
Definition ebpfDeparser.h:59
Keep this in sync with ebpf_model.p4 and xdp_model.p4.
Definition ebpfModel.h:66
Base class for EBPF objects.
Definition ebpfObject.h:31
Definition ebpfParser.h:81
Definition ebpfProgram.h:30
EBPFProgram(const EbpfOptions &options, const IR::P4Program *program, P4::ReferenceMap *refMap, P4::TypeMap *typeMap, const IR::ToplevelBlock *toplevel)
return 'true' on success
Definition ebpfProgram.h:56
cstring arrayIndexType
TODO: this should be a compiler option probably.
Definition ebpfProgram.h:52
virtual bool isLibraryMethod(cstring methodName)
Definition ebpfProgram.cpp:337
EBPFDeparser * deparser
Deparser may be NULL if not supported (e.g. ebpfFilter package).
Definition ebpfProgram.h:45
Definition ebpfTable.h:72
Base class for EBPF types.
Definition ebpfType.h:29
Definition ebpf/target.h:44
Definition ebpfOptions.h:26
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