P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfPsaCounter.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_EBPFPSACOUNTER_H_
8#define BACKENDS_EBPF_PSA_EXTERNS_EBPFPSACOUNTER_H_
9
10#include "backends/ebpf/ebpfTable.h"
11
12namespace P4::EBPF {
13
15
16class EBPFCounterPSA : public EBPFCounterTable {
17 protected:
18 EBPFType *dataplaneWidthType;
19 EBPFType *indexWidthType;
20 bool isDirect;
21
22 public:
23 enum CounterType { PACKETS, BYTES, PACKETS_AND_BYTES };
24 CounterType type;
25
26 EBPFCounterPSA(const EBPFProgram *program, const IR::Declaration_Instance *di, cstring name,
27 CodeGenInspector *codeGen);
28
29 static CounterType toCounterType(int type);
30
31 void emitTypes(CodeBuilder *builder) override;
32 virtual void emitKeyType(CodeBuilder *builder);
33 virtual void emitValueType(CodeBuilder *builder);
34 void emitInstance(CodeBuilder *builder) override;
35
36 void emitMethodInvocation(CodeBuilder *builder, const P4::ExternMethod *method,
37 CodeGenInspector *codeGen);
38 void emitDirectMethodInvocation(CodeBuilder *builder, const P4::ExternMethod *method,
39 cstring valuePtr);
40 virtual void emitCount(CodeBuilder *builder, const IR::MethodCallExpression *expression,
41 CodeGenInspector *codeGen);
42 virtual void emitCounterUpdate(CodeBuilder *builder, cstring target, cstring keyName);
43 virtual void emitCounterInitializer(CodeBuilder *builder);
44
45 DECLARE_TYPEINFO(EBPFCounterPSA, EBPFCounterTable);
46};
47
48} // namespace P4::EBPF
49
50#endif /* BACKENDS_EBPF_PSA_EXTERNS_EBPFPSACOUNTER_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 cstring.h:85
Definition codeGen.cpp:25