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
12
namespace
P4::EBPF
{
13
14
class
ControlBodyTranslatorPSA
;
15
16
class
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_
P4::EBPF::CodeBuilder
Definition
ebpf/codeGen.h:33
P4::EBPF::CodeGenInspector
Definition
ebpf/codeGen.h:41
P4::EBPF::ControlBodyTranslatorPSA
Definition
ebpfPsaControl.h:20
P4::EBPF::EBPFProgram
Definition
ebpfProgram.h:30
P4::EBPF::EBPFType
Base class for EBPF types.
Definition
ebpfType.h:29
P4::ExternMethod
Definition
methodInstance.h:168
P4::IR::IndexedVector
Definition
indexed_vector.h:31
P4::ReferenceMap
Class used to encode maps from paths to declarations.
Definition
referenceMap.h:67
P4::cstring
Definition
cstring.h:85
P4::EBPF
Definition
codeGen.cpp:25
backends
ebpf
psa
externs
ebpfPsaMeter.h
Generated by
1.13.2