P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfPsaMeter.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_EXTERNS_EBPFPSAMETER_H_
8#define BACKENDS_EBPF_PSA_EXTERNS_EBPFPSAMETER_H_
9
10#include "backends/ebpf/ebpfTable.h"
11
12namespace P4::EBPF {
13
15
16class EBPFMeterPSA : public EBPFTableBase {
17 private:
18 static IR::IndexedVector<IR::StructField> getValueFields();
19 static IR::Type_Struct *createSpinlockStruct();
20 static EBPFType *getBaseValueType(P4::ReferenceMap *refMap);
21 EBPFType *getIndirectValueType() const;
22 static cstring getBaseStructName(P4::ReferenceMap *refMap);
23 cstring getIndirectStructName() const;
24
25 void emitIndex(CodeBuilder *builder, const P4::ExternMethod *method,
26 ControlBodyTranslatorPSA *translator) const;
27
28 protected:
29 const cstring indirectValueField = "value"_cs;
30 const cstring spinlockField = "lock"_cs;
31
32 size_t size{};
33 EBPFType *keyType{};
34 bool isDirect;
35
36 public:
37 enum MeterType { PACKETS, BYTES };
38 MeterType type;
39
40 EBPFMeterPSA(const EBPFProgram *program, cstring instanceName,
41 const IR::Declaration_Instance *di, CodeGenInspector *codeGen);
42
43 static MeterType toType(const int typeCode);
44
45 void emitKeyType(CodeBuilder *builder) const;
46 static void emitValueStruct(CodeBuilder *builder, P4::ReferenceMap *refMap);
47 void emitValueType(CodeBuilder *builder) const;
48 void emitSpinLockField(CodeBuilder *builder) const;
49 void emitInstance(CodeBuilder *builder) const;
50 void emitExecute(CodeBuilder *builder, const P4::ExternMethod *method,
51 ControlBodyTranslatorPSA *translator) const;
52 void emitDirectExecute(CodeBuilder *builder, const P4::ExternMethod *method,
53 cstring valuePtr) const;
54
55 static cstring meterExecuteFunc(bool trace, P4::ReferenceMap *refMap);
56};
57
58} // namespace P4::EBPF
59
60#endif // BACKENDS_EBPF_PSA_EXTERNS_EBPFPSAMETER_H_
Definition ebpf/codeGen.h:33
Definition ebpf/codeGen.h:41
Definition ebpfPsaControl.h:20
Definition ebpfProgram.h:30
Base class for EBPF types.
Definition ebpfType.h:29
Definition methodInstance.h:168
Definition indexed_vector.h:31
Class used to encode maps from paths to declarations.
Definition referenceMap.h:67
Definition cstring.h:85
Definition codeGen.cpp:25