P4C
The P4 Compiler
Loading...
Searching...
No Matches
P4::EBPF::EBPFEgressPipeline Class Referenceabstract

#include <ebpfPipeline.h>

Inheritance diagram for P4::EBPF::EBPFEgressPipeline:
[legend]

Public Member Functions

 EBPFEgressPipeline (cstring name, const EbpfOptions &options, P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
 
 DECLARE_TYPEINFO (EBPFEgressPipeline, EBPFPipeline)
 
void emit (CodeBuilder *builder) override
 
virtual void emitCheckPacketMarkMetadata (CodeBuilder *builder)=0
 
void emitCPUMAPLookup (CodeBuilder *builder) override
 
void emitPSAControlInputMetadata (CodeBuilder *builder) override
 
void emitPSAControlOutputMetadata (CodeBuilder *builder) override
 
- Public Member Functions inherited from P4::EBPF::EBPFPipeline
 EBPFPipeline (cstring name, const EbpfOptions &options, P4::ReferenceMap *refMap, P4::TypeMap *typeMap)
 
 DECLARE_TYPEINFO (EBPFPipeline, EBPFProgram)
 
virtual cstring dropReturnCode ()
 
void emitCPUMAPHeadersInitializers (CodeBuilder *builder)
 Generates a pointer to struct hdr_md. The pointer is used to access data from per-CPU map.
 
virtual void emitCPUMAPInitializers (CodeBuilder *builder)
 
virtual void emitGlobalMetadataInitializer (CodeBuilder *builder)
 
void emitHeaderInstances (CodeBuilder *builder) override
 
void emitHeadersFromCPUMAP (CodeBuilder *builder)
 
void emitInputPortMapping (CodeBuilder *builder)
 
void emitLocalHeaderInstancesAsPointers (CodeBuilder *builder)
 Generates a pointer to struct Headers_t and puts it on the BPF program's stack.
 
void emitLocalVariables (CodeBuilder *builder) override
 Generates a set of helper variables that are used during packet processing.
 
void emitMetadataFromCPUMAP (CodeBuilder *builder)
 
virtual void emitPacketLength (CodeBuilder *builder)
 
virtual void emitTimestamp (CodeBuilder *builder)
 
virtual void emitTrafficManager (CodeBuilder *builder)=0
 
void emitUserMetadataInstance (CodeBuilder *builder)
 
virtual cstring forwardReturnCode ()
 
bool hasAnyMeter () const
 
bool isEmpty () const
 
bool shouldEmitTimestamp () const
 
- Public Member Functions inherited from P4::EBPF::EBPFProgram
 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
 

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)
 
- Public Attributes inherited from P4::EBPF::EBPFPipeline
cstring compilerGlobalMetadata
 A name of an internal variable storing global metadata.
 
cstring contextVar
 Variable name storing pointer to eBPF packet descriptor (e.g., __sk_buff).
 
EBPFControlPSAcontrol
 
EBPFDeparserPSAdeparser
 
cstring ifindexVar
 Variable storing ingress interface index.
 
cstring inputPortVar
 A variable to store ifindex after mapping (e.g. due to recirculation).
 
cstring name
 A custom name of eBPF program.
 
cstring oneKey
 A variable name storing "1" value. Used to access BPF array map index.
 
unsigned packetMark
 A unique mark used to differentiate packets processed by P4/eBPF from others.
 
cstring packetPathVar
 Variables storing global metadata (packet_path & instance).
 
cstring pktInstanceVar
 
cstring priorityVar
 Variable storing skb->priority value (TC only).
 
cstring sectionName
 eBPF section name, which should a concatenation of classifier/ + a custom name.
 
cstring timestampVar
 Variable name storing current timestamp retrieved from bpf_ktime_get_ns().
 
- Public Attributes inherited from P4::EBPF::EBPFProgram
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 inherited from P4::EBPF::EBPFProgram
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
 

Detailed Description

EBPFEgressPipeline represents a hook-independent EBPF-based egress pipeline. It includes common definitions for TC and XDP.

Member Function Documentation

◆ emit()

void P4::EBPF::EBPFEgressPipeline::emit ( CodeBuilder * builder)
overridevirtual

◆ emitCPUMAPLookup()

void P4::EBPF::EBPFEgressPipeline::emitCPUMAPLookup ( CodeBuilder * builder)
overridevirtual

Reimplemented from P4::EBPF::EBPFPipeline.

◆ emitPSAControlInputMetadata()

void P4::EBPF::EBPFEgressPipeline::emitPSAControlInputMetadata ( CodeBuilder * builder)
overridevirtual

◆ emitPSAControlOutputMetadata()

void P4::EBPF::EBPFEgressPipeline::emitPSAControlOutputMetadata ( CodeBuilder * builder)
overridevirtual