17#ifndef BACKENDS_DPDK_DPDKCONTEXT_H_ 
   18#define BACKENDS_DPDK_DPDKCONTEXT_H_ 
   23#include "control-plane/bfruntime.h" 
   24#include "dpdkProgramStructure.h" 
   25#include "lib/cstring.h" 
   27#include "lib/nullstream.h" 
   29#include "p4/config/v1/p4info.pb.h" 
   31namespace p4configv1 = ::p4::config::v1;
 
   54    bool idle_timeout_with_auto_delete;
 
   59    unsigned default_action_handle;
 
   61    std::vector<std::pair<cstring, cstring>> tableKeys;
 
 
   67    bool constant_default_action;
 
   68    bool is_compiler_added_action;
 
   69    bool allowed_as_hit_action;
 
   70    bool allowed_as_default_action;
 
   71    unsigned actionHandle;
 
 
   90        buildDate = options.getBuildDate();
 
   91        compileCommand = options.getCompileCommand();
 
   92        progName = options.
file.stem();
 
 
   99    unsigned max_n_groups;
 
  100    unsigned max_n_members_per_group;
 
  101    unsigned bound_to_action_data_table_handle;
 
  102    void setAttributes(
const IR::P4Table *tbl,
 
  103                       const std::map<const cstring, struct TableAttributes> &tableAttrmap) {
 
  105        max_n_members_per_group = 0;
 
  106        auto n_groups = tbl->properties->getProperty(
"n_groups_max");
 
  108            auto n_groups_expr = n_groups->value->to<IR::ExpressionValue>()->expression;
 
  109            max_n_groups = n_groups_expr->to<IR::Constant>()->asInt();
 
  111        auto n_members = tbl->properties->getProperty(
"n_members_per_group_max");
 
  113            auto n_members_expr = n_members->value->to<IR::ExpressionValue>()->expression;
 
  114            max_n_members_per_group = n_members_expr->to<IR::Constant>()->asInt();
 
  117        cstring actionDataTableName = tbl->name.originalName.replace(
"_sel", 
"");
 
  118        auto actionTableAttr = ::get(tableAttrmap, actionDataTableName);
 
  119        bound_to_action_data_table_handle = actionTableAttr.tableHandle;
 
 
  127    const p4configv1::P4Info &p4info;
 
  131    std::vector<const IR::Declaration_Instance *> externs;
 
  134    std::map<const cstring, struct TableAttributes> tableAttrmap;
 
  135    std::map<cstring, struct actionAttributes> actionAttrMap;
 
  136    std::map<cstring, struct externAttributes> externAttrMap;
 
  139    std::map<cstring, size_t> context_handle_map;
 
  143                         const p4configv1::P4Info &p4info, 
DpdkOptions &options)
 
  144        : refmap(refmap), structure(structure), p4info(p4info), options(options) {}
 
  146    void serializeContextJson(std::ostream *destination);
 
  149    size_t getHandleId(
cstring name);
 
  150    void collectHandleId();
 
  154                     const IR::KeyElement *key, 
int position);
 
  161                        int byte_array_index);
 
  164    void setDefaultActionHandle(
const IR::P4Table *table);
 
 
This pass generates context JSON into user specified file.
Definition dpdkContext.h:124
 
Util::JsonObject * initTableCommonJson(const cstring name, const struct TableAttributes &attr)
This function sets the common table properties.
Definition dpdkContext.cpp:191
 
bool addRefTables(const cstring tbl_name, const IR::P4Table **memberTable, Util::JsonObject *tableJson)
This function adds the tables referred by this table.
Definition dpdkContext.cpp:433
 
void setActionAttributes(const IR::P4Table *table)
This function sets action attributes for actions in a table.
Definition dpdkContext.cpp:236
 
void addExternInfo(Util::JsonArray *externsJson)
Add extern information to the context json.
Definition dpdkContext.cpp:533
 
void addMatchTables(Util::JsonArray *tablesJson)
Add tables to the context json.
Definition dpdkContext.cpp:478
 
void addImmediateField(Util::JsonArray *paramJson, const cstring name, int dest_start, int dest_Width)
This functions creates JSON object for immediate fields (action parameters).
Definition dpdkContext.cpp:320
 
Util::JsonObject * addMatchAttributes(const IR::P4Table *table, const cstring ctrlName)
This functions creates JSON object for match attributes of a table.
Definition dpdkContext.cpp:330
 
void addActionParam(Util::JsonArray *paramJson, const cstring name, int bitWidth, int position, int byte_array_index)
This function adds a single parameter to the parameters array.
Definition dpdkContext.cpp:371
 
void addKeyField(Util::JsonArray *keyJson, const cstring name, const cstring annon, const IR::KeyElement *key, int position)
This functions insert a single key field in the match keys array.
Definition dpdkContext.cpp:165
 
Util::JsonArray * addActions(const IR::P4Table *table, const cstring ctrlName, bool isMatch)
This function creates JSON objects for actions within a table.
Definition dpdkContext.cpp:383
 
void CollectTablesAndSetAttributes()
Definition dpdkContext.cpp:35
 
Definition backends/dpdk/options.h:24
 
Class used to encode maps from paths to declarations.
Definition referenceMap.h:66
 
std::filesystem::path file
file to compile (- for stdin)
Definition parser_options.h:69
 
cstring compilerVersion
Compiler version.
Definition parser_options.h:73
 
Definition dpdk/backend.cpp:36
 
cstring tableType
Definition dpdkContext.h:52
 
cstring direction
Direction of the table, can be ["ingress","egress"].
Definition dpdkContext.h:46
 
unsigned tableHandle
Unique ID for the table.
Definition dpdkContext.h:48
 
Definition dpdkContext.h:44
 
Definition dpdkContext.h:66
 
Definition dpdkContext.h:76
 
Selection table attributes.
Definition dpdkContext.h:98
 
Program level information for context json.
Definition dpdkContext.h:84
 
Collect information related to P4 programs targeting dpdk.
Definition dpdkProgramStructure.h:14