-
Notifications
You must be signed in to change notification settings - Fork 452
/
Copy pathebpfObject.h
63 lines (48 loc) · 1.75 KB
/
ebpfObject.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
Copyright 2013-present Barefoot Networks, Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef BACKENDS_EBPF_EBPFOBJECT_H_
#define BACKENDS_EBPF_EBPFOBJECT_H_
#include "codeGen.h"
#include "ebpfModel.h"
#include "frontends/p4/evaluator/evaluator.h"
#include "frontends/p4/typeMap.h"
#include "ir/ir.h"
#include "lib/castable.h"
#include "target.h"
namespace P4::EBPF {
/// Base class for EBPF objects.
class EBPFObject : public ICastable {
public:
virtual ~EBPFObject() {}
static cstring externalName(const IR::IDeclaration *declaration) {
cstring name = declaration->externalName();
return name.replace('.', '_');
}
static cstring getSpecializedTypeName(const IR::Declaration_Instance *di) {
if (auto typeSpec = di->type->to<IR::Type_Specialized>()) {
if (auto typeName = typeSpec->baseType->to<IR::Type_Name>()) {
return typeName->path->name.name;
}
}
return nullptr;
}
static cstring getTypeName(const IR::Declaration_Instance *di) {
if (auto typeName = di->type->to<IR::Type_Name>()) {
return typeName->path->name.name;
}
return nullptr;
}
DECLARE_TYPEINFO(EBPFObject);
};
} // namespace P4::EBPF
#endif /* BACKENDS_EBPF_EBPFOBJECT_H_ */