P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::EBPF::EBPFProgram Class Reference
Inheritance diagram for P4::EBPF::EBPFProgram:
[legend]

Public Member Functions

 EBPFProgram (const EbpfOptions &options, const IR::P4Program *program, P4::ReferenceMap *refMap, P4::TypeMap *typeMap, const IR::ToplevelBlock *toplevel)
 return 'true' on success
 
virtual bool build ()
 
 DECLARE_TYPEINFO (EBPFProgram, EBPFObject)
 
virtual void emitC (CodeBuilder *builder, const std::filesystem::path &headerFile)
 
virtual void emitCommonPreamble (CodeBuilder *builder)
 
virtual void emitGeneratedComment (CodeBuilder *builder)
 
virtual void emitH (CodeBuilder *builder, const std::filesystem::path &headerFile)
 
- Public Member Functions inherited from P4::EBPF::EBPFObject
 DECLARE_TYPEINFO (EBPFObject)
 
- Public Member Functions inherited from P4::ICastable
template<typename T >
T & as ()
 Tries to convert the class to type T. A BUG occurs if the cast fails.
 
template<typename T >
const T & as () const
 Tries to convert the class to type T. A BUG occurs if the cast fails.
 
template<typename T >
T * checkedTo ()
 Performs a checked cast. A BUG occurs if the cast fails.
 
template<typename T >
const T * checkedTo () const
 Performs a checked cast. A BUG occurs if the cast fails.
 
- Public Member Functions inherited from P4::RTTI::Base
template<typename T >
bool is () const noexcept
 
virtual bool isA (TypeId typeId) const noexcept=0
 
template<typename T >
const T * to () const noexcept
 Same as to, but returns const pointer to T.
 
template<typename T >
T * to () noexcept
 
virtual TypeId typeId () const noexcept=0
 

Public Attributes

cstring arrayIndexType = "u32"_cs
 TODO: this should be a compiler option probably.
 
cstring byteVar
 
EBPFControlcontrol
 
EBPFDeparserdeparser
 Deparser may be NULL if not supported (e.g. ebpfFilter package).
 
cstring endLabel
 
cstring errorEnum
 
cstring errorVar
 
cstring functionName
 
cstring headerStartVar
 
cstring lengthVar
 
cstring license = "GPL"_cs
 
EBPFModelmodel
 
cstring offsetVar
 
const EbpfOptionsoptions
 
cstring packetEndVar
 
cstring packetStartVar
 
EBPFParserparser
 
const IR::P4Program * program
 
const TargetprogTarget
 
P4::ReferenceMaprefMap
 
const IR::ToplevelBlock * toplevel
 
P4::TypeMaptypeMap
 
cstring zeroKey
 

Protected Member Functions

virtual void emitHeaderInstances (CodeBuilder *builder)
 
virtual void emitLocalVariables (CodeBuilder *builder)
 
virtual void emitPipeline (CodeBuilder *builder)
 
virtual void emitPreamble (CodeBuilder *builder)
 
virtual void emitTypes (CodeBuilder *builder)
 
virtual bool isLibraryMethod (cstring methodName)
 
- Protected Member Functions inherited from P4::RTTI::Base
virtual const void * toImpl (TypeId typeId) const noexcept=0
 

Additional Inherited Members

- Static Public Member Functions inherited from P4::EBPF::EBPFObject
static cstring externalName (const IR::IDeclaration *declaration)
 
static cstring getSpecializedTypeName (const IR::Declaration_Instance *di)
 
static cstring getTypeName (const IR::Declaration_Instance *di)
 

Member Function Documentation

◆ emitHeaderInstances()

void P4::EBPF::EBPFProgram::emitHeaderInstances ( CodeBuilder * builder)
protectedvirtual

Reimplemented in P4::EBPF::EBPFPipeline.

◆ emitLocalVariables()

void P4::EBPF::EBPFProgram::emitLocalVariables ( CodeBuilder * builder)
protectedvirtual

◆ isLibraryMethod()

bool P4::EBPF::EBPFProgram::isLibraryMethod ( cstring methodName)
protectedvirtual

Checks whether a method name is considered to be part of the standard library, e.g., defined in core.p4 or ebpf_model.p4. TODO: Should we also distinguish overloaded methods?

Reimplemented in P4::UBPF::UBPFProgram.