diff --git a/backends/tc/backend.cpp b/backends/tc/backend.cpp index 159fc8098e2..df0d4f672d0 100644 --- a/backends/tc/backend.cpp +++ b/backends/tc/backend.cpp @@ -514,6 +514,109 @@ void ConvertToBackendIR::updateDefaultHitAction(const IR::P4Table *t, IR::TCTabl } } +void ConvertToBackendIR::updateAddOnMissTable(const IR::P4Table *t) { + auto tblname = t->name.originalName; + for (auto table : tcPipeline->tableDefs) { + if (table->tableName == tblname) { + add_on_miss_tables.push_back(t); + auto tableDefinition = ((IR::TCTable *)table); + tableDefinition->setTableAddOnMiss(); + tableDefinition->setTablePermisson(HandleTableAccessPermisson(t)); + } + } +} + +unsigned ConvertToBackendIR::GetAccessNumericValue(cstring access) { + unsigned value = 0; + for (auto s : access) { + unsigned mask = 0; + switch (s) { + case 'C': + mask = 1 << 6; + break; + case 'R': + mask = 1 << 5; + break; + case 'U': + mask = 1 << 4; + break; + case 'D': + mask = 1 << 3; + break; + case 'X': + mask = 1 << 2; + break; + case 'P': + mask = 1 << 1; + break; + case 'S': + mask = 1; + break; + default: + ::error(ErrorType::ERR_INVALID, + "tc_acl annotation cannot have '%1%' in access permisson", s); + } + value |= mask; + } + return value; +} + +cstring ConvertToBackendIR::HandleTableAccessPermisson(const IR::P4Table *t) { + bool unused_ps[14], IsTableAddOnMiss = false; + cstring control_path, data_path; + memset(unused_ps, true, 14); + for (auto table : add_on_miss_tables) { + if (table->name.originalName == t->name.originalName) { + IsTableAddOnMiss = true; + } + } + auto find = tablePermissons.find(t->name.originalName); + if (find != tablePermissons.end()) { + auto paths = tablePermissons[t->name.originalName]; + control_path = paths.first; + data_path = paths.second; + } + // Default access value of Control_path and Data_Path + if (control_path.isNullOrEmpty()) { + control_path = IsTableAddOnMiss ? DEFAULT_ADD_ON_MISS_TABLE_CONTROL_PATH_ACCESS + : DEFAULT_TABLE_CONTROL_PATH_ACCESS; + } + if (data_path.isNullOrEmpty()) { + data_path = IsTableAddOnMiss ? DEFAULT_ADD_ON_MISS_TABLE_DATA_PATH_ACCESS + : DEFAULT_TABLE_DATA_PATH_ACCESS; + } + + if (IsTableAddOnMiss) { + auto access = data_path.find('C'); + if (access == nullptr) { + ::warning( + ErrorType::WARN_INVALID, + "Add on miss table '%1%' should have 'create' access permissons for data path.", + t->name.originalName); + } + } + auto access_cp = GetAccessNumericValue(control_path); + auto access_dp = GetAccessNumericValue(data_path); + auto access_permisson = (access_cp << 7) | access_dp; + std::stringstream value; + value << "0x" << std::hex << access_permisson; + return value.str().c_str(); +} + +std::pair ConvertToBackendIR::GetAnnotatedAccessPath(const IR::Annotation *anno) { + cstring control_path, data_path; + if (anno) { + auto expr = anno->expr[0]; + if (auto typeLiteral = expr->to()) { + auto permisson_str = typeLiteral->value; + auto char_pos = permisson_str.find(":"); + control_path = permisson_str.before(char_pos); + data_path = permisson_str.substr(char_pos - permisson_str.begin() + 1); + } + } + return std::make_pair(std::move(control_path), std::move(data_path)); +} + void ConvertToBackendIR::postorder(const IR::P4Table *t) { if (t != nullptr) { tableCount++; @@ -551,17 +654,21 @@ void ConvertToBackendIR::postorder(const IR::P4Table *t) { tableKeysizeList.emplace(tId, keySize); auto annoList = t->getAnnotations()->annotations; for (auto anno : annoList) { - if (anno->name != ParseTCAnnotations::numMask) continue; - auto expr = anno->expr[0]; - if (auto val = expr->to()) { - tableDefinition->setNumMask(val->asUint64()); - } else { - ::error(ErrorType::ERR_INVALID, - "nummask annotation cannot have '%1%' as value. Only integer " - "constants are allowed", - expr); + if (anno->name == ParseTCAnnotations::tc_acl) { + tablePermissons.emplace(t->name.originalName, GetAnnotatedAccessPath(anno)); + } else if (anno->name == ParseTCAnnotations::numMask) { + auto expr = anno->expr[0]; + if (auto val = expr->to()) { + tableDefinition->setNumMask(val->asUint64()); + } else { + ::error(ErrorType::ERR_INVALID, + "nummask annotation cannot have '%1%' as value. Only integer " + "constants are allowed", + expr); + } } } + tableDefinition->setTablePermisson(HandleTableAccessPermisson(t)); auto actionlist = t->getActionList(); for (auto action : actionlist->actionList) { for (auto actionDef : tcPipeline->actionDefs) { diff --git a/backends/tc/backend.h b/backends/tc/backend.h index d1952c97e3a..e4a4703b8c1 100644 --- a/backends/tc/backend.h +++ b/backends/tc/backend.h @@ -62,6 +62,8 @@ class ConvertToBackendIR : public Inspector { ordered_map tableIDList; ordered_map actionIDList; ordered_map tableKeysizeList; + safe_vector add_on_miss_tables; + ordered_map> tablePermissons; public: ConvertToBackendIR(const IR::ToplevelBlock *tlb, IR::TCPipeline *pipe, P4::ReferenceMap *refMap, @@ -89,13 +91,10 @@ class ConvertToBackendIR : public Inspector { unsigned getActionId(cstring actionName) const; unsigned getTableKeysize(unsigned tableId) const; cstring externalName(const IR::IDeclaration *declaration) const; - void updateAddOnMissTable(cstring tblname) const { - for (auto table : tcPipeline->tableDefs) { - if (table->tableName == tblname) { - ((IR::TCTable *)table)->setTableAddOnMiss(); - } - } - } + cstring HandleTableAccessPermisson(const IR::P4Table *t); + std::pair GetAnnotatedAccessPath(const IR::Annotation *anno); + unsigned GetAccessNumericValue(cstring access); + void updateAddOnMissTable(const IR::P4Table *t); }; class Extern { diff --git a/backends/tc/ebpfCodeGen.cpp b/backends/tc/ebpfCodeGen.cpp index e2934596b9b..c5799fc3abe 100644 --- a/backends/tc/ebpfCodeGen.cpp +++ b/backends/tc/ebpfCodeGen.cpp @@ -1525,7 +1525,6 @@ void ControlBodyTranslatorPNA::ValidateAddOnMissMissAction(const IR::P4Action *a act); } const IR::P4Table *t = table->table->container; - cstring tblname = t->name.originalName; const IR::Expression *defaultAction = t->getDefaultAction(); CHECK_NULL(defaultAction); auto defaultActionName = table->getActionNameExpression(defaultAction); @@ -1539,7 +1538,7 @@ void ControlBodyTranslatorPNA::ValidateAddOnMissMissAction(const IR::P4Action *a "add_entry extern can only be used in an action" " of a table with property add_on_miss equals to true."); } - tcIR->updateAddOnMissTable(tblname); + ((ConvertToBackendIR *)tcIR)->updateAddOnMissTable(t); } void ControlBodyTranslatorPNA::processFunction(const P4::ExternFunction *function) { diff --git a/backends/tc/tc.def b/backends/tc/tc.def index 9cd5cc37f85..99fa45a16b4 100644 --- a/backends/tc/tc.def +++ b/backends/tc/tc.def @@ -228,6 +228,7 @@ class TCTable { cstring tableName; cstring controlName; cstring pipelineName; + cstring permissions; unsigned keySize; unsigned tableEntriesCount; unsigned numMask; @@ -244,6 +245,9 @@ class TCTable { ordered_map actionList; safe_vector const_entries; + void setTablePermisson(cstring p) { + permissions = p; + } void setKeySize(unsigned k) { keySize = k; } @@ -326,12 +330,10 @@ class TCTable { tcTable += "\n\ttype " + printMatchType(matchType) + " \\"; tcTable += "\n\tkeysz " + Util::toString(keySize); tcTable += " nummasks " + Util::toString(numMask); + tcTable += " permissions " + Util::toString(permissions); tcTable += " tentries " + Util::toString(tableEntriesCount); - if (isTableAddOnMiss) { - tcTable += " permissions 0x3DE6"; - if(timerProfiles > defaultTimerProfiles) { - tcTable += " num_timer_profiles " + Util::toString(timerProfiles); - } + if (isTableAddOnMiss && timerProfiles > defaultTimerProfiles) { + tcTable += " num_timer_profiles " + Util::toString(timerProfiles); } if (!actionList.empty()) { diff --git a/backends/tc/tcAnnotations.cpp b/backends/tc/tcAnnotations.cpp index 8587e22c70e..4a81b998f1e 100644 --- a/backends/tc/tcAnnotations.cpp +++ b/backends/tc/tcAnnotations.cpp @@ -23,5 +23,6 @@ const cstring ParseTCAnnotations::defaultHitConst = "default_hit_const"; const cstring ParseTCAnnotations::tcType = "tc_type"; const cstring ParseTCAnnotations::numMask = "nummask"; const cstring ParseTCAnnotations::tcMayOverride = "tc_may_override"; +const cstring ParseTCAnnotations::tc_acl = "tc_acl"; } // namespace TC diff --git a/backends/tc/tcAnnotations.h b/backends/tc/tcAnnotations.h index 8665ffbc500..2fe6193f96e 100644 --- a/backends/tc/tcAnnotations.h +++ b/backends/tc/tcAnnotations.h @@ -30,12 +30,13 @@ class ParseTCAnnotations : public P4::ParseAnnotations { static const cstring tcType; static const cstring numMask; static const cstring tcMayOverride; + static const cstring tc_acl; ParseTCAnnotations() : P4::ParseAnnotations( "TC", true, {PARSE_EMPTY(defaultHit), PARSE_EMPTY(defaultHitConst), PARSE_CONSTANT_OR_STRING_LITERAL(tcType), PARSE_CONSTANT_OR_STRING_LITERAL(numMask), - PARSE_EMPTY(tcMayOverride)}) {} + PARSE_EMPTY(tcMayOverride), PARSE_CONSTANT_OR_STRING_LITERAL(tc_acl)}) {} }; } // namespace TC diff --git a/backends/tc/tc_defines.h b/backends/tc/tc_defines.h index c84533bfd83..3cbe4d09fdb 100644 --- a/backends/tc/tc_defines.h +++ b/backends/tc/tc_defines.h @@ -27,6 +27,12 @@ inline constexpr auto DEFAULT_METADATA_ID = 1; inline constexpr auto BITWIDTH = 32; inline constexpr auto DEFAULT_TIMER_PROFILES = 4; +// Default Access Permissons +inline constexpr auto DEFAULT_TABLE_CONTROL_PATH_ACCESS = "CDPS"; +inline constexpr auto DEFAULT_TABLE_DATA_PATH_ACCESS = "RX"; +inline constexpr auto DEFAULT_ADD_ON_MISS_TABLE_CONTROL_PATH_ACCESS = "CRUDPS"; +inline constexpr auto DEFAULT_ADD_ON_MISS_TABLE_DATA_PATH_ACCESS = "CRXP"; + // Supported data types. inline constexpr auto BIT_TYPE = 0; inline constexpr auto DEV_TYPE = 1; diff --git a/testdata/p4tc_samples/add_entry_1_example.p4 b/testdata/p4tc_samples/add_entry_1_example.p4 index 0d359f5982d..f1a60008850 100644 --- a/testdata/p4tc_samples/add_entry_1_example.p4 +++ b/testdata/p4tc_samples/add_entry_1_example.p4 @@ -90,7 +90,7 @@ control MainControlImpl( drop_packet(); } - table ipv4_tbl_1 { + @tc_acl("CRUS:CRXP") table ipv4_tbl_1 { key = { hdr.ipv4.dstAddr : exact @tc_type ("ipv4"); istd.input_port : exact; diff --git a/testdata/p4tc_samples/add_entry_3_example.p4 b/testdata/p4tc_samples/add_entry_3_example.p4 new file mode 100644 index 00000000000..618652d03a8 --- /dev/null +++ b/testdata/p4tc_samples/add_entry_3_example.p4 @@ -0,0 +1,131 @@ +#include +#include + +typedef bit<48> EthernetAddress; + +header ethernet_t { + EthernetAddress dstAddr; + @tc_type("macaddr") EthernetAddress srcAddr; + bit<16> etherType; +} + +header ipv4_t { + bit<4> version; + bit<4> ihl; + bit<8> diffserv; + bit<16> totalLen; + bit<16> identification; + bit<3> flags; + bit<13> fragOffset; + bit<8> ttl; + bit<8> protocol; + bit<16> hdrChecksum; + @tc_type ("ipv4") bit<32> srcAddr; + @tc_type ("ipv4") bit<32> dstAddr; +} + +////////////////////////////////////////////////////////////////////// +// Struct types for holding user-defined collections of headers and +// metadata in the P4 developer's program. +// +// Note: The names of these struct types are completely up to the P4 +// developer, as are their member fields, with the only restriction +// being that the structs intended to contain headers should only +// contain members whose types are header, header stack, or +// header_union. +////////////////////////////////////////////////////////////////////// + +struct main_metadata_t { + // empty for this skeleton +} + +// User-defined struct containing all of those headers parsed in the +// main parser. +struct headers_t { + ethernet_t ethernet; + ipv4_t ipv4; +} + +const ExpireTimeProfileId_t EXPIRE_TIME_PROFILE_NOW = (ExpireTimeProfileId_t) 2; + +parser MainParserImpl( + packet_in pkt, + out headers_t hdr, + inout main_metadata_t main_meta, + in pna_main_parser_input_metadata_t istd) +{ + state start { + pkt.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 0x0800 : parse_ipv4; + default : accept; + } + } + state parse_ipv4 { + pkt.extract(hdr.ipv4); + transition accept; + } +} + +control MainControlImpl( + inout headers_t hdr, // from main parser + inout main_metadata_t user_meta, // from main parser, to "next block" + in pna_main_input_metadata_t istd, + inout pna_main_output_metadata_t ostd) +{ + action send_nh( @tc_type("macaddr") bit<48> dmac, bit<48> smac) { + hdr.ethernet.srcAddr = smac; + hdr.ethernet.dstAddr = dmac; + } + action next_hop() { + add_entry(action_name = "send_nh", // name of action + action_params = {hdr.ethernet.dstAddr, hdr.ethernet.srcAddr}, expire_time_profile_id = EXPIRE_TIME_PROFILE_NOW); + + } + + action dflt_route_drop() { + drop_packet(); + } + action drop() { + drop_packet(); + } + + @tc_acl("CRUS:RXP") table ipv4_tbl_1 { + key = { + hdr.ipv4.dstAddr : exact @tc_type ("ipv4"); + istd.input_port : exact; + } + actions = { + next_hop; + send_nh; + dflt_route_drop; + } + default_action = next_hop; + } + + apply { + if (hdr.ipv4.isValid()) { + ipv4_tbl_1.apply(); + } + } +} + +control MainDeparserImpl( + packet_out pkt, + inout headers_t hdr, // from main control + in main_metadata_t user_meta, // from main control + in pna_main_output_metadata_t ostd) +{ + apply { + pkt.emit(hdr.ethernet); + pkt.emit(hdr.ipv4); + } +} + +// BEGIN:Package_Instantiation_Example +PNA_NIC( + MainParserImpl(), + MainControlImpl(), + MainDeparserImpl() + ) main; +// END:Package_Instantiation_Example diff --git a/testdata/p4tc_samples/simple_exact_example.p4 b/testdata/p4tc_samples/simple_exact_example.p4 index 9e8a23a6ee5..f5b00289832 100644 --- a/testdata/p4tc_samples/simple_exact_example.p4 +++ b/testdata/p4tc_samples/simple_exact_example.p4 @@ -86,7 +86,7 @@ control ingress( drop_packet(); } - table nh_table { + @tc_acl("RUS:RXP") table nh_table { key = { hdr.ipv4.srcAddr : exact @tc_type ("ipv4"); } diff --git a/testdata/p4tc_samples_outputs/add_entry_1_example.template b/testdata/p4tc_samples_outputs/add_entry_1_example.template index 757234224b6..140a5e1ba07 100755 --- a/testdata/p4tc_samples_outputs/add_entry_1_example.template +++ b/testdata/p4tc_samples_outputs/add_entry_1_example.template @@ -19,7 +19,7 @@ $TC p4template update action/add_entry_1_example/MainControlImpl/dflt_route_drop $TC p4template create table/add_entry_1_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 permissions 0x3DE6 \ + keysz 64 nummasks 8 permissions 0x38e6 tentries 2048 \ table_acts act name add_entry_1_example/MainControlImpl/next_hop \ act name add_entry_1_example/MainControlImpl/send_nh \ act name add_entry_1_example/MainControlImpl/dflt_route_drop diff --git a/testdata/p4tc_samples_outputs/add_entry_3_errors.json b/testdata/p4tc_samples_outputs/add_entry_3_errors.json new file mode 100644 index 00000000000..9d48688729b --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_errors.json @@ -0,0 +1,71 @@ +{ + "schema_version" : "1.0.0", + "pipeline_name" : "add_entry_3_errors", + "tables" : [ + { + "name" : "MainControlImpl/ipv4_tbl_1", + "id" : 1, + "tentries" : 2048, + "nummask" : 8, + "keysize" : 64, + "keyfields" : [ + { + "id" : 1, + "name" : "hdr.ipv4.dstAddr", + "type" : "ipv4", + "match_type" : "exact", + "bitwidth" : 32 + }, + { + "id" : 2, + "name" : "istd.input_port", + "type" : "bit32", + "match_type" : "exact", + "bitwidth" : 32 + } + ], + "actions" : [ + { + "id" : 2, + "name" : "MainControlImpl/next_hop", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [], + "default_hit_action" : false, + "default_miss_action" : true + }, + { + "id" : 1, + "name" : "MainControlImpl/send_nh", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [ + { + "id" : 1, + "name" : "dmac", + "type" : "macaddr", + "bitwidth" : 48 + }, + { + "id" : 2, + "name" : "smac", + "type" : "bit48", + "bitwidth" : 48 + } + ], + "default_hit_action" : false, + "default_miss_action" : false + }, + { + "id" : 3, + "name" : "MainControlImpl/dflt_route_drop", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [], + "default_hit_action" : false, + "default_miss_action" : false + } + ] + } + ] +} \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/add_entry_3_errors.p4-stderr b/testdata/p4tc_samples_outputs/add_entry_3_errors.p4-stderr new file mode 100644 index 00000000000..cee80c87d28 --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_errors.p4-stderr @@ -0,0 +1,76 @@ +terminate called after throwing an instance of 'backtrace_exception' + what(): vector::_M_range_check: __n (which is 0) >= this->size() (which is 0) + ./p4c-pna-p4tc(_ZSt24__throw_out_of_range_fmtPKcz+0x113) [0xcf8d93] + std::__throw_out_of_range_fmt(char const*, ...) at ??:? + ./p4c-pna-p4tc() [0x4d7c7f] + TC::ConvertToBackendIR::HandleTableAccessPermisson(IR::Annotation const*, IR::P4Table const*) at ??:? + ./p4c-pna-p4tc() [0x4d7e4f] + TC::ConvertToBackendIR::updateAddOnMissTable(IR::P4Table const*) at ??:? + ./p4c-pna-p4tc() [0x50a880] + TC::ControlBodyTranslatorPNA::processFunction(P4::ExternFunction const*) at ??:? + ./p4c-pna-p4tc() [0x57bff9] + EBPF::ControlBodyTranslator::preorder(IR::MethodCallExpression const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xcd9f95] + Visitor::visit(IR::MethodCallExpression const* const&, char const*) at ??:? + ./p4c-pna-p4tc() [0x5982a9] + EBPF::CodeGenInspector::preorder(IR::MethodCallStatement const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xce5de0] + Visitor::visit(IR::StatOrDecl const*&, char const*) at ??:? + ./p4c-pna-p4tc() [0x59a12c] + EBPF::CodeGenInspector::preorder(IR::BlockStatement const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xcdb7c5] + Visitor::visit(IR::BlockStatement const* const&, char const*) at ??:? + ./p4c-pna-p4tc() [0x56ac27] + virtual thunk to EBPF::ActionTranslationVisitor::preorder(IR::P4Action const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xc6861f] + IR::Node::apply(Visitor&, Visitor_Context const*) const at ??:? + ./p4c-pna-p4tc() [0x509da9] + TC::EBPFTablePNA::emitAction(EBPF::CodeBuilder*, cstring, cstring) at ??:? + ./p4c-pna-p4tc() [0x5070fe] + TC::ControlBodyTranslatorPNA::processApply(P4::ApplyMethod const*) at ??:? + ./p4c-pna-p4tc() [0x57bd79] + EBPF::ControlBodyTranslator::preorder(IR::MethodCallExpression const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xcd9f95] + Visitor::visit(IR::MethodCallExpression const* const&, char const*) at ??:? + ./p4c-pna-p4tc() [0x5982a9] + EBPF::CodeGenInspector::preorder(IR::MethodCallStatement const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xcdb465] + Visitor::visit(IR::Statement const* const&, char const*) at ??:? + ./p4c-pna-p4tc() [0x57b1db] + EBPF::ControlBodyTranslator::preorder(IR::IfStatement const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xce5de0] + Visitor::visit(IR::StatOrDecl const*&, char const*) at ??:? + ./p4c-pna-p4tc() [0x59a12c] + EBPF::CodeGenInspector::preorder(IR::BlockStatement const*) at ??:? + ./p4c-pna-p4tc() [0xce393c] + Inspector::apply_visitor(IR::Node const*, char const*) at ??:? + ./p4c-pna-p4tc() [0xc6861f] + IR::Node::apply(Visitor&, Visitor_Context const*) const at ??:? + ./p4c-pna-p4tc() [0x57a9e6] + EBPF::EBPFControl::emit(EBPF::CodeBuilder*) at ??:? + ./p4c-pna-p4tc() [0x507d0d] + TC::TCIngressPipelinePNA::emit(EBPF::CodeBuilder*) at ??:? + ./p4c-pna-p4tc() [0x500b9f] + TC::PNAArchTC::emit(EBPF::CodeBuilder*) const at ??:? + ./p4c-pna-p4tc() [0x4dc01f] + TC::Backend::serialize() const at ??:? + ./p4c-pna-p4tc() [0x4c8428] + main at ??:? + /lib64/libc.so.6(+0x3feb0) [0x7ff9b771deb0] + /lib64/libc.so.6(__libc_start_main+0x80) [0x7ff9b771df60] + ./p4c-pna-p4tc() [0x4d3285] + _start at ??:? diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example.json b/testdata/p4tc_samples_outputs/add_entry_3_example.json new file mode 100644 index 00000000000..01d60bf4542 --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example.json @@ -0,0 +1,71 @@ +{ + "schema_version" : "1.0.0", + "pipeline_name" : "add_entry_3_example", + "tables" : [ + { + "name" : "MainControlImpl/ipv4_tbl_1", + "id" : 1, + "tentries" : 2048, + "nummask" : 8, + "keysize" : 64, + "keyfields" : [ + { + "id" : 1, + "name" : "hdr.ipv4.dstAddr", + "type" : "ipv4", + "match_type" : "exact", + "bitwidth" : 32 + }, + { + "id" : 2, + "name" : "istd.input_port", + "type" : "bit32", + "match_type" : "exact", + "bitwidth" : 32 + } + ], + "actions" : [ + { + "id" : 2, + "name" : "MainControlImpl/next_hop", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [], + "default_hit_action" : false, + "default_miss_action" : true + }, + { + "id" : 1, + "name" : "MainControlImpl/send_nh", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [ + { + "id" : 1, + "name" : "dmac", + "type" : "macaddr", + "bitwidth" : 48 + }, + { + "id" : 2, + "name" : "smac", + "type" : "bit48", + "bitwidth" : 48 + } + ], + "default_hit_action" : false, + "default_miss_action" : false + }, + { + "id" : 3, + "name" : "MainControlImpl/dflt_route_drop", + "action_scope" : "TableAndDefault", + "annotations" : [], + "params" : [], + "default_hit_action" : false, + "default_miss_action" : false + } + ] + } + ] +} \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example.p4-stderr b/testdata/p4tc_samples_outputs/add_entry_3_example.p4-stderr new file mode 100644 index 00000000000..41a51163b5d --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example.p4-stderr @@ -0,0 +1,2 @@ +[--Wwarn=missing] warning: add_entry extern can only be used in an action of a table with property add_on_miss equals to true. +[--Wwarn=invalid] warning: Add on miss table 'ipv4_tbl_1' should have 'create' access permissons for data path. diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example.template b/testdata/p4tc_samples_outputs/add_entry_3_example.template new file mode 100755 index 00000000000..482e9e6f1cd --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example.template @@ -0,0 +1,27 @@ +#!/bin/bash -x + +set -e + +TC="tc" +$TC p4template create pipeline/add_entry_3_example numtables 1 + +$TC p4template create action/add_entry_3_example/MainControlImpl/send_nh actid 1 \ + param dmac type macaddr \ + param smac type bit48 +$TC p4template update action/add_entry_3_example/MainControlImpl/send_nh state active + +$TC p4template create action/add_entry_3_example/MainControlImpl/next_hop actid 2 +$TC p4template update action/add_entry_3_example/MainControlImpl/next_hop state active + +$TC p4template create action/add_entry_3_example/MainControlImpl/dflt_route_drop actid 3 +$TC p4template update action/add_entry_3_example/MainControlImpl/dflt_route_drop state active + +$TC p4template create table/add_entry_3_example/MainControlImpl/ipv4_tbl_1 \ + tblid 1 \ + type exact \ + keysz 64 nummasks 8 permissions 0x38a6 tentries 2048 \ + table_acts act name add_entry_3_example/MainControlImpl/next_hop \ + act name add_entry_3_example/MainControlImpl/send_nh \ + act name add_entry_3_example/MainControlImpl/dflt_route_drop +$TC p4template update table/add_entry_3_example/MainControlImpl/ipv4_tbl_1 default_miss_action action add_entry_3_example/MainControlImpl/next_hop +$TC p4template update pipeline/add_entry_3_example state ready \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example_control_blocks.c b/testdata/p4tc_samples_outputs/add_entry_3_example_control_blocks.c new file mode 100644 index 00000000000..851983abcb1 --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example_control_blocks.c @@ -0,0 +1,319 @@ +#include "add_entry_3_example_parser.h" +struct p4tc_filter_fields p4tc_filter_fields; + +struct internal_metadata { + __u16 pkt_ether_type; +} __attribute__((aligned(4))); + +struct __attribute__((__packed__)) MainControlImpl_ipv4_tbl_1_key { + u32 keysz; + u32 maskid; + u32 field0; /* hdr.ipv4.dstAddr */ + u32 field1; /* istd.input_port */ +} __attribute__((aligned(8))); +#define MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_NEXT_HOP 2 +#define MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_SEND_NH 1 +#define MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_DFLT_ROUTE_DROP 3 +#define MAINCONTROLIMPL_IPV4_TBL_1_ACT_NOACTION 0 +struct __attribute__((__packed__)) MainControlImpl_ipv4_tbl_1_value { + unsigned int action; + u32 hit:1, + is_default_miss_act:1, + is_default_hit_act:1; + union { + struct { + } _NoAction; + struct { + } MainControlImpl_next_hop; + struct __attribute__((__packed__)) { + u64 dmac; + u64 smac; + } MainControlImpl_send_nh; + struct { + } MainControlImpl_dflt_route_drop; + } u; +}; + +static __always_inline int process(struct __sk_buff *skb, struct headers_t *hdr, struct pna_global_metadata *compiler_meta__) +{ + struct hdr_md *hdrMd; + + unsigned ebpf_packetOffsetInBits_save = 0; + ParserError_t ebpf_errorCode = NoError; + void* pkt = ((void*)(long)skb->data); + u8* hdr_start = pkt; + void* ebpf_packetEnd = ((void*)(long)skb->data_end); + u32 ebpf_zero = 0; + u32 ebpf_one = 1; + unsigned char ebpf_byte; + u32 pkt_len = skb->len; + + struct main_metadata_t *user_meta; + hdrMd = BPF_MAP_LOOKUP_ELEM(hdr_md_cpumap, &ebpf_zero); + if (!hdrMd) + return TC_ACT_SHOT; + unsigned ebpf_packetOffsetInBits = hdrMd->ebpf_packetOffsetInBits; + hdr_start = pkt + BYTES(ebpf_packetOffsetInBits); + hdr = &(hdrMd->cpumap_hdr); + user_meta = &(hdrMd->cpumap_usermeta); +{ + u8 hit; + { +if (/* hdr->ipv4.isValid() */ + hdr->ipv4.ebpf_valid) { +/* ipv4_tbl.apply() */ + { + /* construct key */ + struct p4tc_table_entry_act_bpf_params__local params = { + .pipeid = p4tc_filter_fields.pipeid, + .tblid = 1 + }; + struct MainControlImpl_ipv4_tbl_1_key key; + __builtin_memset(&key, 0, sizeof(key)); + key.keysz = 64; + key.field0 = hdr->ipv4.dstAddr; + key.field1 = skb->ifindex; + struct p4tc_table_entry_act_bpf *act_bpf; + /* value */ + struct MainControlImpl_ipv4_tbl_1_value *value = NULL; + /* perform lookup */ + act_bpf = bpf_p4tc_tbl_read(skb, ¶ms, &key, sizeof(key)); + value = (struct MainControlImpl_ipv4_tbl_1_value *)act_bpf; + if (value == NULL) { + /* miss; find default action */ + hit = 0; + } else { + hit = value->hit; + } + if (value != NULL) { + /* run action */ + switch (value->action) { + case MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_NEXT_HOP: + { +/* add_entry(""send_nh"", {hdr->ethernet.dstAddr, hdr->ethernet.srcAddr}, 2) */ + struct p4tc_table_entry_act_bpf update_act_bpf = {}; + struct MainControlImpl_ipv4_tbl_1_value *update_act_bpf_val = (struct MainControlImpl_ipv4_tbl_1_value*) &update_act_bpf; + update_act_bpf_val->u.MainControlImpl_send_nh.dmac = hdr->ethernet.dstAddr; + update_act_bpf_val->u.MainControlImpl_send_nh.smac = hdr->ethernet.srcAddr; + update_act_bpf_val->action = MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_SEND_NH; + + /* construct key */ + struct p4tc_table_entry_create_bpf_params__local update_params = { + .pipeid = p4tc_filter_fields.pipeid, + .handle = p4tc_filter_fields.handle, + .classid = p4tc_filter_fields.classid, + .chain = p4tc_filter_fields.chain, + .proto = p4tc_filter_fields.proto, + .prio = p4tc_filter_fields.prio, + .tblid = 1, + .profile_id = 2 + }; + bpf_p4tc_entry_create_on_miss(skb, &update_params, &key, sizeof(key), &update_act_bpf); + } + break; + case MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_SEND_NH: + { + hdr->ethernet.srcAddr = bpf_cpu_to_be64(value->u.MainControlImpl_send_nh.smac); + hdr->ethernet.dstAddr = ntohll(value->u.MainControlImpl_send_nh.dmac << 16); + } + break; + case MAINCONTROLIMPL_IPV4_TBL_1_ACT_MAINCONTROLIMPL_DFLT_ROUTE_DROP: + { +/* drop_packet() */ + drop_packet(); + } + break; + case MAINCONTROLIMPL_IPV4_TBL_1_ACT_NOACTION: + { + } + break; + } + } else { + } + } +; } + + } + } + { +{ +; + ; + } + + if (compiler_meta__->drop) { + return TC_ACT_SHOT; + } + int outHeaderLength = 0; + if (hdr->ethernet.ebpf_valid) { + outHeaderLength += 112; + } +; if (hdr->ipv4.ebpf_valid) { + outHeaderLength += 160; + } +; + int outHeaderOffset = BYTES(outHeaderLength) - (hdr_start - (u8*)pkt); + if (outHeaderOffset != 0) { + int returnCode = 0; + returnCode = bpf_skb_adjust_room(skb, outHeaderOffset, 1, 0); + if (returnCode) { + return TC_ACT_SHOT; + } + } + pkt = ((void*)(long)skb->data); + ebpf_packetEnd = ((void*)(long)skb->data_end); + ebpf_packetOffsetInBits = 0; + if (hdr->ethernet.ebpf_valid) { + if (ebpf_packetEnd < pkt + BYTES(ebpf_packetOffsetInBits + 112)) { + return TC_ACT_SHOT; + } + + hdr->ethernet.dstAddr = htonll(hdr->ethernet.dstAddr << 16); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[2]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[3]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[4]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.dstAddr))[5]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte)); + ebpf_packetOffsetInBits += 48; + + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[2]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[3]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[4]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 4, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.srcAddr))[5]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 5, (ebpf_byte)); + ebpf_packetOffsetInBits += 48; + + hdr->ethernet.etherType = bpf_htons(hdr->ethernet.etherType); + ebpf_byte = ((char*)(&hdr->ethernet.etherType))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ethernet.etherType))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_packetOffsetInBits += 16; + + } +; if (hdr->ipv4.ebpf_valid) { + if (ebpf_packetEnd < pkt + BYTES(ebpf_packetOffsetInBits + 160)) { + return TC_ACT_SHOT; + } + + ebpf_byte = ((char*)(&hdr->ipv4.version))[0]; + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 0, 4, 4, (ebpf_byte >> 0)); + ebpf_packetOffsetInBits += 4; + + ebpf_byte = ((char*)(&hdr->ipv4.ihl))[0]; + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 0, 4, 0, (ebpf_byte >> 0)); + ebpf_packetOffsetInBits += 4; + + ebpf_byte = ((char*)(&hdr->ipv4.diffserv))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_packetOffsetInBits += 8; + + hdr->ipv4.totalLen = bpf_htons(hdr->ipv4.totalLen); + ebpf_byte = ((char*)(&hdr->ipv4.totalLen))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.totalLen))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_packetOffsetInBits += 16; + + hdr->ipv4.identification = bpf_htons(hdr->ipv4.identification); + ebpf_byte = ((char*)(&hdr->ipv4.identification))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.identification))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_packetOffsetInBits += 16; + + ebpf_byte = ((char*)(&hdr->ipv4.flags))[0]; + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 0, 3, 5, (ebpf_byte >> 0)); + ebpf_packetOffsetInBits += 3; + + hdr->ipv4.fragOffset = bpf_htons(hdr->ipv4.fragOffset << 3); + ebpf_byte = ((char*)(&hdr->ipv4.fragOffset))[0]; + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 0, 5, 0, (ebpf_byte >> 3)); + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 0 + 1, 3, 5, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.fragOffset))[1]; + write_partial(pkt + BYTES(ebpf_packetOffsetInBits) + 1, 5, 0, (ebpf_byte >> 3)); + ebpf_packetOffsetInBits += 13; + + ebpf_byte = ((char*)(&hdr->ipv4.ttl))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_packetOffsetInBits += 8; + + ebpf_byte = ((char*)(&hdr->ipv4.protocol))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_packetOffsetInBits += 8; + + hdr->ipv4.hdrChecksum = bpf_htons(hdr->ipv4.hdrChecksum); + ebpf_byte = ((char*)(&hdr->ipv4.hdrChecksum))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.hdrChecksum))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_packetOffsetInBits += 16; + + ebpf_byte = ((char*)(&hdr->ipv4.srcAddr))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.srcAddr))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.srcAddr))[2]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.srcAddr))[3]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte)); + ebpf_packetOffsetInBits += 32; + + ebpf_byte = ((char*)(&hdr->ipv4.dstAddr))[0]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 0, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.dstAddr))[1]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 1, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.dstAddr))[2]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 2, (ebpf_byte)); + ebpf_byte = ((char*)(&hdr->ipv4.dstAddr))[3]; + write_byte(pkt, BYTES(ebpf_packetOffsetInBits) + 3, (ebpf_byte)); + ebpf_packetOffsetInBits += 32; + + } +; + } + return -1; +} +SEC("p4tc/main") +int tc_ingress_func(struct __sk_buff *skb) { + struct pna_global_metadata *compiler_meta__ = (struct pna_global_metadata *) skb->cb; + if (compiler_meta__->pass_to_kernel == true) return TC_ACT_OK; + if (!compiler_meta__->recirculated) { + compiler_meta__->mark = 153; + struct internal_metadata *md = (struct internal_metadata *)(unsigned long)skb->data_meta; + if ((void *) ((struct internal_metadata *) md + 1) <= (void *)(long)skb->data) { + __u16 *ether_type = (__u16 *) ((void *) (long)skb->data + 12); + if ((void *) ((__u16 *) ether_type + 1) > (void *) (long) skb->data_end) { + return TC_ACT_SHOT; + } + *ether_type = md->pkt_ether_type; + } + } + struct hdr_md *hdrMd; + struct headers_t *hdr; + int ret = -1; + ret = process(skb, (struct headers_t *) hdr, compiler_meta__); + if (ret != -1) { + return ret; + } + if (!compiler_meta__->drop && compiler_meta__->egress_port == 0) { + compiler_meta__->pass_to_kernel = true; + return bpf_redirect(skb->ifindex, BPF_F_INGRESS); + } + return bpf_redirect(compiler_meta__->egress_port, 0); +} +char _license[] SEC("license") = "GPL"; diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example_parser.c b/testdata/p4tc_samples_outputs/add_entry_3_example_parser.c new file mode 100644 index 00000000000..84e09a9ebba --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example_parser.c @@ -0,0 +1,136 @@ +#include "add_entry_3_example_parser.h" + +struct p4tc_filter_fields p4tc_filter_fields; + +static __always_inline int run_parser(struct __sk_buff *skb, struct headers_t *hdr, struct pna_global_metadata *compiler_meta__) +{ + struct hdr_md *hdrMd; + + unsigned ebpf_packetOffsetInBits_save = 0; + ParserError_t ebpf_errorCode = NoError; + void* pkt = ((void*)(long)skb->data); + u8* hdr_start = pkt; + void* ebpf_packetEnd = ((void*)(long)skb->data_end); + u32 ebpf_zero = 0; + u32 ebpf_one = 1; + unsigned char ebpf_byte; + u32 pkt_len = skb->len; + + struct main_metadata_t *user_meta; + + hdrMd = BPF_MAP_LOOKUP_ELEM(hdr_md_cpumap, &ebpf_zero); + if (!hdrMd) + return TC_ACT_SHOT; + __builtin_memset(hdrMd, 0, sizeof(struct hdr_md)); + + unsigned ebpf_packetOffsetInBits = 0; + hdr = &(hdrMd->cpumap_hdr); + user_meta = &(hdrMd->cpumap_usermeta); + { + goto start; + parse_ipv4: { +/* extract(hdr->ipv4) */ + if ((u8*)ebpf_packetEnd < hdr_start + BYTES(160 + 0)) { + ebpf_errorCode = PacketTooShort; + goto reject; + } + + hdr->ipv4.version = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits)) >> 4) & EBPF_MASK(u8, 4)); + ebpf_packetOffsetInBits += 4; + + hdr->ipv4.ihl = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits))) & EBPF_MASK(u8, 4)); + ebpf_packetOffsetInBits += 4; + + hdr->ipv4.diffserv = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 8; + + hdr->ipv4.totalLen = (u16)((load_half(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 16; + + hdr->ipv4.identification = (u16)((load_half(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 16; + + hdr->ipv4.flags = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits)) >> 5) & EBPF_MASK(u8, 3)); + ebpf_packetOffsetInBits += 3; + + hdr->ipv4.fragOffset = (u16)((load_half(pkt, BYTES(ebpf_packetOffsetInBits))) & EBPF_MASK(u16, 13)); + ebpf_packetOffsetInBits += 13; + + hdr->ipv4.ttl = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 8; + + hdr->ipv4.protocol = (u8)((load_byte(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 8; + + hdr->ipv4.hdrChecksum = (u16)((load_half(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 16; + + __builtin_memcpy(&hdr->ipv4.srcAddr, pkt + BYTES(ebpf_packetOffsetInBits), 4); + ebpf_packetOffsetInBits += 32; + + __builtin_memcpy(&hdr->ipv4.dstAddr, pkt + BYTES(ebpf_packetOffsetInBits), 4); + ebpf_packetOffsetInBits += 32; + + + hdr->ipv4.ebpf_valid = 1; + hdr_start += BYTES(160); + +; + goto accept; + } + start: { +/* extract(hdr->ethernet) */ + if ((u8*)ebpf_packetEnd < hdr_start + BYTES(112 + 0)) { + ebpf_errorCode = PacketTooShort; + goto reject; + } + + hdr->ethernet.dstAddr = (u64)((load_dword(pkt, BYTES(ebpf_packetOffsetInBits)) >> 16) & EBPF_MASK(u64, 48)); + ebpf_packetOffsetInBits += 48; + + __builtin_memcpy(&hdr->ethernet.srcAddr, pkt + BYTES(ebpf_packetOffsetInBits), 6); + ebpf_packetOffsetInBits += 48; + + hdr->ethernet.etherType = (u16)((load_half(pkt, BYTES(ebpf_packetOffsetInBits)))); + ebpf_packetOffsetInBits += 16; + + + hdr->ethernet.ebpf_valid = 1; + hdr_start += BYTES(112); + +; + u16 select_0; + select_0 = hdr->ethernet.etherType; + if (select_0 == 0x800)goto parse_ipv4; + if ((select_0 & 0x0) == (0x0 & 0x0))goto accept; + else goto reject; + } + + reject: { + if (ebpf_errorCode == 0) { + return TC_ACT_SHOT; + } + compiler_meta__->parser_error = ebpf_errorCode; + goto accept; + } + + } + + accept: + hdrMd->ebpf_packetOffsetInBits = ebpf_packetOffsetInBits; + return -1; +} + +SEC("p4tc/parse") +int tc_parse_func(struct __sk_buff *skb) { + struct pna_global_metadata *compiler_meta__ = (struct pna_global_metadata *) skb->cb; + struct hdr_md *hdrMd; + struct headers_t *hdr; + int ret = -1; + ret = run_parser(skb, (struct headers_t *) hdr, compiler_meta__); + if (ret != -1) { + return ret; + } + return TC_ACT_PIPE; + } +char _license[] SEC("license") = "GPL"; diff --git a/testdata/p4tc_samples_outputs/add_entry_3_example_parser.h b/testdata/p4tc_samples_outputs/add_entry_3_example_parser.h new file mode 100644 index 00000000000..cacbbf22572 --- /dev/null +++ b/testdata/p4tc_samples_outputs/add_entry_3_example_parser.h @@ -0,0 +1,167 @@ +#include "ebpf_kernel.h" + +#include +#include +#include "pna.h" + +#define EBPF_MASK(t, w) ((((t)(1)) << (w)) - (t)1) +#define BYTES(w) ((w) / 8) +#define write_partial(a, w, s, v) do { *((u8*)a) = ((*((u8*)a)) & ~(EBPF_MASK(u8, w) << s)) | (v << s) ; } while (0) +#define write_byte(base, offset, v) do { *(u8*)((base) + (offset)) = (v); } while (0) +#define bpf_trace_message(fmt, ...) + + +struct ethernet_t { + u64 dstAddr; /* EthernetAddress */ + u64 srcAddr; /* EthernetAddress */ + u16 etherType; /* bit<16> */ + u8 ebpf_valid; +}; +struct ipv4_t { + u8 version; /* bit<4> */ + u8 ihl; /* bit<4> */ + u8 diffserv; /* bit<8> */ + u16 totalLen; /* bit<16> */ + u16 identification; /* bit<16> */ + u8 flags; /* bit<3> */ + u16 fragOffset; /* bit<13> */ + u8 ttl; /* bit<8> */ + u8 protocol; /* bit<8> */ + u16 hdrChecksum; /* bit<16> */ + u32 srcAddr; /* bit<32> */ + u32 dstAddr; /* bit<32> */ + u8 ebpf_valid; +}; +struct main_metadata_t { +}; +struct headers_t { + struct ethernet_t ethernet; /* ethernet_t */ + struct ipv4_t ipv4; /* ipv4_t */ +}; +struct tuple_0 { + u64 f0; /* bit<48> */ + u64 f1; /* bit<48> */ +}; + +struct hdr_md { + struct headers_t cpumap_hdr; + struct main_metadata_t cpumap_usermeta; + unsigned ebpf_packetOffsetInBits; + __u8 __hook; +}; + +struct p4tc_filter_fields { + __u32 pipeid; + __u32 handle; + __u32 classid; + __u32 chain; + __u32 blockid; + __be16 proto; + __u16 prio; +}; + +REGISTER_START() +REGISTER_TABLE(hdr_md_cpumap, BPF_MAP_TYPE_PERCPU_ARRAY, u32, struct hdr_md, 2) +BPF_ANNOTATE_KV_PAIR(hdr_md_cpumap, u32, struct hdr_md) +REGISTER_END() + +static __always_inline +void crc16_update(u16 * reg, const u8 * data, u16 data_size, const u16 poly) { + if (data_size <= 8) + data += data_size - 1; + #pragma clang loop unroll(full) + for (u16 i = 0; i < data_size; i++) { + bpf_trace_message("CRC16: data byte: %x\n", *data); + *reg ^= *data; + for (u8 bit = 0; bit < 8; bit++) { + *reg = (*reg) & 1 ? ((*reg) >> 1) ^ poly : (*reg) >> 1; + } + if (data_size <= 8) + data--; + else + data++; + } +} +static __always_inline u16 crc16_finalize(u16 reg) { + return reg; +} +static __always_inline +void crc32_update(u32 * reg, const u8 * data, u16 data_size, const u32 poly) { + u32* current = (u32*) data; + u32 index = 0; + u32 lookup_key = 0; + u32 lookup_value = 0; + u32 lookup_value1 = 0; + u32 lookup_value2 = 0; + u32 lookup_value3 = 0; + u32 lookup_value4 = 0; + u32 lookup_value5 = 0; + u32 lookup_value6 = 0; + u32 lookup_value7 = 0; + u32 lookup_value8 = 0; + u16 tmp = 0; + if (crc32_table != NULL) { + for (u16 i = data_size; i >= 8; i -= 8) { + /* Vars one and two will have swapped byte order if data_size == 8 */ + if (data_size == 8) current = (u32 *)(data + 4); + bpf_trace_message("CRC32: data dword: %x\n", *current); + u32 one = (data_size == 8 ? __builtin_bswap32(*current--) : *current++) ^ *reg; + bpf_trace_message("CRC32: data dword: %x\n", *current); + u32 two = (data_size == 8 ? __builtin_bswap32(*current--) : *current++); + lookup_key = (one & 0x000000FF); + lookup_value8 = crc32_table[(u16)(1792 + (u8)lookup_key)]; + lookup_key = (one >> 8) & 0x000000FF; + lookup_value7 = crc32_table[(u16)(1536 + (u8)lookup_key)]; + lookup_key = (one >> 16) & 0x000000FF; + lookup_value6 = crc32_table[(u16)(1280 + (u8)lookup_key)]; + lookup_key = one >> 24; + lookup_value5 = crc32_table[(u16)(1024 + (u8)(lookup_key))]; + lookup_key = (two & 0x000000FF); + lookup_value4 = crc32_table[(u16)(768 + (u8)lookup_key)]; + lookup_key = (two >> 8) & 0x000000FF; + lookup_value3 = crc32_table[(u16)(512 + (u8)lookup_key)]; + lookup_key = (two >> 16) & 0x000000FF; + lookup_value2 = crc32_table[(u16)(256 + (u8)lookup_key)]; + lookup_key = two >> 24; + lookup_value1 = crc32_table[(u8)(lookup_key)]; + *reg = lookup_value8 ^ lookup_value7 ^ lookup_value6 ^ lookup_value5 ^ + lookup_value4 ^ lookup_value3 ^ lookup_value2 ^ lookup_value1; + tmp += 8; + } + volatile int std_algo_lookup_key = 0; + if (data_size < 8) { + unsigned char *currentChar = (unsigned char *) current; + currentChar += data_size - 1; + for (u16 i = tmp; i < data_size; i++) { + bpf_trace_message("CRC32: data byte: %x\n", *currentChar); + std_algo_lookup_key = (u32)(((*reg) & 0xFF) ^ *currentChar--); + if (std_algo_lookup_key >= 0) { + lookup_value = crc32_table[(u8)(std_algo_lookup_key & 255)]; + } + *reg = ((*reg) >> 8) ^ lookup_value; + } + } else { + /* Consume data not processed by slice-by-8 algorithm above, these data are in network byte order */ + unsigned char *currentChar = (unsigned char *) current; + for (u16 i = tmp; i < data_size; i++) { + bpf_trace_message("CRC32: data byte: %x\n", *currentChar); + std_algo_lookup_key = (u32)(((*reg) & 0xFF) ^ *currentChar++); + if (std_algo_lookup_key >= 0) { + lookup_value = crc32_table[(u8)(std_algo_lookup_key & 255)]; + } + *reg = ((*reg) >> 8) ^ lookup_value; + } + } + } +} +static __always_inline u32 crc32_finalize(u32 reg) { + return reg ^ 0xFFFFFFFF; +} +inline u16 csum16_add(u16 csum, u16 addend) { + u16 res = csum; + res += addend; + return (res + (res < addend)); +} +inline u16 csum16_sub(u16 csum, u16 addend) { + return csum16_add(csum, ~addend); +} diff --git a/testdata/p4tc_samples_outputs/add_entry_example.template b/testdata/p4tc_samples_outputs/add_entry_example.template index 757e95aaa11..42835397516 100755 --- a/testdata/p4tc_samples_outputs/add_entry_example.template +++ b/testdata/p4tc_samples_outputs/add_entry_example.template @@ -17,7 +17,7 @@ $TC p4template update action/add_entry_example/MainControlImpl/next_hop1 state a $TC p4template create table/add_entry_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 permissions 0x3DE6 \ + keysz 64 nummasks 8 permissions 0x3de6 tentries 2048 \ table_acts act name add_entry_example/MainControlImpl/next_hop \ act name add_entry_example/MainControlImpl/dflt_route_drop $TC p4template update table/add_entry_example/MainControlImpl/ipv4_tbl_1 default_miss_action action add_entry_example/MainControlImpl/next_hop @@ -25,7 +25,7 @@ $TC p4template update table/add_entry_example/MainControlImpl/ipv4_tbl_1 default $TC p4template create table/add_entry_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 permissions 0x3DE6 \ + keysz 72 nummasks 8 permissions 0x3de6 tentries 2048 \ table_acts act name add_entry_example/MainControlImpl/next_hop1 \ act name add_entry_example/MainControlImpl/dflt_route_drop $TC p4template update table/add_entry_example/MainControlImpl/ipv4_tbl_2 default_miss_action action add_entry_example/MainControlImpl/next_hop1 diff --git a/testdata/p4tc_samples_outputs/calculator.template b/testdata/p4tc_samples_outputs/calculator.template index 34fe3a115a0..e78026162bb 100755 --- a/testdata/p4tc_samples_outputs/calculator.template +++ b/testdata/p4tc_samples_outputs/calculator.template @@ -26,7 +26,7 @@ $TC p4template update action/calculator/MainControlImpl/operation_drop state act $TC p4template create table/calculator/MainControlImpl/calculate \ tblid 1 \ type exact \ - keysz 8 nummasks 8 tentries 2048 \ + keysz 8 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name calculator/MainControlImpl/operation_add \ act name calculator/MainControlImpl/operation_sub \ act name calculator/MainControlImpl/operation_and \ diff --git a/testdata/p4tc_samples_outputs/checksum.template b/testdata/p4tc_samples_outputs/checksum.template index 49d2137b66a..a31d2fd2130 100755 --- a/testdata/p4tc_samples_outputs/checksum.template +++ b/testdata/p4tc_samples_outputs/checksum.template @@ -17,7 +17,7 @@ $TC p4template update action/checksum/ingress/drop state active $TC p4template create table/checksum/ingress/nh_table \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name checksum/ingress/send_nh \ act name checksum/ingress/drop $TC p4template update table/checksum/ingress/nh_table default_miss_action permissions 0x1024 action checksum/ingress/drop diff --git a/testdata/p4tc_samples_outputs/const_entries_range_mask.template b/testdata/p4tc_samples_outputs/const_entries_range_mask.template index 88b95c29851..118d6894b13 100755 --- a/testdata/p4tc_samples_outputs/const_entries_range_mask.template +++ b/testdata/p4tc_samples_outputs/const_entries_range_mask.template @@ -15,7 +15,7 @@ $TC p4template update action/const_entries_range_mask/MainControlImpl/a_with_con $TC p4template create table/const_entries_range_mask/MainControlImpl/t_range \ tblid 1 \ type ternary \ - keysz 8 nummasks 8 tentries 2048 \ + keysz 8 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name const_entries_range_mask/MainControlImpl/a \ act name const_entries_range_mask/MainControlImpl/a_with_control_params $TC p4template update table/const_entries_range_mask/MainControlImpl/t_range default_miss_action action const_entries_range_mask/MainControlImpl/a diff --git a/testdata/p4tc_samples_outputs/default_action_example.template b/testdata/p4tc_samples_outputs/default_action_example.template index fab865ae204..55d561836ce 100755 --- a/testdata/p4tc_samples_outputs/default_action_example.template +++ b/testdata/p4tc_samples_outputs/default_action_example.template @@ -18,7 +18,7 @@ $TC p4template update action/default_action_example/MainControlImpl/drop state a $TC p4template create table/default_action_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_example/MainControlImpl/next_hop \ act name default_action_example/MainControlImpl/default_route_drop $TC p4template update table/default_action_example/MainControlImpl/ipv4_tbl_1 default_miss_action action default_action_example/MainControlImpl/default_route_drop @@ -26,7 +26,7 @@ $TC p4template update table/default_action_example/MainControlImpl/ipv4_tbl_1 de $TC p4template create table/default_action_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_example/MainControlImpl/next_hop \ act name default_action_example/MainControlImpl/drop $TC p4template update table/default_action_example/MainControlImpl/ipv4_tbl_2 default_miss_action action default_action_example/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/default_action_with_param.template b/testdata/p4tc_samples_outputs/default_action_with_param.template index 7276abd1ffa..bf35b3b4e3a 100755 --- a/testdata/p4tc_samples_outputs/default_action_with_param.template +++ b/testdata/p4tc_samples_outputs/default_action_with_param.template @@ -18,7 +18,7 @@ $TC p4template update action/default_action_with_param/MainControlImpl/drop stat $TC p4template create table/default_action_with_param/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_with_param/MainControlImpl/next_hop \ act name default_action_with_param/MainControlImpl/dflt_route_drop $TC p4template update table/default_action_with_param/MainControlImpl/ipv4_tbl_1 default_miss_action action default_action_with_param/MainControlImpl/next_hop param vport 8 @@ -26,7 +26,7 @@ $TC p4template update table/default_action_with_param/MainControlImpl/ipv4_tbl_1 $TC p4template create table/default_action_with_param/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_with_param/MainControlImpl/next_hop \ act name default_action_with_param/MainControlImpl/drop $TC p4template update table/default_action_with_param/MainControlImpl/ipv4_tbl_2 default_miss_action action default_action_with_param/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/default_action_with_param_01.template b/testdata/p4tc_samples_outputs/default_action_with_param_01.template index b534ecabae1..675bc5d1fa7 100755 --- a/testdata/p4tc_samples_outputs/default_action_with_param_01.template +++ b/testdata/p4tc_samples_outputs/default_action_with_param_01.template @@ -17,7 +17,7 @@ $TC p4template update action/default_action_with_param_01/MainControlImpl/drop s $TC p4template create table/default_action_with_param_01/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_with_param_01/MainControlImpl/next_hop flags defaultonly \ act name default_action_with_param_01/MainControlImpl/dflt_route_drop $TC p4template update table/default_action_with_param_01/MainControlImpl/ipv4_tbl_1 default_miss_action action default_action_with_param_01/MainControlImpl/next_hop @@ -25,7 +25,7 @@ $TC p4template update table/default_action_with_param_01/MainControlImpl/ipv4_tb $TC p4template create table/default_action_with_param_01/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_action_with_param_01/MainControlImpl/next_hop flags defaultonly \ act name default_action_with_param_01/MainControlImpl/drop $TC p4template update table/default_action_with_param_01/MainControlImpl/ipv4_tbl_2 default_miss_action action default_action_with_param_01/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/default_hit_const_example.template b/testdata/p4tc_samples_outputs/default_hit_const_example.template index af622124868..23b7f6d744b 100755 --- a/testdata/p4tc_samples_outputs/default_hit_const_example.template +++ b/testdata/p4tc_samples_outputs/default_hit_const_example.template @@ -17,7 +17,7 @@ $TC p4template update action/default_hit_const_example/MainControlImpl/tcp_other $TC p4template create table/default_hit_const_example/MainControlImpl/set_ct_options \ tblid 1 \ type ternary \ - keysz 8 nummasks 8 tentries 2048 \ + keysz 8 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name default_hit_const_example/MainControlImpl/tcp_syn_packet \ act name default_hit_const_example/MainControlImpl/tcp_fin_or_rst_packet \ act name default_hit_const_example/MainControlImpl/tcp_other_packets diff --git a/testdata/p4tc_samples_outputs/drop_packet_example.template b/testdata/p4tc_samples_outputs/drop_packet_example.template index 06f8da12a2d..dd4d7d807e1 100755 --- a/testdata/p4tc_samples_outputs/drop_packet_example.template +++ b/testdata/p4tc_samples_outputs/drop_packet_example.template @@ -15,7 +15,7 @@ $TC p4template update action/drop_packet_example/MainControlImpl/default_route_d $TC p4template create table/drop_packet_example/MainControlImpl/ipv4_tbl \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name drop_packet_example/MainControlImpl/next_hop \ act name drop_packet_example/MainControlImpl/default_route_drop $TC p4template update table/drop_packet_example/MainControlImpl/ipv4_tbl default_miss_action action drop_packet_example/MainControlImpl/default_route_drop diff --git a/testdata/p4tc_samples_outputs/global_action_example_01.template b/testdata/p4tc_samples_outputs/global_action_example_01.template index b6f6af07dba..9d6498edd62 100755 --- a/testdata/p4tc_samples_outputs/global_action_example_01.template +++ b/testdata/p4tc_samples_outputs/global_action_example_01.template @@ -22,7 +22,7 @@ $TC p4template update action/global_action_example_01/ingress/drop state active $TC p4template create table/global_action_example_01/ingress/nh_table \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name global_action_example_01/send_nh \ act name global_action_example_01/ingress/drop $TC p4template update table/global_action_example_01/ingress/nh_table default_miss_action permissions 0x1024 action global_action_example_01/ingress/drop @@ -30,7 +30,7 @@ $TC p4template update table/global_action_example_01/ingress/nh_table default_mi $TC p4template create table/global_action_example_01/ingress/nh_table2 \ tblid 2 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name global_action_example_01/ingress/send_nh \ act name global_action_example_01/ingress/drop $TC p4template update table/global_action_example_01/ingress/nh_table2 default_miss_action permissions 0x1024 action global_action_example_01/ingress/drop diff --git a/testdata/p4tc_samples_outputs/global_action_example_02.template b/testdata/p4tc_samples_outputs/global_action_example_02.template index 7da27b37d2c..cbe3ac34dbb 100755 --- a/testdata/p4tc_samples_outputs/global_action_example_02.template +++ b/testdata/p4tc_samples_outputs/global_action_example_02.template @@ -20,7 +20,7 @@ $TC p4template update action/global_action_example_02/ingress/drop state active $TC p4template create table/global_action_example_02/ingress/nh_table \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name global_action_example_02/ingress/send_nh \ act name global_action_example_02/drop $TC p4template update table/global_action_example_02/ingress/nh_table default_miss_action permissions 0x1024 action global_action_example_02/drop @@ -28,7 +28,7 @@ $TC p4template update table/global_action_example_02/ingress/nh_table default_mi $TC p4template create table/global_action_example_02/ingress/nh_table2 \ tblid 2 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name global_action_example_02/ingress/send_nh \ act name global_action_example_02/ingress/drop $TC p4template update table/global_action_example_02/ingress/nh_table2 default_miss_action permissions 0x1024 action global_action_example_02/ingress/drop diff --git a/testdata/p4tc_samples_outputs/ipip.template b/testdata/p4tc_samples_outputs/ipip.template index 3174f4002b0..095b061411e 100755 --- a/testdata/p4tc_samples_outputs/ipip.template +++ b/testdata/p4tc_samples_outputs/ipip.template @@ -22,7 +22,7 @@ $TC p4template update action/ipip/Main/drop state active $TC p4template create table/ipip/Main/fwd_table \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name ipip/Main/set_ipip \ act name ipip/Main/set_nh \ act name ipip/Main/drop diff --git a/testdata/p4tc_samples_outputs/matchtype.template b/testdata/p4tc_samples_outputs/matchtype.template index 81c587e9c81..445bf1749ed 100755 --- a/testdata/p4tc_samples_outputs/matchtype.template +++ b/testdata/p4tc_samples_outputs/matchtype.template @@ -18,7 +18,7 @@ $TC p4template update action/matchtype/MainControlImpl/drop state active $TC p4template create table/matchtype/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name matchtype/MainControlImpl/next_hop \ act name matchtype/MainControlImpl/default_route_drop $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_1 default_miss_action action matchtype/MainControlImpl/default_route_drop @@ -26,7 +26,7 @@ $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_1 default_miss_ac $TC p4template create table/matchtype/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type ternary \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name matchtype/MainControlImpl/next_hop \ act name matchtype/MainControlImpl/drop $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_2 default_miss_action action matchtype/MainControlImpl/drop @@ -34,7 +34,7 @@ $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_2 default_miss_ac $TC p4template create table/matchtype/MainControlImpl/ipv4_tbl_3 \ tblid 3 \ type ternary \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name matchtype/MainControlImpl/next_hop \ act name matchtype/MainControlImpl/drop $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_3 default_miss_action action matchtype/MainControlImpl/drop @@ -42,7 +42,7 @@ $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_3 default_miss_ac $TC p4template create table/matchtype/MainControlImpl/ipv4_tbl_4 \ tblid 4 \ type lpm \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name matchtype/MainControlImpl/next_hop \ act name matchtype/MainControlImpl/drop $TC p4template update table/matchtype/MainControlImpl/ipv4_tbl_4 default_miss_action action matchtype/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/mix_matchtype_example.template b/testdata/p4tc_samples_outputs/mix_matchtype_example.template index 2facd91e5c1..a4ccee250eb 100755 --- a/testdata/p4tc_samples_outputs/mix_matchtype_example.template +++ b/testdata/p4tc_samples_outputs/mix_matchtype_example.template @@ -18,7 +18,7 @@ $TC p4template update action/mix_matchtype_example/MainControlImpl/drop state ac $TC p4template create table/mix_matchtype_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name mix_matchtype_example/MainControlImpl/next_hop \ act name mix_matchtype_example/MainControlImpl/default_route_drop $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_1 default_miss_action action mix_matchtype_example/MainControlImpl/default_route_drop @@ -26,7 +26,7 @@ $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_1 def $TC p4template create table/mix_matchtype_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type ternary \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name mix_matchtype_example/MainControlImpl/next_hop \ act name mix_matchtype_example/MainControlImpl/drop $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_2 default_miss_action action mix_matchtype_example/MainControlImpl/drop @@ -34,7 +34,7 @@ $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_2 def $TC p4template create table/mix_matchtype_example/MainControlImpl/ipv4_tbl_3 \ tblid 3 \ type ternary \ - keysz 40 nummasks 8 tentries 2048 \ + keysz 40 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name mix_matchtype_example/MainControlImpl/next_hop \ act name mix_matchtype_example/MainControlImpl/drop $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_3 default_miss_action action mix_matchtype_example/MainControlImpl/drop @@ -42,7 +42,7 @@ $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_3 def $TC p4template create table/mix_matchtype_example/MainControlImpl/ipv4_tbl_4 \ tblid 4 \ type lpm \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name mix_matchtype_example/MainControlImpl/next_hop \ act name mix_matchtype_example/MainControlImpl/drop $TC p4template update table/mix_matchtype_example/MainControlImpl/ipv4_tbl_4 default_miss_action action mix_matchtype_example/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/multiple_tables_example_01.template b/testdata/p4tc_samples_outputs/multiple_tables_example_01.template index 239423a1372..9e0de2cb9e0 100755 --- a/testdata/p4tc_samples_outputs/multiple_tables_example_01.template +++ b/testdata/p4tc_samples_outputs/multiple_tables_example_01.template @@ -31,7 +31,7 @@ $TC p4template update action/multiple_tables_example_01/MainControlImpl/tcp_othe $TC p4template create table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_01/MainControlImpl/next_hop \ act name multiple_tables_example_01/MainControlImpl/default_route_drop $TC p4template update table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_1 default_miss_action action multiple_tables_example_01/MainControlImpl/default_route_drop @@ -39,7 +39,7 @@ $TC p4template update table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_ $TC p4template create table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_01/MainControlImpl/next_hop \ act name multiple_tables_example_01/MainControlImpl/drop $TC p4template update table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_2 default_miss_action action multiple_tables_example_01/MainControlImpl/drop @@ -47,26 +47,26 @@ $TC p4template update table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_ $TC p4template create table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_3 \ tblid 3 \ type exact \ - keysz 67 nummasks 8 tentries 1024 \ + keysz 67 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name multiple_tables_example_01/MainControlImpl/sendtoport \ act name multiple_tables_example_01/MainControlImpl/drop $TC p4template create table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_4 \ tblid 4 \ type exact \ - keysz 77 nummasks 8 tentries 1024 \ + keysz 77 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name multiple_tables_example_01/MainControlImpl/sendtoport \ act name multiple_tables_example_01/MainControlImpl/drop $TC p4template create table/multiple_tables_example_01/MainControlImpl/ipv4_tbl_5 \ tblid 5 \ type exact \ - keysz 13 nummasks 8 tentries 1024 + keysz 13 nummasks 8 permissions 0x25a4 tentries 1024 $TC p4template create table/multiple_tables_example_01/MainControlImpl/set_ct_options \ tblid 6 \ type ternary \ - keysz 8 nummasks 8 tentries 2048 \ + keysz 8 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_01/MainControlImpl/tcp_syn_packet \ act name multiple_tables_example_01/MainControlImpl/tcp_fin_or_rst_packet \ act name multiple_tables_example_01/MainControlImpl/tcp_other_packets @@ -75,7 +75,7 @@ $TC p4template update table/multiple_tables_example_01/MainControlImpl/set_ct_op $TC p4template create table/multiple_tables_example_01/MainControlImpl/set_all_options \ tblid 7 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_01/MainControlImpl/next_hop \ act name multiple_tables_example_01/MainControlImpl/default_route_drop \ act name multiple_tables_example_01/MainControlImpl/tcp_syn_packet \ diff --git a/testdata/p4tc_samples_outputs/multiple_tables_example_02.template b/testdata/p4tc_samples_outputs/multiple_tables_example_02.template index dbcfd42a74e..65bbc00183a 100755 --- a/testdata/p4tc_samples_outputs/multiple_tables_example_02.template +++ b/testdata/p4tc_samples_outputs/multiple_tables_example_02.template @@ -30,7 +30,7 @@ $TC p4template update action/multiple_tables_example_02/MainControlImpl/tcp_othe $TC p4template create table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_02/MainControlImpl/next_hop flags tableonly \ act name multiple_tables_example_02/MainControlImpl/default_route_drop $TC p4template update table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_1 default_miss_action action multiple_tables_example_02/MainControlImpl/default_route_drop @@ -38,7 +38,7 @@ $TC p4template update table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_ $TC p4template create table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_02/MainControlImpl/next_hop \ act name multiple_tables_example_02/MainControlImpl/drop flags defaultonly $TC p4template update table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_2 default_miss_action action multiple_tables_example_02/MainControlImpl/drop @@ -46,26 +46,26 @@ $TC p4template update table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_ $TC p4template create table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_3 \ tblid 3 \ type exact \ - keysz 67 nummasks 8 tentries 1024 \ + keysz 67 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name multiple_tables_example_02/MainControlImpl/sendtoport \ act name multiple_tables_example_02/MainControlImpl/drop $TC p4template create table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_4 \ tblid 4 \ type exact \ - keysz 77 nummasks 8 tentries 1024 \ + keysz 77 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name multiple_tables_example_02/MainControlImpl/sendtoport \ act name multiple_tables_example_02/MainControlImpl/drop $TC p4template create table/multiple_tables_example_02/MainControlImpl/ipv4_tbl_5 \ tblid 5 \ type exact \ - keysz 13 nummasks 8 tentries 1024 + keysz 13 nummasks 8 permissions 0x25a4 tentries 1024 $TC p4template create table/multiple_tables_example_02/MainControlImpl/set_ct_options \ tblid 6 \ type ternary \ - keysz 8 nummasks 8 tentries 2048 \ + keysz 8 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_02/MainControlImpl/tcp_syn_packet \ act name multiple_tables_example_02/MainControlImpl/tcp_fin_or_rst_packet \ act name multiple_tables_example_02/MainControlImpl/tcp_other_packets @@ -74,7 +74,7 @@ $TC p4template update table/multiple_tables_example_02/MainControlImpl/set_ct_op $TC p4template create table/multiple_tables_example_02/MainControlImpl/set_all_options \ tblid 7 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name multiple_tables_example_02/MainControlImpl/next_hop \ act name multiple_tables_example_02/MainControlImpl/default_route_drop \ act name multiple_tables_example_02/MainControlImpl/tcp_syn_packet \ diff --git a/testdata/p4tc_samples_outputs/name_annotation_example.template b/testdata/p4tc_samples_outputs/name_annotation_example.template index 26646a53507..d2327935183 100755 --- a/testdata/p4tc_samples_outputs/name_annotation_example.template +++ b/testdata/p4tc_samples_outputs/name_annotation_example.template @@ -18,7 +18,7 @@ $TC p4template update action/name_annotation_example/MainControlImpl/drop state $TC p4template create table/name_annotation_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name name_annotation_example/MainControlImpl/next_hop \ act name name_annotation_example/MainControlImpl/default_route_drop $TC p4template update table/name_annotation_example/MainControlImpl/ipv4_tbl_1 default_miss_action action name_annotation_example/MainControlImpl/default_route_drop @@ -26,7 +26,7 @@ $TC p4template update table/name_annotation_example/MainControlImpl/ipv4_tbl_1 d $TC p4template create table/name_annotation_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name name_annotation_example/MainControlImpl/next_hop \ act name name_annotation_example/MainControlImpl/drop $TC p4template update table/name_annotation_example/MainControlImpl/ipv4_tbl_2 default_miss_action action name_annotation_example/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/noaction_example_01.template b/testdata/p4tc_samples_outputs/noaction_example_01.template index 9f4e41b8d93..2508079a093 100755 --- a/testdata/p4tc_samples_outputs/noaction_example_01.template +++ b/testdata/p4tc_samples_outputs/noaction_example_01.template @@ -22,7 +22,7 @@ $TC p4template update action/noaction_example_01/MainControlImpl/drop state acti $TC p4template create table/noaction_example_01/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name noaction_example_01/MainControlImpl/next_hop \ act name noaction_example_01/MainControlImpl/default_route_drop $TC p4template update table/noaction_example_01/MainControlImpl/ipv4_tbl_1 default_miss_action action noaction_example_01/MainControlImpl/default_route_drop @@ -30,7 +30,7 @@ $TC p4template update table/noaction_example_01/MainControlImpl/ipv4_tbl_1 defau $TC p4template create table/noaction_example_01/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 67 nummasks 8 tentries 1024 \ + keysz 67 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name noaction_example_01/MainControlImpl/sendtoport \ act name noaction_example_01/MainControlImpl/drop $TC p4template update pipeline/noaction_example_01 state ready \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/noaction_example_02.template b/testdata/p4tc_samples_outputs/noaction_example_02.template index bea6225e5e6..18540c34328 100755 --- a/testdata/p4tc_samples_outputs/noaction_example_02.template +++ b/testdata/p4tc_samples_outputs/noaction_example_02.template @@ -15,7 +15,7 @@ $TC p4template update action/noaction_example_02/MainControlImpl/default_route_d $TC p4template create table/noaction_example_02/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name noaction_example_02/MainControlImpl/next_hop \ act name noaction_example_02/MainControlImpl/default_route_drop $TC p4template update table/noaction_example_02/MainControlImpl/ipv4_tbl_1 default_miss_action action noaction_example_02/MainControlImpl/default_route_drop @@ -23,5 +23,5 @@ $TC p4template update table/noaction_example_02/MainControlImpl/ipv4_tbl_1 defau $TC p4template create table/noaction_example_02/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 3 nummasks 8 tentries 1024 + keysz 3 nummasks 8 permissions 0x25a4 tentries 1024 $TC p4template update pipeline/noaction_example_02 state ready \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/nummask_annotation_example.template b/testdata/p4tc_samples_outputs/nummask_annotation_example.template index 031236f3a12..a306fd1dcd8 100755 --- a/testdata/p4tc_samples_outputs/nummask_annotation_example.template +++ b/testdata/p4tc_samples_outputs/nummask_annotation_example.template @@ -17,7 +17,7 @@ $TC p4template update action/nummask_annotation_example/MainControlImpl/tcp_othe $TC p4template create table/nummask_annotation_example/MainControlImpl/set_ct_options \ tblid 1 \ type lpm \ - keysz 8 nummasks 64 tentries 2048 \ + keysz 8 nummasks 64 permissions 0x25a4 tentries 2048 \ table_acts act name nummask_annotation_example/MainControlImpl/tcp_syn_packet \ act name nummask_annotation_example/MainControlImpl/tcp_fin_or_rst_packet \ act name nummask_annotation_example/MainControlImpl/tcp_other_packets diff --git a/testdata/p4tc_samples_outputs/send_to_port_example.template b/testdata/p4tc_samples_outputs/send_to_port_example.template index 484574d124c..def61e7a900 100755 --- a/testdata/p4tc_samples_outputs/send_to_port_example.template +++ b/testdata/p4tc_samples_outputs/send_to_port_example.template @@ -15,7 +15,7 @@ $TC p4template update action/send_to_port_example/MainControlImpl/default_route_ $TC p4template create table/send_to_port_example/MainControlImpl/ipv4_tbl \ tblid 1 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name send_to_port_example/MainControlImpl/next_hop \ act name send_to_port_example/MainControlImpl/default_route_drop $TC p4template update table/send_to_port_example/MainControlImpl/ipv4_tbl default_miss_action permissions 0x1024 action send_to_port_example/MainControlImpl/default_route_drop diff --git a/testdata/p4tc_samples_outputs/set_entry_timer_example.template b/testdata/p4tc_samples_outputs/set_entry_timer_example.template index dfa968e5167..afbac959bed 100755 --- a/testdata/p4tc_samples_outputs/set_entry_timer_example.template +++ b/testdata/p4tc_samples_outputs/set_entry_timer_example.template @@ -17,7 +17,7 @@ $TC p4template update action/set_entry_timer_example/MainControlImpl/drop state $TC p4template create table/set_entry_timer_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name set_entry_timer_example/MainControlImpl/next_hop \ act name set_entry_timer_example/MainControlImpl/default_route_drop $TC p4template update table/set_entry_timer_example/MainControlImpl/ipv4_tbl_1 default_miss_action action set_entry_timer_example/MainControlImpl/default_route_drop @@ -25,7 +25,7 @@ $TC p4template update table/set_entry_timer_example/MainControlImpl/ipv4_tbl_1 d $TC p4template create table/set_entry_timer_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name set_entry_timer_example/MainControlImpl/next_hop \ act name set_entry_timer_example/MainControlImpl/drop $TC p4template update table/set_entry_timer_example/MainControlImpl/ipv4_tbl_2 default_miss_action action set_entry_timer_example/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/simple_exact_example.template b/testdata/p4tc_samples_outputs/simple_exact_example.template index 6aa00d2db45..7d9b3b408b0 100755 --- a/testdata/p4tc_samples_outputs/simple_exact_example.template +++ b/testdata/p4tc_samples_outputs/simple_exact_example.template @@ -17,7 +17,7 @@ $TC p4template update action/simple_exact_example/ingress/drop state active $TC p4template create table/simple_exact_example/ingress/nh_table \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x18a6 tentries 262144 \ table_acts act name simple_exact_example/ingress/send_nh \ act name simple_exact_example/ingress/drop $TC p4template update table/simple_exact_example/ingress/nh_table default_miss_action permissions 0x1024 action simple_exact_example/ingress/drop diff --git a/testdata/p4tc_samples_outputs/simple_lpm_example.template b/testdata/p4tc_samples_outputs/simple_lpm_example.template index 13562afd593..5f7a0611d7a 100755 --- a/testdata/p4tc_samples_outputs/simple_lpm_example.template +++ b/testdata/p4tc_samples_outputs/simple_lpm_example.template @@ -17,7 +17,7 @@ $TC p4template update action/simple_lpm_example/ingress/drop state active $TC p4template create table/simple_lpm_example/ingress/nh_table \ tblid 1 \ type lpm \ - keysz 32 nummasks 8 tentries 262144 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name simple_lpm_example/ingress/send_nh \ act name simple_lpm_example/ingress/drop $TC p4template update table/simple_lpm_example/ingress/nh_table default_miss_action permissions 0x1024 action simple_lpm_example/ingress/drop diff --git a/testdata/p4tc_samples_outputs/simple_ternary_example.template b/testdata/p4tc_samples_outputs/simple_ternary_example.template index 2e40f6a2b1f..c800bbd386e 100755 --- a/testdata/p4tc_samples_outputs/simple_ternary_example.template +++ b/testdata/p4tc_samples_outputs/simple_ternary_example.template @@ -17,7 +17,7 @@ $TC p4template update action/simple_ternary_example/ingress/drop state active $TC p4template create table/simple_ternary_example/ingress/nh_table \ tblid 1 \ type ternary \ - keysz 64 nummasks 8 tentries 262144 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 262144 \ table_acts act name simple_ternary_example/ingress/send_nh \ act name simple_ternary_example/ingress/drop $TC p4template update table/simple_ternary_example/ingress/nh_table default_miss_action permissions 0x1024 action simple_ternary_example/ingress/drop diff --git a/testdata/p4tc_samples_outputs/size_param_example.template b/testdata/p4tc_samples_outputs/size_param_example.template index 3457043465d..29abd6eeb97 100755 --- a/testdata/p4tc_samples_outputs/size_param_example.template +++ b/testdata/p4tc_samples_outputs/size_param_example.template @@ -22,7 +22,7 @@ $TC p4template update action/size_param_example/MainControlImpl/drop state activ $TC p4template create table/size_param_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name size_param_example/MainControlImpl/next_hop \ act name size_param_example/MainControlImpl/default_route_drop $TC p4template update table/size_param_example/MainControlImpl/ipv4_tbl_1 default_miss_action action size_param_example/MainControlImpl/default_route_drop @@ -30,7 +30,7 @@ $TC p4template update table/size_param_example/MainControlImpl/ipv4_tbl_1 defaul $TC p4template create table/size_param_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 67 nummasks 8 tentries 1024 \ + keysz 67 nummasks 8 permissions 0x25a4 tentries 1024 \ table_acts act name size_param_example/MainControlImpl/sendtoport \ act name size_param_example/MainControlImpl/drop $TC p4template update table/size_param_example/MainControlImpl/ipv4_tbl_2 default_miss_action action size_param_example/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_01.template b/testdata/p4tc_samples_outputs/tc_may_override_example_01.template index ad0b5261401..13b1807dd54 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_01.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_01.template @@ -18,7 +18,7 @@ $TC p4template update action/tc_may_override_example_01/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_01/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_01/MainControlImpl/next_hop \ act name tc_may_override_example_01/MainControlImpl/default_route_drop $TC p4template update table/tc_may_override_example_01/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_01/MainControlImpl/next_hop param vport flags runtime @@ -26,7 +26,7 @@ $TC p4template update table/tc_may_override_example_01/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_01/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_01/MainControlImpl/next_hop \ act name tc_may_override_example_01/MainControlImpl/drop $TC p4template update table/tc_may_override_example_01/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_01/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_02.template b/testdata/p4tc_samples_outputs/tc_may_override_example_02.template index b10474c2a7e..2e7c096e2f5 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_02.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_02.template @@ -18,7 +18,7 @@ $TC p4template update action/tc_may_override_example_02/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_02/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_02/MainControlImpl/next_hop \ act name tc_may_override_example_02/MainControlImpl/dflt_route_drop $TC p4template update table/tc_may_override_example_02/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_02/MainControlImpl/dflt_route_drop @@ -26,7 +26,7 @@ $TC p4template update table/tc_may_override_example_02/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_02/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_02/MainControlImpl/next_hop \ act name tc_may_override_example_02/MainControlImpl/drop $TC p4template update table/tc_may_override_example_02/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_02/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_03.template b/testdata/p4tc_samples_outputs/tc_may_override_example_03.template index 12237d5f65b..308a064549f 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_03.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_03.template @@ -17,7 +17,7 @@ $TC p4template update action/tc_may_override_example_03/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_03/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_03/MainControlImpl/next_hop flags defaultonly \ act name tc_may_override_example_03/MainControlImpl/dflt_route_drop $TC p4template update table/tc_may_override_example_03/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_03/MainControlImpl/next_hop @@ -25,7 +25,7 @@ $TC p4template update table/tc_may_override_example_03/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_03/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_03/MainControlImpl/next_hop flags defaultonly \ act name tc_may_override_example_03/MainControlImpl/drop $TC p4template update table/tc_may_override_example_03/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_03/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_04.template b/testdata/p4tc_samples_outputs/tc_may_override_example_04.template index 13d0dc0f833..beb9ad84896 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_04.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_04.template @@ -18,7 +18,7 @@ $TC p4template update action/tc_may_override_example_04/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_04/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_04/MainControlImpl/next_hop \ act name tc_may_override_example_04/MainControlImpl/default_route_drop $TC p4template update table/tc_may_override_example_04/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_04/MainControlImpl/next_hop param ipv4addr flags runtime @@ -26,7 +26,7 @@ $TC p4template update table/tc_may_override_example_04/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_04/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_04/MainControlImpl/next_hop \ act name tc_may_override_example_04/MainControlImpl/drop $TC p4template update table/tc_may_override_example_04/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_04/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_05.template b/testdata/p4tc_samples_outputs/tc_may_override_example_05.template index c641e7625c7..a7e66a65ecb 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_05.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_05.template @@ -18,7 +18,7 @@ $TC p4template update action/tc_may_override_example_05/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_05/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_05/MainControlImpl/next_hop \ act name tc_may_override_example_05/MainControlImpl/default_route_drop $TC p4template update table/tc_may_override_example_05/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_05/MainControlImpl/next_hop param vport flags runtime @@ -26,7 +26,7 @@ $TC p4template update table/tc_may_override_example_05/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_05/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_05/MainControlImpl/next_hop \ act name tc_may_override_example_05/MainControlImpl/drop $TC p4template update table/tc_may_override_example_05/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_05/MainControlImpl/drop diff --git a/testdata/p4tc_samples_outputs/tc_may_override_example_06.template b/testdata/p4tc_samples_outputs/tc_may_override_example_06.template index 67622f6f9f9..8e8b6429d93 100755 --- a/testdata/p4tc_samples_outputs/tc_may_override_example_06.template +++ b/testdata/p4tc_samples_outputs/tc_may_override_example_06.template @@ -18,7 +18,7 @@ $TC p4template update action/tc_may_override_example_06/MainControlImpl/drop sta $TC p4template create table/tc_may_override_example_06/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 64 nummasks 8 tentries 2048 \ + keysz 64 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_06/MainControlImpl/next_hop \ act name tc_may_override_example_06/MainControlImpl/default_route_drop $TC p4template update table/tc_may_override_example_06/MainControlImpl/ipv4_tbl_1 default_miss_action action tc_may_override_example_06/MainControlImpl/next_hop param vport flags runtime @@ -26,7 +26,7 @@ $TC p4template update table/tc_may_override_example_06/MainControlImpl/ipv4_tbl_ $TC p4template create table/tc_may_override_example_06/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 72 nummasks 8 tentries 2048 \ + keysz 72 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_may_override_example_06/MainControlImpl/next_hop \ act name tc_may_override_example_06/MainControlImpl/drop $TC p4template update table/tc_may_override_example_06/MainControlImpl/ipv4_tbl_2 default_miss_action action tc_may_override_example_06/MainControlImpl/next_hop param vport flags runtime diff --git a/testdata/p4tc_samples_outputs/tc_type_annotation_example.template b/testdata/p4tc_samples_outputs/tc_type_annotation_example.template index c0c34dc689e..79ae05446d5 100755 --- a/testdata/p4tc_samples_outputs/tc_type_annotation_example.template +++ b/testdata/p4tc_samples_outputs/tc_type_annotation_example.template @@ -16,12 +16,12 @@ $TC p4template update action/tc_type_annotation_example/MainControlImpl/default_ $TC p4template create table/tc_type_annotation_example/MainControlImpl/ipv4_tbl_1 \ tblid 1 \ type exact \ - keysz 32 nummasks 8 tentries 2048 \ + keysz 32 nummasks 8 permissions 0x25a4 tentries 2048 \ table_acts act name tc_type_annotation_example/MainControlImpl/next_hop \ act name tc_type_annotation_example/MainControlImpl/default_route_drop $TC p4template create table/tc_type_annotation_example/MainControlImpl/ipv4_tbl_2 \ tblid 2 \ type exact \ - keysz 3 nummasks 8 tentries 1024 + keysz 3 nummasks 8 permissions 0x25a4 tentries 1024 $TC p4template update pipeline/tc_type_annotation_example state ready \ No newline at end of file diff --git a/testdata/p4tc_samples_outputs/test_ipv6_example.template b/testdata/p4tc_samples_outputs/test_ipv6_example.template index 271c2adeb7f..45fe376bc18 100755 --- a/testdata/p4tc_samples_outputs/test_ipv6_example.template +++ b/testdata/p4tc_samples_outputs/test_ipv6_example.template @@ -12,7 +12,7 @@ $TC p4template update action/test_ipv6_example/MainControlImpl/set_dst state act $TC p4template create table/test_ipv6_example/MainControlImpl/tbl_default \ tblid 1 \ type exact \ - keysz 128 nummasks 8 tentries 100 \ + keysz 128 nummasks 8 permissions 0x25a4 tentries 100 \ table_acts act name test_ipv6_example/MainControlImpl/set_dst $TC p4template update table/test_ipv6_example/MainControlImpl/tbl_default default_miss_action action test_ipv6_example/MainControlImpl/set_dst param addr6 0xffff111122223333444455556666aaaa $TC p4template update pipeline/test_ipv6_example state ready \ No newline at end of file