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

Classes

struct  ActionProf
 
struct  Counter
 Common counter representation between PSA and other architectures. More...
 
struct  Digest
 Common digest representation between PSA and other architectures. More...
 
struct  Meter
 Common meter representation between PSA and other architectures. More...
 
struct  Register
 Common register representation between PSA and other architectures. More...
 

Public Member Functions

 BFRuntimeGenerator (const p4configv1::P4Info &p4info)
 
virtual const Util::JsonObjectgenSchema () const
 Generates the schema as a Json object for the provided P4Info instance.
 
void serializeBFRuntimeSchema (std::ostream *destination)
 

Protected Types

enum  TDDataFieldIds : P4Id {
  TD_DATA_START = (1 << 16) , TD_DATA_MATCH_PRIORITY , TD_DATA_ACTION , TD_DATA_ACTION_MEMBER_ID ,
  TD_DATA_SELECTOR_GROUP_ID , TD_DATA_ACTION_MEMBER_STATUS , TD_DATA_MAX_GROUP_SIZE , TD_DATA_ENTRY_TTL ,
  TD_DATA_ENTRY_HIT_STATE , TD_DATA_METER_SPEC_CIR_KBPS , TD_DATA_METER_SPEC_PIR_KBPS , TD_DATA_METER_SPEC_CBS_KBITS ,
  TD_DATA_METER_SPEC_PBS_KBITS , TD_DATA_METER_SPEC_CIR_PPS , TD_DATA_METER_SPEC_PIR_PPS , TD_DATA_METER_SPEC_CBS_PKTS ,
  TD_DATA_METER_SPEC_PBS_PKTS , TD_DATA_COUNTER_SPEC_BYTES , TD_DATA_COUNTER_SPEC_PKTS , TD_DATA_METER_INDEX ,
  TD_DATA_COUNTER_INDEX , TD_DATA_REGISTER_INDEX , TD_DATA_END
}
 

Protected Member Functions

virtual std::optional< bool > actProfHasSelector (P4Id actProfId) const
 
void addActionProfCommon (Util::JsonArray *tablesJson, const ActionProf &actionProf) const
 
virtual bool addActionProfIds (const p4configv1::Table &table, Util::JsonObject *tableJson) const
 
virtual void addActionProfs (Util::JsonArray *tablesJson) const
 
virtual void addConstTableAttr (Util::JsonArray *attrJson) const
 
void addCounterCommon (Util::JsonArray *tablesJson, const Counter &counter) const
 
void addCounters (Util::JsonArray *tablesJson) const
 
virtual void addDirectResources (const p4configv1::Table &table, Util::JsonArray *dataJson, Util::JsonArray *operationsJson, Util::JsonArray *attributesJson, P4Id maxActionParamId=0) const
 
void addLearnFilterCommon (Util::JsonArray *learnFiltersJson, const Digest &digest) const
 
void addLearnFilters (Util::JsonArray *learnFiltersJson) const
 
void addMatchTables (Util::JsonArray *tablesJson) const
 
virtual bool addMatchTypePriority (std::optional< cstring > &matchType) const
 
void addMeterCommon (Util::JsonArray *tablesJson, const Meter &meter) const
 
void addMeters (Util::JsonArray *tablesJson) const
 
void addRegisterCommon (Util::JsonArray *tablesJson, const Register &reg) const
 
void addRegisterDataFields (Util::JsonArray *dataJson, const Register &register_, P4Id idOffset=1) const
 
void addRegisters (Util::JsonArray *tablesJson) const
 
virtual std::optional< CountergetDirectCounter (P4Id counterId) const
 
virtual std::optional< MetergetDirectMeter (P4Id meterId) const
 
Util::JsonArraymakeActionSpecs (const p4configv1::Table &table, P4Id *maxActionParamId=nullptr) const
 
void transformTypeSpecToDataFields (Util::JsonArray *fieldsJson, const p4configv1::P4DataTypeSpec &typeSpec, cstring instanceType, cstring instanceName, const std::vector< cstring > *fieldNames=nullptr, cstring prefix=cstring::empty, cstring suffix=cstring::empty, P4Id idOffset=1) const
 

Static Protected Member Functions

static void addActionDataField (Util::JsonArray *dataJson, P4Id id, const std::string &name, bool mandatory, bool read_only, Util::JsonObject *type, Util::JsonArray *annotations=nullptr)
 
static void addCounterDataFields (Util::JsonArray *dataJson, const Counter &counter)
 
static void addKeyField (Util::JsonArray *dataJson, P4Id id, cstring name, bool mandatory, cstring matchType, Util::JsonObject *type, Util::JsonArray *annotations=nullptr)
 
static void addMeterDataFields (Util::JsonArray *dataJson, const Meter &meter)
 
static void addToDependsOn (Util::JsonObject *tableJson, P4Id id)
 
static Util::JsonObjectinitTableJson (const std::string &name, P4Id id, cstring tableType, int64_t size, Util::JsonArray *annotations=nullptr)
 
static Util::JsonObjectmakeCommonDataField (P4Id id, cstring name, Util::JsonObject *type, bool repeated, Util::JsonArray *annotations=nullptr)
 
static Util::JsonObjectmakeContainerDataField (P4Id id, cstring name, Util::JsonArray *items, bool repeated, Util::JsonArray *annotations=nullptr)
 

Protected Attributes

const p4configv1::P4Info & p4info
 

Member Function Documentation

◆ addRegisterDataFields()

void P4::BFRT::BFRuntimeGenerator::addRegisterDataFields ( Util::JsonArray * dataJson,
const Register & register_,
P4Id idOffset = 1 ) const
protected

Add register data fields to the JSON data array for a BFRT table. Field ids are assigned incrementally starting at @idOffset, which is 1 by default.

◆ genSchema()

const Util::JsonObject * P4::BFRT::BFRuntimeGenerator::genSchema ( ) const
virtual

Generates the schema as a Json object for the provided P4Info instance.

Reimplemented in P4::BFRT::BFRuntimeSchemaGenerator.

◆ makeActionSpecs()

Util::JsonArray * P4::BFRT::BFRuntimeGenerator::makeActionSpecs ( const p4configv1::Table & table,
P4Id * maxActionParamId = nullptr ) const
protected

Generates the JSON array for table action specs. When the function returns normally and @maxActionParamId is not NULL, @maxActionParamId is set to the maximum assigned id for an action parameter across all actions. This is useful if other table data fields (e.g. direct register fields) need to receive a distinct id in the same space.

◆ serializeBFRuntimeSchema()

void P4::BFRT::BFRuntimeGenerator::serializeBFRuntimeSchema ( std::ostream * destination)

Generates BF-RT JSON schema from P4Info protobuf message and writes it to the @destination stream.

◆ transformTypeSpecToDataFields()

void P4::BFRT::BFRuntimeGenerator::transformTypeSpecToDataFields ( Util::JsonArray * fieldsJson,
const p4configv1::P4DataTypeSpec & typeSpec,
cstring instanceType,
cstring instanceName,
const std::vector< cstring > * fieldNames = nullptr,
cstring prefix = cstring::empty,
cstring suffix = cstring::empty,
P4Id idOffset = 1 ) const
protected

Transforms a P4Info @typeSpec to a list of JSON objects matching the BF-RT format. @instanceType and @instanceName are used for logging error messages. This method currenty only supports fixed-width bitstrings as well as non-nested structs and tuples. All field names are prefixed with @prefix and suffixed with @suffix. Field ids are assigned incrementally starting at @idOffset. Field names are taken from the P4 program when possible; for tuples they are autogenerated (f1, f2, ...) unless supplied through @fieldNames.