73 const int prefixLenFieldWidth = 32;
78 bool isLPMTable()
const;
79 bool isTernaryTable()
const;
84 virtual void validateKeys()
const;
91 const IR::Key *keyGenerator;
92 const IR::ActionList *actionList;
93 const IR::TableBlock *table;
95 std::map<const IR::KeyElement *, cstring> keyFieldNames;
96 std::map<const IR::KeyElement *, EBPFType *> keyTypes;
100 const cstring prefixFieldName =
"prefixlen";
105 cstring p4ActionToActionIDName(
const IR::P4Action *action)
const;
106 void emitActionArguments(
CodeBuilder *builder,
const IR::P4Action *action,
cstring name);
113 virtual void emitValueActionIDNames(
CodeBuilder *builder);
114 virtual void emitValueStructStructure(
CodeBuilder *builder);
116 virtual void emitDirectValueTypes(
CodeBuilder *builder) { (void)builder; }
118 virtual void emitInitializer(
CodeBuilder *builder);
122 (void)actionRunVariable;
123 builder->target->emitTableLookup(builder, defaultActionMapName, key, value);
124 builder->endOfStatement(
true);
126 virtual bool isMatchTypeSupported(
const IR::Declaration_ID *matchType) {
127 return matchType->name.name == P4::P4CoreLibrary::instance().exactMatch.name ||
128 matchType->name.name == P4::P4CoreLibrary::instance().ternaryMatch.name ||
129 matchType->name.name == P4::P4CoreLibrary::instance().lpmMatch.name;
133 virtual bool dropOnNoMatchingEntryFound()
const {
return true; }
135 virtual bool cacheEnabled() {
return false; }