P4C
The P4 Compiler
Loading...
Searching...
No Matches
ebpfPsaChecksum.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_EBPFPSACHECKSUM_H_
8#define BACKENDS_EBPF_PSA_EXTERNS_EBPFPSACHECKSUM_H_
9
10#include "backends/ebpf/ebpfObject.h"
11#include "ebpfPsaHashAlgorithm.h"
12
13namespace P4::EBPF {
14
15class EBPFChecksumPSA : public EBPFObject {
16 protected:
18 const IR::Declaration_Instance *declaration;
19
20 void init(const EBPFProgram *program, cstring name, int type);
21
22 public:
23 EBPFChecksumPSA(const EBPFProgram *program, const IR::Declaration_Instance *block,
24 cstring name);
25
26 EBPFChecksumPSA(const EBPFProgram *program, const IR::Declaration_Instance *block, cstring name,
27 int type);
28
29 void emitVariables(CodeBuilder *builder) {
30 if (engine) engine->emitVariables(builder, declaration);
31 }
32
33 virtual void processMethod(CodeBuilder *builder, cstring method,
34 const IR::MethodCallExpression *expr, Visitor *visitor);
35};
36
37class EBPFInternetChecksumPSA : public EBPFChecksumPSA {
38 public:
39 EBPFInternetChecksumPSA(const EBPFProgram *program, const IR::Declaration_Instance *block,
40 cstring name)
41 : EBPFChecksumPSA(program, block, name,
42 EBPFHashAlgorithmPSA::HashAlgorithm::ONES_COMPLEMENT16) {}
43
44 void processMethod(CodeBuilder *builder, cstring method, const IR::MethodCallExpression *expr,
45 Visitor *visitor) override;
46};
47
48class EBPFHashPSA : public EBPFChecksumPSA {
49 public:
50 EBPFHashPSA(const EBPFProgram *program, const IR::Declaration_Instance *block, cstring name)
51 : EBPFChecksumPSA(program, block, name) {}
52
53 void processMethod(CodeBuilder *builder, cstring method, const IR::MethodCallExpression *expr,
54 Visitor *visitor) override;
55
56 void calculateHash(CodeBuilder *builder, const IR::MethodCallExpression *expr,
57 Visitor *visitor);
58
59 void emitGetMethod(CodeBuilder *builder, const IR::MethodCallExpression *expr,
60 Visitor *visitor);
61};
62
63} // namespace P4::EBPF
64
65#endif /* BACKENDS_EBPF_PSA_EXTERNS_EBPFPSACHECKSUM_H_ */
Definition ebpf/codeGen.h:33
Definition ebpfPsaHashAlgorithm.h:16
void calculateHash(CodeBuilder *builder, const IR::MethodCallExpression *expr, Visitor *visitor)
This method calculates a hash value and saves it to the registerVar.
Definition ebpfPsaChecksum.cpp:88
Base class for EBPF objects.
Definition ebpfObject.h:31
Definition ebpfProgram.h:30
Definition visitor.h:75
Definition cstring.h:85
Definition codeGen.cpp:25