diff --git a/.github/workflows/ci-test-debian.yml b/.github/workflows/ci-test-debian.yml index c48dbed76e7..44e4332de8e 100644 --- a/.github/workflows/ci-test-debian.yml +++ b/.github/workflows/ci-test-debian.yml @@ -22,6 +22,8 @@ jobs: CTEST_PARALLEL_LEVEL: 4 IMAGE_TYPE: test BUILD_GENERATOR: Ninja + SUPPORT_P4_14: ON + steps: - uses: actions/checkout@v6 with: diff --git a/BUILD.bazel b/BUILD.bazel index d730aad2276..213c743e3df 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -10,6 +10,15 @@ package( default_visibility = ["//visibility:public"], ) +# Configuration setting to enable P4-14 support via --define=SUPPORT_P4_14=true +config_setting( + name = "p4_14_enabled", + define_values = { + "SUPPORT_P4_14": "true", + }, + visibility = ["//visibility:public"], +) + license( name = "license", package_name = "com_github_p4lang_p4c", @@ -71,6 +80,7 @@ cc_library( ], ) +# P4-16 parser. genyacc( name = "p4_parser_yacc", src = "frontends/parsers/p4/p4parser.ypp", @@ -80,6 +90,7 @@ genyacc( visibility = ["//visibility:private"], ) +# P4-14 parser. genyacc( name = "v1_parser_yacc", src = "frontends/parsers/v1/v1parser.ypp", @@ -89,6 +100,7 @@ genyacc( visibility = ["//visibility:private"], ) +# P4-16 lexer. genrule( name = "p4lexer_lex", srcs = ["frontends/parsers/p4/p4lexer.ll"], @@ -97,6 +109,7 @@ genrule( visibility = ["//visibility:private"], ) +# P4-16 lexer. genlex( name = "p4lexer", src = "frontends/parsers/p4/p4lexer.lex", @@ -105,6 +118,7 @@ genlex( visibility = ["//visibility:private"], ) +# P4-14 lexer. genrule( name = "v1lexer_lex", srcs = ["frontends/parsers/v1/v1lexer.ll"], @@ -113,6 +127,7 @@ genrule( visibility = ["//visibility:private"], ) +# P4-14 lexer. genlex( name = "v1lexer", src = "frontends/parsers/v1/v1lexer.lex", @@ -172,8 +187,11 @@ cc_binary( filegroup( name = "ir_extra_defs", - srcs = [ - "frontends/p4-14/ir-v1.def", + srcs = select({ + # Conditionally include the P4-14 IR definition file. + ":p4_14_enabled": ["frontends/p4-14/ir-v1.def"], + "//conditions:default": [], + }) + [ "backends/bmv2/bmv2.def", "backends/dpdk/dpdk.def", "//backends/p4tools:ir_extension", @@ -205,25 +223,49 @@ genrule( visibility = ["//visibility:private"], ) -# It would be better to build these modules separately, but they have cyclic -# dependencies. -cc_library( - name = "ir_frontend_midend_control_plane", - srcs = glob([ +# Define the srcs list in a variable for readability +IR_FRONTEND_MIDEND_CONTROL_PLANE_SRCS = glob( + [ "ir/**/*.cpp", - "frontends/**/*.cpp", "midend/**/*.cpp", "control-plane/**/*.cpp", - ]) + [ - "backends/dpdk/dbprint-dpdk.cpp", - "backends/dpdk/printUtils.cpp", - "backends/dpdk/spec.cpp", - "frontends/parsers/p4/p4lexer.cc", - "frontends/parsers/p4/p4parser.cc", + ], +) + [ + # Back end files. + "backends/dpdk/dbprint-dpdk.cpp", + "backends/dpdk/printUtils.cpp", + "backends/dpdk/spec.cpp", + "frontends/parsers/p4/p4lexer.cc", + "frontends/parsers/p4/p4parser.cc", + "ir/ir-generated.cpp", +] + select({ + # Conditionally select the glob for frontend C++ files. + ":p4_14_enabled": [ "frontends/parsers/v1/v1lexer.cc", "frontends/parsers/v1/v1parser.cc", - "ir/ir-generated.cpp", - ], + ] + glob(["frontends/**/*.cpp"]), + "//conditions:default": glob( + ["frontends/**/*.cpp"], + exclude = [ + "frontends/parsers/parserDriver_v1.cpp", + "frontends/parsers/v1/v1lexer.cc", + "frontends/parsers/v1/v1parser.cc", + "frontends/p4-14/**/*.cpp", + "frontends/parsers/v1/**/*.cpp", + ], + ), +}) + +# It would be better to build these modules separately, but they have cyclic +# dependencies. +cc_library( + name = "ir_frontend_midend_control_plane", + srcs = IR_FRONTEND_MIDEND_CONTROL_PLANE_SRCS, + defines = select({ + # Define SUPPORT_P4_14 for C++ code when the flag is set. + ":p4_14_enabled": ["SUPPORT_P4_14"], + "//conditions:default": [], + }), textual_hdrs = glob([ "ir/**/*.h", "frontends/**/*.h", @@ -233,11 +275,16 @@ cc_library( "backends/**/*.h", ]) + [ ":p4_parser_yacc", - ":v1_parser_yacc", ":p4lexer", - ":v1lexer", ":ir_generated_files", - ], + ] + select({ + # Conditionally include the P4-14 IR definition file. + ":p4_14_enabled": [ + ":v1_parser_yacc", + ":v1lexer", + ], + "//conditions:default": [], + }), deps = [ ":config_h", ":lib", @@ -476,9 +523,6 @@ cc_library( "backends/graphs/version.h", ], defines = [ - # Disable ADL for boost, otherwise the method resolution for - # `ordered_map` and `graph` clash on method `boost::get` - "BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP", ], deps = [ ":config_h", diff --git a/CMakeLists.txt b/CMakeLists.txt index 516ecdaf2bd..fa78638c267 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,6 +72,12 @@ OPTION (BUILD_AUTO_VAR_INIT_PATTERN "Initialize variables with pattern during bu OPTION (ENABLE_IWYU "Enable checking includes with IWYU" OFF) # Support a legacy option. TODO: Remove? OPTION (ENABLE_UNIFIED_COMPILATION "Enable CMAKE_UNITY_BUILD" OFF) +# Support compilation for the legacy P4-14 language. +OPTION (SUPPORT_P4_14 "Support the deprecated P4_14 version of the language" OFF) +# Tofino requires P4-14 support. +if (ENABLE_TOFINO) + set (SUPPORT_P4_14 ON) +endif() # Enable DumpPipe pass output OPTION(ENABLE_DUMP_PIPE "Enable DumpPipe pass output" ON) @@ -172,7 +178,7 @@ if(STATIC_BUILD_WITH_DYNAMIC_GLIBC OR STATIC_BUILD_WITH_DYNAMIC_STDLIB) if (NOT STATIC_BUILD_WITH_DYNAMIC_STDLIB) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++") endif() - add_definitions(-DP4C_STATIC_BUILD) + add_definitions("-DP4C_STATIC_BUILD") endif() # Ensure we enable sanitizers before fetching dependencies so the correct flags @@ -198,6 +204,9 @@ endif () if (ENABLE_DUMP_PIPE) add_definitions("-DENABLE_DUMP_PIPE=1") endif () +if (SUPPORT_P4_14) + add_definitions("-DSUPPORT_P4_14=1") +endif () # Required tools and libraries. find_package (PythonInterp 3 REQUIRED) @@ -235,7 +244,7 @@ if (ENABLE_GC) p4c_obtain_bdwgc() endif () if (ENABLE_MULTITHREAD) - add_definitions(-DMULTITHREAD) + add_definitions("-DMULTITHREAD") endif() list (APPEND P4C_LIB_DEPS ${CMAKE_THREAD_LIBS_INIT}) include_directories(SYSTEM ${Boost_INCLUDE_DIRS}) diff --git a/Dockerfile b/Dockerfile index 92215d07ad2..021d5a6b45c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,8 @@ ARG COMPILE_WITH_CLANG=OFF ARG ENABLE_SANITIZERS=OFF # Only execute the steps necessary to successfully run CMake. ARG CMAKE_ONLY=OFF +# Support P4-14 in the compiler (legacy). +ARG SUPPORT_P4_14=OFF # Build with -ftrivial-auto-var-init=pattern to catch more bugs caused by # uninitialized variables. ARG BUILD_AUTO_VAR_INIT_PATTERN=OFF diff --git a/backends/bmv2/CMakeLists.txt b/backends/bmv2/CMakeLists.txt index 2e2351426a9..75cb5fbf7b0 100644 --- a/backends/bmv2/CMakeLists.txt +++ b/backends/bmv2/CMakeLists.txt @@ -139,11 +139,17 @@ add_custom_target(linkbmv2 COMMAND ${CMAKE_COMMAND} -E create_symlink ${CURRENT_BINARY_DIR_PATH_REL}/p4c-bm2-psa ${P4C_BINARY_DIR}/p4c-bm2-psa COMMAND ${CMAKE_COMMAND} -E create_symlink ${CURRENT_BINARY_DIR_PATH_REL}/p4c-bm2-pna ${P4C_BINARY_DIR}/p4c-bm2-pna COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4include ${CMAKE_CURRENT_BINARY_DIR}/p4include - COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4_14include ${CMAKE_CURRENT_BINARY_DIR}/p4_14include DEPENDS update_includes ) add_dependencies(p4c_driver linkbmv2) +if (SUPPORT_P4_14) +add_custom_target(linkp414bmv2 + COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4_14include ${CMAKE_CURRENT_BINARY_DIR}/p4_14include + DEPENDS update_includes + ) +add_dependencies(p4c_driver linkp414bmv2) +endif() # Tests set(BMV2_DRIVER ${CMAKE_CURRENT_SOURCE_DIR}/run-bmv2-test.py) @@ -159,11 +165,16 @@ set (BMV2_V1MODEL_TEST_SUITES "${P4C_SOURCE_DIR}/testdata/p4_16_samples/fabric_*/fabric.p4" "${P4C_SOURCE_DIR}/testdata/p4_16_samples/omec/*.p4" "${P4C_SOURCE_DIR}/testdata/p4_16_samples/pins/*.p4" - "${P4C_SOURCE_DIR}/testdata/p4_14_samples/switch_*/switch.p4" - "${P4C_SOURCE_DIR}/testdata/p4_14_samples/*.p4" ${v1tests} ) +if (SUPPORT_P4_14) + list(APPEND BMV2_V1MODEL_TEST_SUITES + "${P4C_SOURCE_DIR}/testdata/p4_14_samples/switch_*/switch.p4" + "${P4C_SOURCE_DIR}/testdata/p4_14_samples/*.p4" + ) +endif() + set (PSA_INCLUDE_PATTERNS "include.*psa.p4") set (PSA_EXCLUDE_PATTERNS "include.*v1model.p4" "include.*dpdk") set (P4TESTS_FOR_PSA @@ -209,10 +220,6 @@ set (testExtraFlagsPNA "${testExtraFlags} --use_pna -a='--target bmv2 --arch pna set (XFAIL_TESTS # This test defines two lpm keys for a table. # Even though the P4 spec allows it, it doesn't really make sense in a switch - # so we allow it to fail on BMv2. - testdata/p4_14_samples/issue60.p4 - # compiler claims (incorrectly?) that c2 has mulitple successors, so is not supported - testdata/p4_14_samples/issue-1426.p4 # This test uses a feature currently unsupported in the BMv2 back-end. testdata/p4_16_samples/issue907-bmv2.p4 # This test uses a table graph that is not implementable in BMv2 @@ -221,8 +228,6 @@ set (XFAIL_TESTS testdata/p4_16_samples/issue1062-bmv2.p4 # This test uses an undefined extern testdata/p4_16_samples/issue1193-bmv2.p4 - # This test also uses a custom extern - testdata/p4_14_samples/issue604.p4 # This test uses an incorrect model testdata/p4_16_samples/issue1205-bmv2.p4 # These psa tests are not ready to run on bmv2 yet @@ -255,6 +260,16 @@ set (XFAIL_TESTS testdata/p4_16_samples/pna-example-tcp-connection-tracking.p4 # Conditional execution in actions not supported testdata/p4_16_samples/pna-extract-local-header.p4 # error: IfStatement: not supported within a deparser on this target ) +if (SUPPORT_P4_14) + list(APPEND XFAIL_TESTS + # so we allow it to fail on BMv2. + testdata/p4_14_samples/issue60.p4 + # compiler claims (incorrectly?) that c2 has mulitple successors, so is not supported + testdata/p4_14_samples/issue-1426.p4 + # This test also uses a custom extern + testdata/p4_14_samples/issue604.p4 + ) +endif() set (BMV2_PARSER_INLINE_TESTS "${P4C_SOURCE_DIR}/testdata/p4_16_samples/parser-inline/*.p4") diff --git a/backends/bmv2/common/backend.h b/backends/bmv2/common/backend.h index 89d93c6a92f..bb0bbda49dc 100644 --- a/backends/bmv2/common/backend.h +++ b/backends/bmv2/common/backend.h @@ -76,7 +76,9 @@ class Backend { enumMap(enumMap), corelib(P4::P4CoreLibrary::instance()), json(new BMV2::JsonObjects()) { +#ifdef SUPPORT_P4_14 refMap->setIsV1(options.isv1()); +#endif } void serialize(std::ostream &out) const { json->toplevel->serialize(out); } virtual void convert(const IR::ToplevelBlock *block) = 0; diff --git a/backends/bmv2/common/controlFlowGraph.cpp b/backends/bmv2/common/controlFlowGraph.cpp index ffbdbb9562b..28ecb4a8bed 100644 --- a/backends/bmv2/common/controlFlowGraph.cpp +++ b/backends/bmv2/common/controlFlowGraph.cpp @@ -17,7 +17,6 @@ limitations under the License. #include "controlFlowGraph.h" #include "frontends/common/resolveReferences/referenceMap.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/methodInstance.h" #include "frontends/p4/tableApply.h" #include "frontends/p4/typeMap.h" diff --git a/backends/bmv2/common/extern.cpp b/backends/bmv2/common/extern.cpp index b4e06af92ca..e32eb11efe3 100644 --- a/backends/bmv2/common/extern.cpp +++ b/backends/bmv2/common/extern.cpp @@ -16,7 +16,6 @@ limitations under the License. #include "extern.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "lib/json.h" namespace P4::BMV2 { @@ -222,14 +221,16 @@ cstring ExternConverter::createCalculation(ConversionContext *ctxt, cstring algo } cstring ExternConverter::convertHashAlgorithm(cstring algorithm) { - if (algorithm == P4V1::V1Model::instance.algorithm.crc32.name) return "crc32"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.crc32_custom.name) return "crc32_custom"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.crc16.name) return "crc16"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.crc16_custom.name) return "crc16_custom"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.random.name) return "random"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.identity.name) return "identity"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.csum16.name) return "csum16"_cs; - if (algorithm == P4V1::V1Model::instance.algorithm.xor16.name) return "xor16"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.crc32.name) return "crc32"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.crc32_custom.name) + return "crc32_custom"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.crc16.name) return "crc16"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.crc16_custom.name) + return "crc16_custom"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.random.name) return "random"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.identity.name) return "identity"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.csum16.name) return "csum16"_cs; + if (algorithm == P4V1::V1Model::instance().algorithm.xor16.name) return "xor16"_cs; ::P4::error(ErrorType::ERR_UNSUPPORTED, "Unsupported algorithm %1%", algorithm); return cstring::empty; diff --git a/backends/bmv2/common/extern.h b/backends/bmv2/common/extern.h index 2ecac3f8af4..b384cddb87e 100644 --- a/backends/bmv2/common/extern.h +++ b/backends/bmv2/common/extern.h @@ -72,8 +72,8 @@ class ExternConverter { #define EXTERN_CONVERTER_W_FUNCTION_AND_MODEL(extern_name, model_type, model_name) \ class ExternConverter_##extern_name : public ExternConverter { \ - model_type &model_name; \ - ExternConverter_##extern_name() : model_name(model_type::instance) { \ + const model_type &model_name; \ + ExternConverter_##extern_name() : model_name(model_type::instance()) { \ registerExternConverter(cstring(#extern_name), this); \ } \ static ExternConverter_##extern_name singleton; \ @@ -95,8 +95,8 @@ class ExternConverter { #define EXTERN_CONVERTER_W_INSTANCE_AND_MODEL(extern_name, model_type, model_name) \ class ExternConverter_##extern_name : public ExternConverter { \ - model_type &model_name; \ - ExternConverter_##extern_name() : model_name(model_type::instance) { \ + const model_type &model_name; \ + ExternConverter_##extern_name() : model_name(model_type::instance()) { \ registerExternConverter(cstring(#extern_name), this); \ } \ static ExternConverter_##extern_name singleton; \ @@ -114,8 +114,8 @@ class ExternConverter { #define EXTERN_CONVERTER_W_OBJECT_AND_INSTANCE_AND_MODEL(extern_name, type, name) \ class ExternConverter_##extern_name : public ExternConverter { \ - type &name; \ - ExternConverter_##extern_name() : name(type::instance) { \ + const type &name; \ + ExternConverter_##extern_name() : name(type::instance()) { \ registerExternConverter(cstring(#extern_name), this); \ } \ static ExternConverter_##extern_name singleton; \ diff --git a/backends/bmv2/common/helpers.h b/backends/bmv2/common/helpers.h index 98c81f8a450..3bd3b0ccb10 100644 --- a/backends/bmv2/common/helpers.h +++ b/backends/bmv2/common/helpers.h @@ -18,11 +18,11 @@ limitations under the License. #define BACKENDS_BMV2_COMMON_HELPERS_H_ #include "JsonObjects.h" +#include "backends/bmv2/common/v1model.h" #include "backends/common/programStructure.h" #include "controlFlowGraph.h" #include "expression.h" #include "frontends/common/model.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "ir/ir.h" #include "lib/cstring.h" #include "lib/json.h" @@ -90,9 +90,9 @@ template <> struct ActionProfileTraits { static const cstring name() { return "action profile"_cs; } static const cstring propertyName() { - return P4V1::V1Model::instance.tableAttributes.tableImplementation.name; + return P4V1::V1Model::instance().tableAttributes.tableImplementation.name; } - static const cstring typeName() { return P4V1::V1Model::instance.action_profile.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_profile.name; } static const cstring sizeParamName() { return "size"_cs; } }; @@ -118,7 +118,7 @@ struct ActionSelectorTraits; template <> struct ActionSelectorTraits : public ActionProfileTraits { static const cstring name() { return "action selector"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.action_selector.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_selector.name; } }; template <> @@ -140,7 +140,7 @@ struct RegisterTraits; template <> struct RegisterTraits { static const cstring name() { return "register"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.registers.name; } + static const cstring typeName() { return P4V1::V1Model::instance().registers.name; } static const cstring sizeParamName() { return "size"_cs; } /// the index of the type parameter for the data stored in the register, in /// the type parameter list of the extern type declaration. @@ -198,10 +198,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "counter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.counters.name; + return P4V1::V1Model::instance().tableAttributes.counters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.counter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directCounter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().counter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directCounter.name; } static const cstring sizeParamName() { return "size"_cs; } static std::optional indexTypeParamIdx() { return std::nullopt; } }; @@ -210,10 +210,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "counter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.counters.name; + return P4V1::V1Model::instance().tableAttributes.counters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.counter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directCounter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().counter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directCounter.name; } static const cstring sizeParamName() { return "size"_cs; } static std::optional indexTypeParamIdx() { return 0; } }; @@ -243,10 +243,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "meter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.meters.name; + return P4V1::V1Model::instance().tableAttributes.meters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.meter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directMeter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().meter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directMeter.name; } static const cstring sizeParamName() { return "size"_cs; } static std::optional indexTypeParamIdx() { return std::nullopt; } }; @@ -255,10 +255,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "meter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.meters.name; + return P4V1::V1Model::instance().tableAttributes.meters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.meter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directMeter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().meter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directMeter.name; } static const cstring sizeParamName() { return "size"_cs; } static std::optional indexTypeParamIdx() { return 0; } }; diff --git a/backends/bmv2/common/lower.cpp b/backends/bmv2/common/lower.cpp index accb9a3c9a9..d6290d4db81 100644 --- a/backends/bmv2/common/lower.cpp +++ b/backends/bmv2/common/lower.cpp @@ -16,7 +16,7 @@ limitations under the License. #include "lower.h" -#include "frontends/p4-14/fromv1.0/v1model.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/p4/coreLibrary.h" #include "frontends/p4/methodInstance.h" #include "lib/big_int_util.h" @@ -176,7 +176,7 @@ const IR::Node *RemoveComplexExpressions::postorder(IR::MethodCallExpression *ex if (mi->isApply() || mi->is()) return expression; if (auto ef = mi->to()) { - if (ef->method->name == P4V1::V1Model::instance.digest_receiver.name) { + if (ef->method->name == P4V1::V1Model::instance().digest_receiver.name) { // Special handling for digest; the semantics on bmv2 is to // execute the digest at the very end of the pipeline, and to // pass a reference to the fields, so fields can be modified diff --git a/backends/bmv2/common/midend.h b/backends/bmv2/common/midend.h index a8de8ec0416..71b482e6d5d 100644 --- a/backends/bmv2/common/midend.h +++ b/backends/bmv2/common/midend.h @@ -54,11 +54,14 @@ class MidEnd : public PassManager { P4::TypeMap typeMap; const IR::ToplevelBlock *toplevel = nullptr; P4::ConvertEnums::EnumMapping enumMap; +#ifdef SUPPORT_P4_14 bool isv1; - explicit MidEnd(CompilerOptions &options) { isv1 = options.isv1(); refMap.setIsV1(isv1); // must be done BEFORE creating passes +#else + explicit MidEnd(CompilerOptions & /*options*/) { +#endif } const IR::ToplevelBlock *process(const IR::P4Program *&program) { program = program->apply(*this); diff --git a/backends/bmv2/common/parser.cpp b/backends/bmv2/common/parser.cpp index 7afb9103caf..14237f3ccf8 100644 --- a/backends/bmv2/common/parser.cpp +++ b/backends/bmv2/common/parser.cpp @@ -18,8 +18,8 @@ limitations under the License. #include "JsonObjects.h" #include "backend.h" +#include "backends/bmv2/common/v1model.h" #include "extern.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/coreLibrary.h" #include "lib/algorithm.h" @@ -273,7 +273,7 @@ Util::IJson *ParserConverter::convertParserStatement(const IR::StatOrDecl *stat) paramsArray->append(expr); paramValue->emplace("op", extFuncName); paramValue->emplace_non_null("source_info"_cs, mce->sourceInfoJsonObj()); - } else if (extFuncName == P4V1::V1Model::instance.log_msg.name) { + } else if (extFuncName == P4V1::V1Model::instance().log_msg.name) { BUG_CHECK(mce->arguments->size() == 2 || mce->arguments->size() == 1, "%1%: Expected 1 or 2 arguments", mce); result->emplace("op", "primitive"); diff --git a/frontends/p4-14/fromv1.0/v1model.h b/backends/bmv2/common/v1model.h similarity index 97% rename from frontends/p4-14/fromv1.0/v1model.h rename to backends/bmv2/common/v1model.h index faf3bd1353f..4767a7983de 100644 --- a/frontends/p4-14/fromv1.0/v1model.h +++ b/backends/bmv2/common/v1model.h @@ -14,8 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. */ -#ifndef FRONTENDS_P4_14_FROMV1_0_V1MODEL_H_ -#define FRONTENDS_P4_14_FROMV1_0_V1MODEL_H_ +#ifndef BACKENDS_BMV2_COMMON_V1MODEL_H_ +#define BACKENDS_BMV2_COMMON_V1MODEL_H_ #include "frontends/common/model.h" #include "frontends/p4/coreLibrary.h" @@ -345,12 +345,16 @@ class V1Model : public Model::Model { const DirectMeter_Model directMeter; const DirectCounter_Model directCounter; - static V1Model instance; // The following match constants appearing in v1model.p4 - static const char *versionInitial; // 20180101 - static const char *versionCurrent; // 20200408 + static constexpr const char *versionInitial = "20180101"; + static constexpr const char *versionCurrent = "20200408"; + + static const V1Model &instance() { + static V1Model INSTANCE; + return INSTANCE; + } }; } // namespace P4::P4V1 -#endif /* FRONTENDS_P4_14_FROMV1_0_V1MODEL_H_ */ +#endif /* BACKENDS_BMV2_COMMON_V1MODEL_H_ */ diff --git a/backends/bmv2/pna_nic/midend.cpp b/backends/bmv2/pna_nic/midend.cpp index 90853ab3ffd..738d5ef7a1a 100644 --- a/backends/bmv2/pna_nic/midend.cpp +++ b/backends/bmv2/pna_nic/midend.cpp @@ -17,10 +17,10 @@ limitations under the License. #include "midend.h" #include "backends/bmv2/common/check_unsupported.h" +#include "backends/bmv2/common/v1model.h" #include "backends/bmv2/pna_nic/options.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" diff --git a/backends/bmv2/portable_common/midend.cpp b/backends/bmv2/portable_common/midend.cpp index fdb06feac04..6b5685cfa87 100644 --- a/backends/bmv2/portable_common/midend.cpp +++ b/backends/bmv2/portable_common/midend.cpp @@ -17,10 +17,10 @@ limitations under the License. #include "midend.h" #include "backends/bmv2/common/check_unsupported.h" +#include "backends/bmv2/common/v1model.h" #include "backends/bmv2/portable_common/options.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" diff --git a/backends/bmv2/psa_switch/midend.cpp b/backends/bmv2/psa_switch/midend.cpp index f763a6bdc94..bb21d951f2c 100644 --- a/backends/bmv2/psa_switch/midend.cpp +++ b/backends/bmv2/psa_switch/midend.cpp @@ -17,10 +17,10 @@ limitations under the License. #include "midend.h" #include "backends/bmv2/common/check_unsupported.h" +#include "backends/bmv2/common/v1model.h" #include "backends/bmv2/psa_switch/options.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" diff --git a/backends/bmv2/simple_switch/midend.cpp b/backends/bmv2/simple_switch/midend.cpp index fe734c8970c..b5250604aa6 100644 --- a/backends/bmv2/simple_switch/midend.cpp +++ b/backends/bmv2/simple_switch/midend.cpp @@ -17,10 +17,10 @@ limitations under the License. #include "midend.h" #include "backends/bmv2/common/check_unsupported.h" +#include "backends/bmv2/common/v1model.h" #include "backends/bmv2/simple_switch/options.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" @@ -132,9 +132,11 @@ SimpleSwitchMidEnd::SimpleSwitchMidEnd(CompilerOptions &options, std::ostream *o new P4::TableHit(&typeMap), new P4::EliminateSwitch(&typeMap), new P4::RemoveLeftSlices(&typeMap), - // p4c-bm removed unused action parameters. To produce a compatible - // control plane API, we remove them as well for P4-14 programs. +// p4c-bm removed unused action parameters. To produce a compatible +// control plane API, we remove them as well for P4-14 programs. +#ifdef SUPPORT_P4_14 {isv1 ? new P4::RemoveUnusedActionParameters(&refMap) : nullptr}, +#endif new P4::TypeChecking(&refMap, &typeMap), {options.loopsUnrolling ? new P4::ParsersUnroll(config, &refMap, &typeMap) : nullptr}, evaluator, diff --git a/backends/bmv2/simple_switch/simpleSwitch.cpp b/backends/bmv2/simple_switch/simpleSwitch.cpp index d712d97c955..a6a9ce63ba4 100644 --- a/backends/bmv2/simple_switch/simpleSwitch.cpp +++ b/backends/bmv2/simple_switch/simpleSwitch.cpp @@ -23,7 +23,6 @@ limitations under the License. #include "backends/bmv2/common/annotations.h" #include "backends/bmv2/simple_switch/options.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/cloner.h" #include "lib/json.h" #include "midend/flattenLogMsg.h" diff --git a/backends/bmv2/simple_switch/simpleSwitch.h b/backends/bmv2/simple_switch/simpleSwitch.h index 30725e7f0cb..7673fb9fcc9 100644 --- a/backends/bmv2/simple_switch/simpleSwitch.h +++ b/backends/bmv2/simple_switch/simpleSwitch.h @@ -32,7 +32,6 @@ limitations under the License. #include "backends/bmv2/common/sharedActionSelectorCheck.h" #include "backends/common/programStructure.h" #include "frontends/common/constantFolding.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/simplify.h" #include "frontends/p4/unusedDeclarations.h" @@ -128,18 +127,18 @@ class SimpleSwitchExpressionConverter : public ExpressionConverter { class ParseV1Architecture : public Inspector { V1ProgramStructure *structure; - P4V1::V1Model &v1model; + const P4V1::V1Model &v1model; public: explicit ParseV1Architecture(V1ProgramStructure *structure) - : structure(structure), v1model(P4V1::V1Model::instance) {} + : structure(structure), v1model(P4V1::V1Model::instance()) {} void modelError(const char *format, const IR::Node *node); bool preorder(const IR::PackageBlock *block) override; }; class SimpleSwitchBackend : public Backend { BMV2Options &options; - P4V1::V1Model &v1model; + const P4V1::V1Model &v1model; V1ProgramStructure *structure = nullptr; ExpressionConverter *conv = nullptr; @@ -160,7 +159,7 @@ class SimpleSwitchBackend : public Backend { P4::ConvertEnums::EnumMapping *enumMap) : Backend(options, refMap, typeMap, enumMap), options(options), - v1model(P4V1::V1Model::instance) {} + v1model(P4V1::V1Model::instance()) {} }; EXTERN_CONVERTER_W_FUNCTION(clone) diff --git a/backends/dpdk/midend.cpp b/backends/dpdk/midend.cpp index a0f44ebc5eb..48ba97d1aa6 100644 --- a/backends/dpdk/midend.cpp +++ b/backends/dpdk/midend.cpp @@ -16,10 +16,10 @@ limitations under the License. #include "midend.h" +#include "backends/bmv2/common/v1model.h" #include "dpdkArch.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" diff --git a/backends/dpdk/options.cpp b/backends/dpdk/options.cpp index bb1cd0be3dc..9d7caf0e843 100644 --- a/backends/dpdk/options.cpp +++ b/backends/dpdk/options.cpp @@ -27,13 +27,21 @@ std::vector *DpdkOptions::process(int argc, char *const argv[]) { // TODO: Store include paths as std::vector and convert // to a "-I"-separated string only when building the preprocessor command. const char *DpdkOptions::getIncludePath() const { +#ifdef SUPPORT_P4_14 char *driverP4IncludePath = isv1() ? getenv("P4C_14_INCLUDE_PATH") : getenv("P4C_16_INCLUDE_PATH"); +#else + char *driverP4IncludePath = getenv("P4C_16_INCLUDE_PATH"); +#endif cstring path = cstring::empty; if (driverP4IncludePath != nullptr) path += " -I"_cs + cstring(driverP4IncludePath); - +#ifdef SUPPORT_P4_14 path += " -I"_cs + (isv1() ? p4_14includePath.string() : p4includePath.string()); if (!isv1()) path += " -I"_cs + (p4includePath / "dpdk").string(); +#else + path += " -I"_cs + p4includePath.string(); + path += " -I"_cs + (p4includePath / "dpdk").string(); +#endif return path.c_str(); } diff --git a/backends/ebpf/midend.cpp b/backends/ebpf/midend.cpp index 49e799eb0f9..1614f257876 100644 --- a/backends/ebpf/midend.cpp +++ b/backends/ebpf/midend.cpp @@ -72,8 +72,6 @@ const IR::ToplevelBlock *MidEnd::run(EbpfOptions &options, const IR::P4Program * std::ostream *outStream) { if (program == nullptr && options.listMidendPasses == 0) return nullptr; - bool isv1 = options.langVersion == CompilerOptions::FrontendVersion::P4_14; - refMap.setIsV1(isv1); auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); PassManager midEnd = {}; diff --git a/backends/ebpf/psa/backend.h b/backends/ebpf/psa/backend.h index 0f3f1e1c99d..d0e397f2469 100644 --- a/backends/ebpf/psa/backend.h +++ b/backends/ebpf/psa/backend.h @@ -38,9 +38,7 @@ class PSASwitchBackend { refMap(refMap), typeMap(typeMap), corelib(P4::P4CoreLibrary::instance()), - target(target) { - refMap->setIsV1(options.isv1()); - } + target(target) {} void convert(const IR::ToplevelBlock *tlb); void codegen(std::ostream &cstream) const { diff --git a/backends/graphs/p4c-graphs.cpp b/backends/graphs/p4c-graphs.cpp index 85ce5c7f09b..8151e2b584e 100644 --- a/backends/graphs/p4c-graphs.cpp +++ b/backends/graphs/p4c-graphs.cpp @@ -48,9 +48,13 @@ class MidEnd : public PassManager { } }; +#ifdef SUPPORT_P4_14 MidEnd::MidEnd(CompilerOptions &options) { bool isv1 = options.langVersion == CompilerOptions::FrontendVersion::P4_14; refMap.setIsV1(isv1); +#else +MidEnd::MidEnd(CompilerOptions & /*options*/) { +#endif auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); setName("MidEnd"); diff --git a/backends/p4fmt/p4fmt.cpp b/backends/p4fmt/p4fmt.cpp index 4272b1b3e46..25bb47c8681 100644 --- a/backends/p4fmt/p4fmt.cpp +++ b/backends/p4fmt/p4fmt.cpp @@ -19,10 +19,12 @@ std::optional> pars ::P4::error(ErrorType::ERR_NOT_FOUND, "%1%: No such file found.", options.file); return std::nullopt; } +#ifdef SUPPORT_P4_14 if (options.isv1()) { ::P4::error(ErrorType::ERR_UNKNOWN, "p4fmt cannot deal with p4-14 programs."); return std::nullopt; } +#endif auto preprocessorResult = options.preprocess(); auto result = P4ParserDriver::parseProgramSources(preprocessorResult.value().get(), options.file.c_str()); diff --git a/backends/p4fmt/p4formatter.cpp b/backends/p4fmt/p4formatter.cpp index d5c3c949380..d877637526e 100644 --- a/backends/p4fmt/p4formatter.cpp +++ b/backends/p4fmt/p4formatter.cpp @@ -3,7 +3,7 @@ #include #include -#include "frontends/p4-14/fromv1.0/v1model.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/p4/getV1ModelVersion.h" #include "frontends/parsers/p4/p4parser.hpp" #include "ir/dump.h" @@ -67,7 +67,7 @@ bool P4Formatter::preorder(const IR::P4Program *program) { if (includesEmitted.count(sourceFile.string()) == 0) { if (sourceFile.parent_path() == p4includePath) { std::filesystem::path p = sourceFile.filename(); - if (P4V1::V1Model::instance.file.name == p) { + if (P4V1::V1Model::instance().file.name == p) { P4V1::GetV1ModelVersion g; program->apply(g); builder.append("#define V1MODEL_VERSION "); diff --git a/backends/p4fmt/p4formatter.h b/backends/p4fmt/p4formatter.h index e0a3c9679a0..270e1deebf2 100644 --- a/backends/p4fmt/p4formatter.h +++ b/backends/p4fmt/p4formatter.h @@ -288,9 +288,6 @@ class P4Formatter : public Inspector, ::P4::ResolutionContext { bool preorder(const IR::Entry *e) override; bool preorder(const IR::P4Table *c) override; bool preorder(const IR::P4ValueSet *c) override; - - // in case it is accidentally called on a V1Program - bool preorder(const IR::V1Program *) override { return false; } }; std::string toP4(const IR::INode *node); diff --git a/backends/p4test/CMakeLists.txt b/backends/p4test/CMakeLists.txt index 8fb7ab8579d..b7273c0ba6f 100644 --- a/backends/p4test/CMakeLists.txt +++ b/backends/p4test/CMakeLists.txt @@ -52,11 +52,18 @@ file(RELATIVE_PATH add_custom_target(linkp4test COMMAND ${CMAKE_COMMAND} -E create_symlink ${CURRENT_BINARY_DIR_PATH_REL}/p4test ${P4C_BINARY_DIR}/p4test COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4include ${CMAKE_CURRENT_BINARY_DIR}/p4include - COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4_14include ${CMAKE_CURRENT_BINARY_DIR}/p4_14include DEPENDS update_includes ) add_dependencies(p4c_driver linkp4test) +if (SUPPORT_P4_14) +add_custom_target(linkp414test + COMMAND ${CMAKE_COMMAND} -E create_symlink ${P4C_BINARY_DIR_PATH_REL}/p4_14include ${CMAKE_CURRENT_BINARY_DIR}/p4_14include + DEPENDS update_includes + ) +add_dependencies(p4c_driver linkp414test) +endif() + # Tests set(P4TEST_DRIVER ${P4C_SOURCE_DIR}/backends/p4test/run-p4-sample.py) @@ -118,13 +125,17 @@ set (P4TEST_PARSER_INLINE_TESTS "${P4C_SOURCE_DIR}/testdata/p4_16_samples/parser p4c_add_tests("p4" ${P4TEST_DRIVER} "${P4TEST_PARSER_INLINE_TESTS}" "" "-a '--maxErrorCount 100 --parser-inline-opt'") set (P4TEST_ERRORS - "${P4C_SOURCE_DIR}/testdata/p4_16_errors/*.p4" - "${P4C_SOURCE_DIR}/testdata/p4_14_errors/*.p4") + "${P4C_SOURCE_DIR}/testdata/p4_16_errors/*.p4") +if (SUPPORT_P4_14) + list(APPEND P4TEST_ERRORS "${P4C_SOURCE_DIR}/testdata/p4_14_errors/*.p4") +endif() p4c_add_tests_w_p4runtime("err" ${P4TEST_DRIVER} "${P4TEST_ERRORS}" "${P4_XFAIL_TESTS}" "${P4RUNTIME_EXCLUDE}" "-a '--maxErrorCount 100'") +if (SUPPORT_P4_14) set (P4_14_SUITES "${P4C_SOURCE_DIR}/testdata/p4_14_samples/*.p4" "${P4C_SOURCE_DIR}/testdata/p4_14_samples/switch_*/switch.p4") p4c_add_tests("p14_to_16" ${P4TEST_DRIVER} "${P4_14_SUITES}" "") - set_tests_properties("p14_to_16/testdata/p4_14_samples/switch_20160512/switch.p4" PROPERTIES TIMEOUT 1000) +endif() + diff --git a/backends/p4test/midend.cpp b/backends/p4test/midend.cpp index 1760fdeab7e..8e39426819c 100644 --- a/backends/p4test/midend.cpp +++ b/backends/p4test/midend.cpp @@ -16,9 +16,9 @@ limitations under the License. #include "midend.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" @@ -80,8 +80,10 @@ class SkipControls : public P4::ActionSynthesisPolicy { }; MidEnd::MidEnd(P4TestOptions &options, std::ostream *outStream) { +#ifdef SUPPORT_P4_14 bool isv1 = options.langVersion == CompilerOptions::FrontendVersion::P4_14; refMap.setIsV1(isv1); +#endif auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); setName("MidEnd"); @@ -152,11 +154,12 @@ MidEnd::MidEnd(P4TestOptions &options, std::ostream *outStream) { return root; } // Special handling when compiling for v1model.p4 - if (main->type->name == P4V1::V1Model::instance.sw.name) { + if (main->type->name == P4V1::V1Model::instance().sw.name) { if (main->getConstructorParameters()->size() != 6) return root; - auto verify = main->getParameterValue(P4V1::V1Model::instance.sw.verify.name); - auto update = main->getParameterValue(P4V1::V1Model::instance.sw.compute.name); - auto deparser = main->getParameterValue(P4V1::V1Model::instance.sw.deparser.name); + auto verify = main->getParameterValue(P4V1::V1Model::instance().sw.verify.name); + auto update = main->getParameterValue(P4V1::V1Model::instance().sw.compute.name); + auto deparser = + main->getParameterValue(P4V1::V1Model::instance().sw.deparser.name); if (verify == nullptr || update == nullptr || deparser == nullptr || !verify->is() || !update->is() || !deparser->is()) { diff --git a/backends/p4test/p4test.cpp b/backends/p4test/p4test.cpp index d0fdd54acd4..a9232f2bbc1 100644 --- a/backends/p4test/p4test.cpp +++ b/backends/p4test/p4test.cpp @@ -26,6 +26,7 @@ limitations under the License. #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/frontend.h" #include "frontends/p4/toP4/toP4.h" +#include "ir/dump.h" #include "ir/ir.h" #include "ir/json_loader.h" #include "ir/pass_utils.h" diff --git a/backends/p4tools/common/compiler/midend.cpp b/backends/p4tools/common/compiler/midend.cpp index 6c9f9218f4d..fc9aecf4229 100644 --- a/backends/p4tools/common/compiler/midend.cpp +++ b/backends/p4tools/common/compiler/midend.cpp @@ -40,9 +40,14 @@ namespace P4::P4Tools { +#ifdef SUPPORT_P4_14 MidEnd::MidEnd(const CompilerOptions &options) { setName("MidEnd"); - refMap.setIsV1(options.langVersion == CompilerOptions::FrontendVersion::P4_16); + refMap.setIsV1(options.langVersion == CompilerOptions::FrontendVersion::P4_14); +#else +MidEnd::MidEnd(const CompilerOptions & /*options*/) { + setName("MidEnd"); +#endif } Visitor *MidEnd::mkConvertEnums() { return new P4::ConvertEnums(&typeMap, mkConvertEnumsPolicy()); } diff --git a/backends/tofino/bf-p4c/arch/fromv1.0/mirror.cpp b/backends/tofino/bf-p4c/arch/fromv1.0/mirror.cpp index f02b8e90dcc..62e472f63db 100644 --- a/backends/tofino/bf-p4c/arch/fromv1.0/mirror.cpp +++ b/backends/tofino/bf-p4c/arch/fromv1.0/mirror.cpp @@ -18,12 +18,12 @@ #include "mirror.h" +#include "backends/bmv2/common/v1model.h" #include "backends/tofino/bf-p4c/arch/bridge_metadata.h" #include "backends/tofino/bf-p4c/arch/intrinsic_metadata.h" #include "backends/tofino/bf-p4c/common/ir_utils.h" #include "backends/tofino/bf-p4c/lib/pad_alignment.h" #include "backends/tofino/bf-p4c/specs/device.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/cloner.h" #include "frontends/p4/coreLibrary.h" #include "frontends/p4/methodInstance.h" diff --git a/backends/tofino/bf-p4c/arch/fromv1.0/phase0.cpp b/backends/tofino/bf-p4c/arch/fromv1.0/phase0.cpp index 82a61505e04..ff410521596 100644 --- a/backends/tofino/bf-p4c/arch/fromv1.0/phase0.cpp +++ b/backends/tofino/bf-p4c/arch/fromv1.0/phase0.cpp @@ -20,6 +20,7 @@ #include +#include "backends/bmv2/common/v1model.h" #include "backends/tofino/bf-p4c/arch/bridge_metadata.h" #include "backends/tofino/bf-p4c/arch/fromv1.0/programStructure.h" #include "backends/tofino/bf-p4c/arch/tna.h" @@ -31,7 +32,6 @@ #include "backends/tofino/bf-p4c/parde/field_packing.h" #include "backends/tofino/bf-p4c/specs/device.h" #include "frontends/common/resolveReferences/referenceMap.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/cloner.h" #include "frontends/p4/coreLibrary.h" #include "frontends/p4/typeChecking/typeChecker.h" @@ -280,17 +280,17 @@ struct FindPhase0Table : public Inspector { bool hasNoSideEffects(const IR::P4Table *table, cstring &errStr) const { // Actions profiles aren't allowed. errStr = "Action profiles not allowed on phase 0 table"_cs; - auto implProp = P4V1::V1Model::instance.tableAttributes.tableImplementation.name; + auto implProp = P4V1::V1Model::instance().tableAttributes.tableImplementation.name; if (table->properties->getProperty(implProp) != nullptr) return false; errStr = "Counters not allowed on phase 0 table"_cs; // Counters aren't allowed. - auto counterProp = P4V1::V1Model::instance.tableAttributes.counters.name; + auto counterProp = P4V1::V1Model::instance().tableAttributes.counters.name; if (table->properties->getProperty(counterProp) != nullptr) return false; // Meters aren't allowed. errStr = "Meters not allowed on phase 0 table"_cs; - auto meterProp = P4V1::V1Model::instance.tableAttributes.meters.name; + auto meterProp = P4V1::V1Model::instance().tableAttributes.meters.name; if (table->properties->getProperty(meterProp) != nullptr) return false; // Statefuls aren't allowed. diff --git a/backends/tofino/bf-p4c/arch/fromv1.0/resubmit.cpp b/backends/tofino/bf-p4c/arch/fromv1.0/resubmit.cpp index fbedc45e656..881b9a1f9b1 100644 --- a/backends/tofino/bf-p4c/arch/fromv1.0/resubmit.cpp +++ b/backends/tofino/bf-p4c/arch/fromv1.0/resubmit.cpp @@ -18,10 +18,10 @@ #include "resubmit.h" +#include "backends/bmv2/common/v1model.h" #include "backends/tofino/bf-p4c/arch/intrinsic_metadata.h" #include "backends/tofino/bf-p4c/parde/parde_visitor.h" #include "backends/tofino/bf-p4c/specs/device.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/cloner.h" #include "frontends/p4/coreLibrary.h" #include "frontends/p4/methodInstance.h" diff --git a/backends/tofino/bf-p4c/midend.cpp b/backends/tofino/bf-p4c/midend.cpp index 04c1670cad5..e6b18d873d2 100644 --- a/backends/tofino/bf-p4c/midend.cpp +++ b/backends/tofino/bf-p4c/midend.cpp @@ -98,6 +98,7 @@ #include "midend.h" +#include "backends/bmv2/common/v1model.h" #include "backends/tofino/bf-p4c/arch/arch.h" #include "backends/tofino/bf-p4c/control-plane/runtime.h" #include "backends/tofino/bf-p4c/ir/tofino_write_context.h" @@ -130,7 +131,6 @@ #include "backends/tofino/bf-p4c/midend/type_checker.h" #include "frontends/common/constantFolding.h" #include "frontends/common/resolveReferences/resolveReferences.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" diff --git a/backends/tofino/bf-p4c/parde/phase0.cpp b/backends/tofino/bf-p4c/parde/phase0.cpp index ef3bdc261f3..f411c5d3ff1 100644 --- a/backends/tofino/bf-p4c/parde/phase0.cpp +++ b/backends/tofino/bf-p4c/parde/phase0.cpp @@ -20,9 +20,9 @@ #include +#include "backends/bmv2/common/v1model.h" #include "backends/tofino/bf-p4c/common/asm_output.h" #include "backends/tofino/bf-p4c/parde/field_packing.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/coreLibrary.h" #include "lib/cstring.h" #include "lib/indent.h" diff --git a/backends/ubpf/midend.cpp b/backends/ubpf/midend.cpp index 0c6b7b23380..9d3a52b3e3f 100644 --- a/backends/ubpf/midend.cpp +++ b/backends/ubpf/midend.cpp @@ -68,8 +68,6 @@ const IR::ToplevelBlock *MidEnd::run(EbpfOptions &options, const IR::P4Program * std::ostream *outStream) { if (program == nullptr && options.listMidendPasses == 0) return nullptr; - bool isv1 = options.langVersion == CompilerOptions::FrontendVersion::P4_14; - refMap.setIsV1(isv1); auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); PassManager midEnd; diff --git a/control-plane/p4RuntimeArchHandler.cpp b/control-plane/p4RuntimeArchHandler.cpp index f8c270aa7ee..a19628e077c 100644 --- a/control-plane/p4RuntimeArchHandler.cpp +++ b/control-plane/p4RuntimeArchHandler.cpp @@ -20,7 +20,7 @@ limitations under the License. #include "frontends/common/resolveReferences/referenceMap.h" // TODO(antonin): this include should go away when we cleanup getTableSize // implementation. -#include "frontends/p4-14/fromv1.0/v1model.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/p4/externInstance.h" #include "frontends/p4/toP4/toP4.h" #include "frontends/p4/typeMap.h" @@ -92,7 +92,7 @@ int64_t getTableSize(const IR::P4Table *table) { // TODO(antonin): we should not be referring to v1model in this // architecture-independent code; each architecture may have a different // default table size. - const int64_t defaultTableSize = P4V1::V1Model::instance.tableAttributes.defaultTableSize; + const int64_t defaultTableSize = P4V1::V1Model::instance().tableAttributes.defaultTableSize; auto sizeProperty = table->properties->getProperty("size"); if (sizeProperty == nullptr) { diff --git a/control-plane/p4RuntimeArchStandard.cpp b/control-plane/p4RuntimeArchStandard.cpp index dcc7591acd3..daf4c283576 100644 --- a/control-plane/p4RuntimeArchStandard.cpp +++ b/control-plane/p4RuntimeArchStandard.cpp @@ -77,7 +77,7 @@ class P4RuntimeArchHandlerV1Model final : public P4RuntimeArchHandlerCommon getDigestCall(const P4::ExternFunction *function, ReferenceMap *refMap, P4::TypeMap *typeMap, p4configv1::P4TypeInfo *p4RtTypeInfo) { - if (function->method->name != P4V1::V1Model::instance.digest_receiver.name) + if (function->method->name != P4V1::V1Model::instance().digest_receiver.name) return std::nullopt; auto call = function->expr; @@ -126,7 +126,7 @@ class P4RuntimeArchHandlerV1Model final : public P4RuntimeArchHandlerCommonproperties->getProperty( - P4V1::V1Model::instance.tableAttributes.supportTimeout.name); + P4V1::V1Model::instance().tableAttributes.supportTimeout.name); if (timeout == nullptr) return false; if (!timeout->value->is()) { ::P4::error(ErrorType::ERR_UNEXPECTED, diff --git a/control-plane/p4RuntimeArchStandard.h b/control-plane/p4RuntimeArchStandard.h index 91cc0cb6c3c..c5b8f876511 100644 --- a/control-plane/p4RuntimeArchStandard.h +++ b/control-plane/p4RuntimeArchStandard.h @@ -17,8 +17,8 @@ limitations under the License. #ifndef CONTROL_PLANE_P4RUNTIMEARCHSTANDARD_H_ #define CONTROL_PLANE_P4RUNTIMEARCHSTANDARD_H_ +#include "backends/bmv2/common/v1model.h" #include "frontends/common/resolveReferences/referenceMap.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/typeMap.h" #include "ir/ir.h" #include "p4RuntimeArchHandler.h" @@ -74,10 +74,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "counter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.counters.name; + return P4V1::V1Model::instance().tableAttributes.counters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.counter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directCounter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().counter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directCounter.name; } static const cstring sizeParamName() { return "size"_cs; } static p4configv1::CounterSpec::Unit mapUnitName(const cstring name) { using p4configv1::CounterSpec; @@ -96,10 +96,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "counter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.counters.name; + return P4V1::V1Model::instance().tableAttributes.counters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.counter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directCounter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().counter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directCounter.name; } static const cstring sizeParamName() { return "size"_cs; } static p4configv1::CounterSpec::Unit mapUnitName(const cstring name) { using p4configv1::CounterSpec; @@ -165,10 +165,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "meter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.meters.name; + return P4V1::V1Model::instance().tableAttributes.meters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.meter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directMeter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().meter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directMeter.name; } static const cstring sizeParamName() { return "size"_cs; } static p4configv1::MeterSpec::Unit mapUnitName(const cstring name) { using p4configv1::MeterSpec; @@ -185,10 +185,10 @@ template <> struct CounterlikeTraits> { static const cstring name() { return "meter"_cs; } static const cstring directPropertyName() { - return P4V1::V1Model::instance.tableAttributes.meters.name; + return P4V1::V1Model::instance().tableAttributes.meters.name; } - static const cstring typeName() { return P4V1::V1Model::instance.meter.name; } - static const cstring directTypeName() { return P4V1::V1Model::instance.directMeter.name; } + static const cstring typeName() { return P4V1::V1Model::instance().meter.name; } + static const cstring directTypeName() { return P4V1::V1Model::instance().directMeter.name; } static const cstring sizeParamName() { return "size"_cs; } static p4configv1::MeterSpec::Unit mapUnitName(const cstring name) { using p4configv1::MeterSpec; @@ -310,9 +310,9 @@ template <> struct ActionProfileTraits { static const cstring name() { return "action profile"_cs; } static const cstring propertyName() { - return P4V1::V1Model::instance.tableAttributes.tableImplementation.name; + return P4V1::V1Model::instance().tableAttributes.tableImplementation.name; } - static const cstring typeName() { return P4V1::V1Model::instance.action_profile.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_profile.name; } static const cstring sizeParamName() { return "size"_cs; } }; @@ -320,9 +320,9 @@ template <> struct ActionProfileTraits { static const cstring name() { return "action profile"_cs; } static const cstring propertyName() { - return P4V1::V1Model::instance.tableAttributes.tableImplementation.name; + return P4V1::V1Model::instance().tableAttributes.tableImplementation.name; } - static const cstring typeName() { return P4V1::V1Model::instance.action_profile.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_profile.name; } static const cstring sizeParamName() { return "size"_cs; } }; @@ -350,13 +350,13 @@ struct ActionSelectorTraits; template <> struct ActionSelectorTraits : public ActionProfileTraits { static const cstring name() { return "action selector"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.action_selector.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_selector.name; } }; template <> struct ActionSelectorTraits : public ActionProfileTraits { static const cstring name() { return "action selector"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.action_selector.name; } + static const cstring typeName() { return P4V1::V1Model::instance().action_selector.name; } }; template <> @@ -378,7 +378,7 @@ struct RegisterTraits; template <> struct RegisterTraits { static const cstring name() { return "register"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.registers.name; } + static const cstring typeName() { return P4V1::V1Model::instance().registers.name; } static const cstring sizeParamName() { return "size"_cs; } // the index of the type parameter for the data stored in the register, in // the type parameter list of the extern type declaration @@ -389,7 +389,7 @@ struct RegisterTraits { template <> struct RegisterTraits { static const cstring name() { return "register"_cs; } - static const cstring typeName() { return P4V1::V1Model::instance.registers.name; } + static const cstring typeName() { return P4V1::V1Model::instance().registers.name; } static const cstring sizeParamName() { return "size"_cs; } // the index of the type parameter for the data stored in the register, in // the type parameter list of the extern type declaration diff --git a/control-plane/p4RuntimeSerializer.cpp b/control-plane/p4RuntimeSerializer.cpp index 734e885e696..cd671e15aaa 100644 --- a/control-plane/p4RuntimeSerializer.cpp +++ b/control-plane/p4RuntimeSerializer.cpp @@ -52,7 +52,7 @@ limitations under the License. #include "frontends/p4/externInstance.h" // TODO(antonin): this include should go away when we cleanup getMatchFields // and tableNeedsPriority implementations. -#include "frontends/p4-14/fromv1.0/v1model.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/p4/methodInstance.h" #include "frontends/p4/typeChecking/typeChecker.h" #include "frontends/p4/typeMap.h" @@ -350,11 +350,11 @@ static std::optional getMatchType(cstring matchTypeName) return MatchField::MatchTypes::LPM; } else if (matchTypeName == P4CoreLibrary::instance().ternaryMatch.name) { return MatchField::MatchTypes::TERNARY; - } else if (matchTypeName == P4V1::V1Model::instance.rangeMatchType.name) { + } else if (matchTypeName == P4V1::V1Model::instance().rangeMatchType.name) { return MatchField::MatchTypes::RANGE; - } else if (matchTypeName == P4V1::V1Model::instance.optionalMatchType.name) { + } else if (matchTypeName == P4V1::V1Model::instance().optionalMatchType.name) { return MatchField::MatchTypes::OPTIONAL; - } else if (matchTypeName == P4V1::V1Model::instance.selectorMatchType.name) { + } else if (matchTypeName == P4V1::V1Model::instance().selectorMatchType.name) { // Nothing to do here, we cannot even perform some sanity-checking. return std::nullopt; } else { @@ -1129,8 +1129,8 @@ class P4RuntimeEntriesConverter { auto matchType = getKeyMatchType(e, refMap); // TODO(antonin): remove dependency on v1model. if (matchType == P4CoreLibrary::instance().ternaryMatch.name || - matchType == P4V1::V1Model::instance.rangeMatchType.name || - matchType == P4V1::V1Model::instance.optionalMatchType.name) { + matchType == P4V1::V1Model::instance().rangeMatchType.name || + matchType == P4V1::V1Model::instance().optionalMatchType.name) { return true; } } @@ -1180,9 +1180,9 @@ class P4RuntimeEntriesConverter { addLpm(protoEntry, fieldId++, k, keyWidth, typeMap); } else if (matchType == P4CoreLibrary::instance().ternaryMatch.name) { addTernary(protoEntry, fieldId++, k, keyWidth, typeMap); - } else if (matchType == P4V1::V1Model::instance.rangeMatchType.name) { + } else if (matchType == P4V1::V1Model::instance().rangeMatchType.name) { addRange(protoEntry, fieldId++, k, keyWidth, typeMap); - } else if (matchType == P4V1::V1Model::instance.optionalMatchType.name) { + } else if (matchType == P4V1::V1Model::instance().optionalMatchType.name) { addOptional(protoEntry, fieldId++, k, keyWidth, typeMap); } else { if (!k->is()) @@ -1480,7 +1480,9 @@ P4RuntimeAPI P4RuntimeSerializer::generateP4Runtime(const IR::P4Program *program // Generate a new version of the program that satisfies the prerequisites of // the P4Runtime analysis code. P4::ReferenceMap refMap; +#ifdef SUPPORT_P4_14 refMap.setIsV1(true); +#endif P4::TypeMap typeMap; auto *evaluator = new P4::EvaluatorPass(&refMap, &typeMap); PassManager p4RuntimeFixups = { diff --git a/frontends/CMakeLists.txt b/frontends/CMakeLists.txt index 03d61bf3047..39c982095d2 100644 --- a/frontends/CMakeLists.txt +++ b/frontends/CMakeLists.txt @@ -99,97 +99,6 @@ set (P4_FRONTEND_SRCS p4/metrics/exportMetrics.cpp ) -set (P4_FRONTEND_HDRS - p4/actionsInlining.h - p4/alias.h - p4/callGraph.h - p4/checkConstants.h - p4/checkCoreMethods.h - p4/checkNamedArgs.h - p4/cloner.h - p4/commonInlining.h - p4/coreLibrary.h - p4/createBuiltins.h - p4/def_use.h - p4/defaultArguments.h - p4/defaultValues.h - p4/deprecated.h - p4/directCalls.h - p4/dontcareArgs.h - p4/enumInstance.h - p4/entryPriorities.h - p4/evaluator/evaluator.h - p4/evaluator/substituteParameters.h - p4/externInstance.h - p4/frontend.h - p4/functionsInlining.h - p4/hierarchicalNames.h - p4/duplicateActionControlPlaneNameCheck.h - p4/inlining.h - p4/localizeActions.h - p4/methodInstance.h - p4/moveConstructors.h - p4/moveDeclarations.h - p4/parameterSubstitution.h - p4/parseAnnotations.h - p4/parserCallGraph.h - p4/parserControlFlow.h - p4/reassociation.h - p4/redundantParsers.h - p4/removeOpAssign.h - p4/removeParameters.h - p4/removeReturns.h - p4/reservedWords.h - p4/resetHeaders.h - p4/setHeaders.h - p4/sideEffects.h - p4/simplify.h - p4/simplifyDefUse.h - p4/simplifyParsers.h - p4/simplifySwitch.h - p4/specialize.h - p4/specializeGenericFunctions.h - p4/specializeGenericTypes.h - p4/staticAssert.h - p4/strengthReduction.h - p4/structInitializers.h - p4/switchAddDefault.h - p4/symbol_table.h - p4/tableApply.h - p4/tableKeyNames.h - p4/ternaryBool.h - p4/toP4/toP4.h - p4/typeChecking/bindVariables.h - p4/typeChecking/constantTypeSubstitution.h - p4/typeChecking/syntacticEquivalence.h - p4/typeChecking/typeChecker.h - p4/typeChecking/typeConstraints.h - p4/typeChecking/typeSubstitution.h - p4/typeChecking/typeSubstitutionVisitor.h - p4/typeChecking/typeUnification.h - p4/typeMap.h - p4/uniqueNames.h - p4/unusedDeclarations.h - p4/uselessCasts.h - p4/validateMatchAnnotations.h - p4/validateParsedProgram.h - p4/validateValueSets.h - p4/metrics/metricsPassManager.h - p4/metrics/linesOfCodeMetric.h - p4/metrics/cyclomaticComplexity.h - p4/metrics/unusedCodeMetric.h - p4/metrics/nestingDepthMetric.h - p4/metrics/halsteadMetrics.h - p4/metrics/headerMetrics.h - p4/metrics/headerPacketMetrics.h - p4/metrics/matchActionTableMetrics.h - p4/metrics/parserMetrics.h - p4/metrics/inlinedActionsMetric.h - p4/metrics/externalObjectsMetric.h - p4/metrics/exportMetrics.h - ) - - set (COMMON_FRONTEND_SRCS common/applyOptionsPragmas.cpp common/constantFolding.cpp @@ -201,54 +110,11 @@ set (COMMON_FRONTEND_SRCS common/resolveReferences/resolveReferences.cpp ) -set (COMMON_FRONTEND_HDRS - common/applyOptionsPragmas.h - common/constantFolding.h - common/constantParsing.h - common/model.h - common/name_gateways.h - common/options.h - common/parser_options.h - common/parseInput.h - common/programMap.h - common/resolveReferences/referenceMap.h - common/resolveReferences/resolveReferences.h - ) - - -set (V1_FRONTEND_SRCS - p4-14/typecheck.cpp - p4-14/header_type.cpp - p4-14/v1.cpp - - p4-14/fromv1.0/converters.cpp - p4-14/fromv1.0/programStructure.cpp - p4-14/fromv1.0/v1model.cpp - ) - -set (IR_DEF_FILES ${IR_DEF_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/ir-v1.def PARENT_SCOPE) - -set (V1_FRONTEND_HDRS - p4-14/header_type.h - p4-14/inline_control_flow.h - p4-14/typecheck.h - - p4-14/fromv1.0/converters.h - p4-14/fromv1.0/programStructure.h - p4-14/fromv1.0/v1model.h - ) - set (PARSERS_SRCS parsers/parserDriver.cpp parsers/p4/p4AnnotationLexer.cpp ) -set (PARSERS_HDRS - parsers/parserDriver.h - parsers/p4/abstractP4Lexer.hpp - parsers/p4/p4AnnotationLexer.hpp - ) - macro(add_parser pname) add_custom_target (mk${pname}dirs ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/parsers/${pname}) @@ -274,30 +140,51 @@ macro(add_parser pname) endmacro(add_parser) -add_parser(v1) + + add_parser(p4) +set(FRONTEND_GEN_SOURCES ${p4PARSER_GEN_SRCS}) + +if (SUPPORT_P4_14) +add_parser(v1) +set (FRONTEND_GEN_SOURCES ${FRONTEND_GEN_SOURCES} ${v1PARSER_GEN_SRCS}) +endif () + -add_library (frontend-parser-gen OBJECT ${p4PARSER_GEN_SRCS} ${v1PARSER_GEN_SRCS}) +add_library (frontend-parser-gen OBJECT ${FRONTEND_GEN_SOURCES}) target_link_libraries (frontend-parser-gen # Make sure to also expose the compile flags associated with the ir library. PUBLIC ir # These libraries are exposed by a header. PUBLIC p4ctoolkit ) -add_dependencies (frontend-parser-gen mkp4dirs mkv1dirs ir-generated) +add_dependencies (frontend-parser-gen mkp4dirs ir-generated) + + set (FRONTEND_SOURCES ${COMMON_FRONTEND_SRCS} ${PARSERS_SRCS} ${P4_FRONTEND_SRCS} - ${V1_FRONTEND_SRCS} ) -set (FRONTEND_CPPLINT_FILES - ${P4_FRONTEND_SRCS} ${P4_FRONTEND_HDRS} - ${COMMON_FRONTEND_SRCS} ${COMMON_FRONTEND_HDRS} - ${V1_FRONTEND_SRCS} ${V1_FRONTEND_HDRS} - ${PARSERS_SRCS} ${PARSERS_HDRS}) +if (SUPPORT_P4_14) + add_dependencies (frontend-parser-gen mkv1dirs) + + set (V1_FRONTEND_SRCS + ${CMAKE_CURRENT_SOURCE_DIR}/parsers/parserDriver_v1.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/p4/typeChecking/typeCheckExpr_v1.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/typecheck.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/header_type.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/v1.cpp + + ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/fromv1.0/converters.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/fromv1.0/programStructure.cpp + ) + set (FRONTEND_SOURCES ${FRONTEND_SOURCES} ${V1_FRONTEND_SRCS}) + set (IR_DEF_FILES ${IR_DEF_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/p4-14/ir-v1.def PARENT_SCOPE) +endif () + if (FLEX_INCLUDE_DIRS) include_directories (${FLEX_INCLUDE_DIRS}) diff --git a/frontends/common/parseInput.cpp b/frontends/common/parseInput.cpp index 15799b8d1c8..d859bf4842a 100644 --- a/frontends/common/parseInput.cpp +++ b/frontends/common/parseInput.cpp @@ -19,7 +19,9 @@ limitations under the License. #include #include +#ifdef SUPPORT_P4_14 #include "frontends/p4-14/fromv1.0/converters.h" +#endif #include "frontends/parsers/parserDriver.h" #include "lib/error.h" @@ -27,12 +29,20 @@ namespace P4 { const IR::P4Program *parseP4String(const char *sourceFile, unsigned sourceLine, const std::string &input, +#ifdef SUPPORT_P4_14 CompilerOptions::FrontendVersion version) { +#else + CompilerOptions::FrontendVersion /*version*/) { +#endif std::istringstream stream(input); - const auto *result = - version == CompilerOptions::FrontendVersion::P4_14 - ? parseV1Program(stream, sourceFile, sourceLine) - : P4ParserDriver::parse(stream, sourceFile, sourceLine); + const IR::P4Program *result = nullptr; +#ifdef SUPPORT_P4_14 + if (version == CompilerOptions::FrontendVersion::P4_14) + result = + parseV1Program(stream, sourceFile, sourceLine); + else +#endif + result = P4ParserDriver::parse(stream, sourceFile, sourceLine); if (::P4::errorCount() > 0) { ::P4::error(ErrorType::ERR_OVERLIMIT, "%1% errors encountered, aborting compilation", diff --git a/frontends/common/parseInput.h b/frontends/common/parseInput.h index 7a1fcf01bd6..eb9067a7342 100644 --- a/frontends/common/parseInput.h +++ b/frontends/common/parseInput.h @@ -19,7 +19,9 @@ limitations under the License. #include "frontends/common/options.h" #include "frontends/common/parser_options.h" +#ifdef SUPPORT_P4_14 #include "frontends/p4-14/fromv1.0/converters.h" +#endif #include "frontends/parsers/parserDriver.h" #include "lib/error.h" @@ -29,6 +31,7 @@ class P4Program; namespace P4 { +#ifdef SUPPORT_P4_14 template static const IR::P4Program *parseV1Program(Input stream, std::string_view sourceFile, unsigned sourceLine, @@ -50,7 +53,7 @@ static const IR::P4Program *parseV1Program(Input stream, std::string_view source BUG_CHECK(v1->is(), "Conversion returned %1%", v1); return v1->to(); } - +#endif /** * Parse P4 source from a file. The filename and language version are specified * by @options. If the language version is not P4-16, then the program is @@ -59,7 +62,11 @@ static const IR::P4Program *parseV1Program(Input stream, std::string_view source * @return a P4-16 IR tree representing the contents of the given file, or null * on failure. If failure occurs, an error will also be reported. */ +#ifdef SUPPORT_P4_14 template +#else +inline +#endif const IR::P4Program *parseP4File(const ParserOptions &options) { BUG_CHECK(&options == &P4CContext::get().options(), "Parsing using options that don't match the current " @@ -72,21 +79,29 @@ const IR::P4Program *parseP4File(const ParserOptions &options) { ::P4::error(ErrorType::ERR_NOT_FOUND, "%1%: No such file or directory.", options.file); return nullptr; } +#ifdef SUPPORT_P4_14 result = options.isv1() ? parseV1Program(file, options.file.string(), 1, options.getDebugHook()) : P4ParserDriver::parse(file, options.file.string()); +#else + result = P4ParserDriver::parse(file, options.file.string()); +#endif fclose(file); } else { auto preprocessorResult = options.preprocess(); if (!preprocessorResult.has_value()) { return nullptr; } - // Need to assign file here because the parser requires an lvalue. +// Need to assign file here because the parser requires an lvalue. +#ifdef SUPPORT_P4_14 result = options.isv1() ? parseV1Program(preprocessorResult.value().get(), options.file.string(), 1, options.getDebugHook()) : P4ParserDriver::parse(preprocessorResult.value().get(), options.file.string()); +#else + result = P4ParserDriver::parse(preprocessorResult.value().get(), options.file.string()); +#endif } if (::P4::errorCount() > 0) { diff --git a/frontends/common/parser_options.cpp b/frontends/common/parser_options.cpp index ec0818fee8c..1f822635fac 100644 --- a/frontends/common/parser_options.cpp +++ b/frontends/common/parser_options.cpp @@ -44,7 +44,9 @@ namespace P4 { * machine, the 'p4includePath' would contain the path on the original machine. */ std::filesystem::path p4includePath = std::filesystem::path(CONFIG_PKGDATADIR) / "p4include"; +#ifdef SUPPORT_P4_14 std::filesystem::path p4_14includePath = std::filesystem::path(CONFIG_PKGDATADIR) / "p4_14include"; +#endif using namespace P4::literals; @@ -166,13 +168,15 @@ ParserOptions::ParserOptions(std::string_view defaultMessage) : Util::Options(de return true; }, "Like -Mt, override target but quote special characters (passed to preprocessor)"); - registerOption( "--p4v", "{14|16}", [this](const char *arg) { +#ifdef SUPPORT_P4_14 if (!strcmp(arg, "1.0") || !strcmp(arg, "14")) { langVersion = ParserOptions::FrontendVersion::P4_14; - } else if (!strcmp(arg, "1.2") || !strcmp(arg, "16")) { + } else +#endif + if (!strcmp(arg, "1.2") || !strcmp(arg, "16")) { langVersion = ParserOptions::FrontendVersion::P4_16; } else { ::P4::error(ErrorType::ERR_INVALID, "Illegal language version %1%", arg); @@ -184,9 +188,12 @@ ParserOptions::ParserOptions(std::string_view defaultMessage) : Util::Options(de registerOption( "--std", "{p4-14|p4-16}", [this](const char *arg) { +#ifdef SUPPORT_P4_14 if (!strcmp(arg, "14") || !strcmp(arg, "p4-14")) { langVersion = ParserOptions::FrontendVersion::P4_14; - } else if (!strcmp(arg, "16") || !strcmp(arg, "p4-16")) { + } else +#endif + if (!strcmp(arg, "16") || !strcmp(arg, "p4-16")) { langVersion = ParserOptions::FrontendVersion::P4_16; } else { ::P4::error(ErrorType::ERR_INVALID, "Illegal language version %1%", arg); @@ -381,9 +388,11 @@ std::vector *ParserOptions::process(int argc, char *const argv[]) } this->exe_name = cstring(executablePath.stem().c_str()); +#ifdef SUPPORT_P4_14 searchForIncludePath(p4_14includePath, {"p4_14include"_cs, "../p4_14include"_cs, "../../p4_14include"_cs}, executablePath); +#endif searchForIncludePath(p4includePath, {"p4include"_cs, "../p4include"_cs, "../../p4include"_cs}, executablePath); @@ -401,11 +410,17 @@ const char *ParserOptions::getIncludePath() const { // the p4c driver sets environment variables for include // paths. check the environment and add these to the command // line for the preprocessor +#ifdef SUPPORT_P4_14 char *driverP4IncludePath = isv1() ? getenv("P4C_14_INCLUDE_PATH") : getenv("P4C_16_INCLUDE_PATH"); - if (driverP4IncludePath != nullptr) path += (" -I"_cs + cstring(driverP4IncludePath)); path += " -I"_cs + (isv1() ? p4_14includePath.string() : p4includePath.string()); - if (!isv1()) path += " -I"_cs + (p4includePath / "bmv2").string(); + if (!isv1()) path += " -I"_cs + p4includePath.string() + "/bmv2"_cs; +#else + char *driverP4IncludePath = getenv("P4C_16_INCLUDE_PATH"); + path += " -I"_cs + p4includePath.string(); + path += " -I"_cs + p4includePath.string() + "/bmv2"_cs; +#endif + if (driverP4IncludePath != nullptr) path += (" -I"_cs + cstring(driverP4IncludePath)); return path.c_str(); } @@ -458,7 +473,9 @@ static std::filesystem::path makeFileName(const std::filesystem::path &folder, return folder / newName; } +#ifdef SUPPORT_P4_14 bool ParserOptions::isv1() const { return langVersion == ParserOptions::FrontendVersion::P4_14; } +#endif void ParserOptions::dumpPass(const char *manager, unsigned seq, const char *pass, const IR::Node *node) const { diff --git a/frontends/common/parser_options.h b/frontends/common/parser_options.h index 3a5dace46fb..265a1342953 100644 --- a/frontends/common/parser_options.h +++ b/frontends/common/parser_options.h @@ -37,7 +37,9 @@ class ToP4; /// Standard include paths for .p4 header files. The values are determined by /// `configure`. extern std::filesystem::path p4includePath; +#ifdef SUPPORT_P4_14 extern std::filesystem::path p4_14includePath; +#endif /// Try to guess whether a file is a "system" file bool isSystemFile(cstring filename); @@ -99,8 +101,10 @@ class ParserOptions : public Util::Options { const char *getIncludePath() const override; /// Returns the output of the preprocessor. std::optional preprocess() const; +#ifdef SUPPORT_P4_14 /// True if we are compiling a P4 v1.0 or v1.1 program bool isv1() const; +#endif /// Get a debug hook function suitable for insertion in the pass managers. The hook is /// responsible for dumping P4 according to th --top4 and related options. DebugHook getDebugHook() const; diff --git a/frontends/common/resolveReferences/referenceMap.cpp b/frontends/common/resolveReferences/referenceMap.cpp index a9ab45663f6..6894acd4ee2 100644 --- a/frontends/common/resolveReferences/referenceMap.cpp +++ b/frontends/common/resolveReferences/referenceMap.cpp @@ -26,7 +26,15 @@ MinimalNameGenerator::MinimalNameGenerator() { for (auto &reserved : P4::reservedWords) usedNames.insert({reserved, 0}); } -ReferenceMap::ReferenceMap() : ProgramMap("ReferenceMap"), isv1(false) { clear(); } +ReferenceMap::ReferenceMap() + : ProgramMap("ReferenceMap") +#ifdef SUPPORT_P4_14 + , + isv1(false) +#endif +{ + clear(); +} void ReferenceMap::clear() { LOG2("Clearing reference map"); diff --git a/frontends/common/resolveReferences/referenceMap.h b/frontends/common/resolveReferences/referenceMap.h index 78dad228c58..66a7f965872 100644 --- a/frontends/common/resolveReferences/referenceMap.h +++ b/frontends/common/resolveReferences/referenceMap.h @@ -65,9 +65,11 @@ class DeclarationLookup { /// Class used to encode maps from paths to declarations. class ReferenceMap final : public ProgramMap, public NameGenerator, public DeclarationLookup { +#ifdef SUPPORT_P4_14 /// If `isv1` is true, then the map is for a P4_14 program /// (possibly translated into P4_16). - bool isv1; + bool isv1 = false; +#endif /// Maps paths in the program to declarations. absl::flat_hash_map pathToDeclaration; @@ -102,19 +104,19 @@ class ReferenceMap final : public ProgramMap, public NameGenerator, public Decla void dbprint(std::ostream &cout) const override; - /// Set boolean indicating whether map is for a P4_14 program to @p isV1. - void setIsV1(bool isv1) { this->isv1 = isv1; } - void setAnyOrder(bool anyOrder) { this->isv1 = anyOrder; } - /// Generate a name from @p base that fresh for the program. cstring newName(std::string_view base) override; /// Clear the reference map void clear(); +#ifdef SUPPORT_P4_14 /// @returns @true if this map is for a P4_14 program bool isV1() const { return isv1; } - + /// Set boolean indicating whether map is for a P4_14 program to @p isV1. + void setIsV1(bool isv1) { this->isv1 = isv1; } + void setAnyOrder(bool anyOrder) { this->isv1 = anyOrder; } +#endif /// @returns @true if @p decl is used in the program. bool isUsed(const IR::IDeclaration *decl) const { return used.count(decl) > 0; } diff --git a/frontends/common/resolveReferences/resolveReferences.cpp b/frontends/common/resolveReferences/resolveReferences.cpp index 77d1c05964b..99335bb38c8 100644 --- a/frontends/common/resolveReferences/resolveReferences.cpp +++ b/frontends/common/resolveReferences/resolveReferences.cpp @@ -20,7 +20,11 @@ limitations under the License. namespace P4 { -ResolutionContext::ResolutionContext() { anyOrder = P4CContext::get().options().isv1(); } +ResolutionContext::ResolutionContext() { +#ifdef SUPPORT_P4_14 + anyOrder = P4CContext::get().options().isv1(); +#endif +} const std::vector &ResolutionContext::memoizeDeclarations( const IR::INamespace *ns) const { @@ -359,9 +363,11 @@ void ResolveReferences::checkShadowing(const IR::INamespace *ns) const { // These can overload each other. // Also, the constructor is supposed to have the same name as the class. continue; +#ifdef SUPPORT_P4_14 if (pnode->is() && node->is()) // attribute locals often match attributes continue; +#endif // parameter shadowing if (node->is() && !node->is()) { @@ -378,7 +384,9 @@ void ResolveReferences::checkShadowing(const IR::INamespace *ns) const { } Visitor::profile_t ResolveReferences::init_apply(const IR::Node *node) { +#ifdef SUPPORT_P4_14 anyOrder = refMap->isV1(); +#endif // Check shadowing even if the program map is up-to-date. if (!refMap->checkMap(node) || checkShadow) refMap->clear(); return Inspector::init_apply(node); diff --git a/frontends/common/resolveReferences/resolveReferences.h b/frontends/common/resolveReferences/resolveReferences.h index 3ea238d2a13..4c6f7eddf51 100644 --- a/frontends/common/resolveReferences/resolveReferences.h +++ b/frontends/common/resolveReferences/resolveReferences.h @@ -178,7 +178,9 @@ class CheckShadowing : public PassManager { public: CheckShadowing() { +#ifdef SUPPORT_P4_14 refMap.setIsV1(P4CContext::get().options().isv1()); +#endif addPasses({new ResolveReferences(&refMap, /* checkShadow */ true)}); setName("CheckShadowing"); diff --git a/frontends/p4-14/fromv1.0/converters.cpp b/frontends/p4-14/fromv1.0/converters.cpp index 3cb2549a58a..86e873d6ff6 100644 --- a/frontends/p4-14/fromv1.0/converters.cpp +++ b/frontends/p4-14/fromv1.0/converters.cpp @@ -16,6 +16,7 @@ limitations under the License. #include "converters.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/common/constantFolding.h" #include "frontends/common/options.h" #include "frontends/p4-14/header_type.h" @@ -23,7 +24,6 @@ limitations under the License. #include "frontends/p4/coreLibrary.h" #include "lib/big_int_util.h" #include "programStructure.h" -#include "v1model.h" namespace P4::P4V1 { @@ -185,7 +185,7 @@ const IR::Node *ExpressionConverter::postorder(IR::ConcreteHeaderRef *nhr) { if (structure->isHeader(nhr)) { ref = structure->conversionContext->header->clone(); } else { - if (nhr->ref->name == P4V1::V1Model::instance.standardMetadata.name) + if (nhr->ref->name == P4V1::V1Model::instance().standardMetadata.name) return structure->conversionContext->standardMetadata->clone(); else ref = structure->conversionContext->userMetadata->clone(); diff --git a/frontends/p4-14/fromv1.0/converters.h b/frontends/p4-14/fromv1.0/converters.h index d1965c9cf07..11deb307b03 100644 --- a/frontends/p4-14/fromv1.0/converters.h +++ b/frontends/p4-14/fromv1.0/converters.h @@ -431,8 +431,8 @@ class ComputeTableCallGraph : public Inspector { // skip control block that is unused. if (!structure->calledControls.isCallee(parent->name) && - parent->name != P4V1::V1Model::instance.ingress.name && - parent->name != P4V1::V1Model::instance.egress.name) + parent->name != P4V1::V1Model::instance().ingress.name && + parent->name != P4V1::V1Model::instance().egress.name) return; if (ctrl != nullptr && ctrl != parent) { diff --git a/frontends/p4-14/fromv1.0/programStructure.cpp b/frontends/p4-14/fromv1.0/programStructure.cpp index 8683696b6a6..b55f782472c 100644 --- a/frontends/p4-14/fromv1.0/programStructure.cpp +++ b/frontends/p4-14/fromv1.0/programStructure.cpp @@ -43,7 +43,7 @@ static const IR::IDeclaration *getFirstDeclaration(const IR::Vector *n } ProgramStructure::ProgramStructure() - : v1model(P4V1::V1Model::instance), + : v1model(P4V1::V1Model::instance()), p4lib(P4::P4CoreLibrary::instance()), types(&allNames), metadata(&allNames), @@ -699,7 +699,7 @@ void ProgramStructure::loadModel() { // This includes in turn core.p4 std::stringstream versionArg; versionArg << "-DV1MODEL_VERSION=" << V1Model::versionCurrent; - include(V1Model::instance.file.name, versionArg.str()); + include(V1Model::instance().file.name, versionArg.str()); metadataInstances.insert(v1model.standardMetadataType.name); metadataTypes.insert(v1model.standardMetadataType.name); diff --git a/frontends/p4-14/fromv1.0/programStructure.h b/frontends/p4-14/fromv1.0/programStructure.h index 84aeef457f2..62637a765b8 100644 --- a/frontends/p4-14/fromv1.0/programStructure.h +++ b/frontends/p4-14/fromv1.0/programStructure.h @@ -20,12 +20,12 @@ limitations under the License. #include #include +#include "backends/bmv2/common/v1model.h" #include "frontends/p4/callGraph.h" #include "frontends/p4/coreLibrary.h" #include "ir/ir.h" #include "lib/cstring.h" #include "lib/map.h" -#include "v1model.h" namespace P4::P4V1 { @@ -124,7 +124,7 @@ class ProgramStructure { ProgramStructure(); virtual ~ProgramStructure() = default; - P4V1::V1Model &v1model; + const P4V1::V1Model &v1model; P4::P4CoreLibrary &p4lib; std::unordered_map allNames; diff --git a/frontends/p4-14/fromv1.0/v1model.cpp b/frontends/p4-14/fromv1.0/v1model.cpp deleted file mode 100644 index d42259063e0..00000000000 --- a/frontends/p4-14/fromv1.0/v1model.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "frontends/p4-14/fromv1.0/v1model.h" - -/* These must be in the same compilation unit to ensure that P4CoreLibrary::instance - * is initialized before V1Model::instance */ -namespace P4::P4V1 { - -V1Model V1Model::instance; -const char *V1Model::versionInitial = "20180101"; -const char *V1Model::versionCurrent = "20200408"; - -} // namespace P4::P4V1 diff --git a/frontends/p4-14/ir-v1.def b/frontends/p4-14/ir-v1.def index b91672005d5..0146a5b4e1a 100644 --- a/frontends/p4-14/ir-v1.def +++ b/frontends/p4-14/ir-v1.def @@ -450,6 +450,17 @@ class V1Control : IAnnotated { toString { return node_type_name() + " " + name; } } + +class GlobalRef : Expression { + Node obj; // FIXME -- should be IInstance, but IRgen doesn't allow + // FIXME -- interface references directly in the IR + GlobalRef { type = obj->to()->getType(); } + validate { BUG_CHECK(obj->is(), "Invalid object %1%", obj); } + toString { return obj->to()->toString(); } + ID Name() const { return obj->to()->Name(); } + dbprint { out << obj->to()->Name(); } +} + class AttribLocal : Expression, IDeclaration { ID name; ID getName() const override { return name; } @@ -472,16 +483,6 @@ class Attribute : Declaration { dbprint { if (type) out << type << ' '; out << name; } } -class GlobalRef : Expression { - Node obj; // FIXME -- should be IInstance, but IRgen doesn't allow - // FIXME -- interface references directly in the IR - GlobalRef { type = obj->to()->getType(); } - validate { BUG_CHECK(obj->is(), "Invalid object %1%", obj); } - toString { return obj->to()->toString(); } - ID Name() const { return obj->to()->Name(); } - dbprint { out << obj->to()->Name(); } -} - class AttributeRef : Expression { cstring extern_name; Type_Extern extern_type; diff --git a/frontends/p4-14/typecheck.cpp b/frontends/p4-14/typecheck.cpp index 206c9177572..d510a0349e3 100644 --- a/frontends/p4-14/typecheck.cpp +++ b/frontends/p4-14/typecheck.cpp @@ -153,7 +153,7 @@ class TypeCheck::AssignInitialTypes : public Transform { if (!ext && !global) return prop; if (!ext && di->type->is()) return prop; BUG_CHECK(ext, "%s is not an extern", di); - if (auto attr = ext->attributes[prop->name]) { + if (auto attr = ext->attributes.get(prop->name)) { if (attr->type->is()) prune(); else if (attr->type->is()) diff --git a/frontends/p4/actionsInlining.h b/frontends/p4/actionsInlining.h index ea171fef238..38c8c9df68c 100644 --- a/frontends/p4/actionsInlining.h +++ b/frontends/p4/actionsInlining.h @@ -77,36 +77,8 @@ class InlineActions : public PassManager { } // namespace P4 -namespace P4::P4_14 { - -/// Special inliner which works directly on P4-14 representation -class InlineActions : public Transform { - const IR::V1Program *global; - class SubstActionArgs : public Transform { - const IR::ActionFunction *function; - const IR::Primitive *callsite; - const IR::Node *postorder(IR::ActionArg *arg) override { - for (unsigned i = 0; i < function->args.size(); ++i) - if (function->args[i] == getOriginal()) return callsite->operands[i]; - BUG("Action arg not argument of action"); - return arg; - } - - public: - SubstActionArgs(const IR::ActionFunction *f, const IR::Primitive *c) - : function(f), callsite(c) {} - }; - const IR::V1Program *preorder(IR::V1Program *gl) override { return global = gl; } - const IR::Node *preorder(IR::Primitive *p) override { - if (auto af = global->get(p->name)) { - SubstActionArgs saa(af, p); - saa.setCalledBy(this); - return af->action.clone()->apply(saa); - } - return p; - } -}; - -} // namespace P4::P4_14 +#ifdef SUPPORT_P4_14 +#include "actionsInlining_p4_14.h" +#endif #endif /* FRONTENDS_P4_ACTIONSINLINING_H_ */ diff --git a/frontends/p4/actionsInlining_p4_14.h b/frontends/p4/actionsInlining_p4_14.h new file mode 100644 index 00000000000..52f9e81fb09 --- /dev/null +++ b/frontends/p4/actionsInlining_p4_14.h @@ -0,0 +1,55 @@ +/* +Copyright 2013-present Barefoot Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#ifndef FRONTENDS_P4_ACTIONSINLINING_P4_14_H_ +#define FRONTENDS_P4_ACTIONSINLINING_P4_14_H_ + +#include "ir/ir.h" + +namespace P4::P4_14 { + +/// Special inliner which works directly on P4-14 representation. +class InlineActions : public Transform { + const IR::V1Program *global; + class SubstActionArgs : public Transform { + const IR::ActionFunction *function; + const IR::Primitive *callsite; + const IR::Node *postorder(IR::ActionArg *arg) override { + for (unsigned i = 0; i < function->args.size(); ++i) + if (function->args[i] == getOriginal()) return callsite->operands[i]; + BUG("Action arg not argument of action"); + return arg; + } + + public: + SubstActionArgs(const IR::ActionFunction *f, const IR::Primitive *c) + : function(f), callsite(c) {} + }; + + const IR::V1Program *preorder(IR::V1Program *gl) override { return global = gl; } + const IR::Node *preorder(IR::Primitive *p) override { + if (auto af = global->get(p->name)) { + SubstActionArgs saa(af, p); + saa.setCalledBy(this); + return af->action.clone()->apply(saa); + } + return p; + } +}; + +} // namespace P4::P4_14 + +#endif /* FRONTENDS_P4_ACTIONSINLINING_P4_14_H_ */ diff --git a/frontends/p4/evaluator/evaluator.cpp b/frontends/p4/evaluator/evaluator.cpp index 24fa6c24faf..6fee901e03b 100644 --- a/frontends/p4/evaluator/evaluator.cpp +++ b/frontends/p4/evaluator/evaluator.cpp @@ -357,7 +357,9 @@ EvaluatorPass::EvaluatorPass(ReferenceMap *refMap, TypeMap *typeMap) { setName("EvaluatorPass"); if (!refMap) { selfRefMap.reset(new ReferenceMap); +#ifdef SUPPORT_P4_14 selfRefMap->setIsV1(P4CContext::get().options().isv1()); +#endif refMap = selfRefMap.get(); } evaluator = new P4::Evaluator(refMap, typeMap); diff --git a/frontends/p4/functionsInlining.cpp b/frontends/p4/functionsInlining.cpp index 06ea45f44c3..dc492844bc8 100644 --- a/frontends/p4/functionsInlining.cpp +++ b/frontends/p4/functionsInlining.cpp @@ -93,8 +93,12 @@ class FunctionsInliner::isLocalExpression : public Inspector, ResolutionContext const Context *ctxt = nullptr; while (auto scope = findOrigCtxt(ctxt)) { if (scope->is() || scope->is() || - scope->is() || scope->is() || - scope->is() || scope->is()) { + scope->is() +#ifdef SUPPORT_P4_14 + || scope->is() || scope->is() || + scope->is() +#endif + ) { // these are "global" things that may contain functions return result = false; } @@ -116,7 +120,7 @@ class FunctionsInliner::isLocalExpression : public Inspector, ResolutionContext BUG_CHECK(done, "isLocalExpression not computed"); return result; } -}; +}; // namespace P4 bool FunctionsInliner::preCaller() { LOG2("Visiting: " << dbp(getOriginal())); diff --git a/frontends/p4/getV1ModelVersion.h b/frontends/p4/getV1ModelVersion.h index f7b5e050a2a..6942e529a92 100644 --- a/frontends/p4/getV1ModelVersion.h +++ b/frontends/p4/getV1ModelVersion.h @@ -2,7 +2,7 @@ #define FRONTENDS_P4_GETV1MODELVERSION_H_ #include "absl/strings/numbers.h" -#include "frontends/p4-14/fromv1.0/v1model.h" +#include "backends/bmv2/common/v1model.h" #include "ir/ir.h" #include "ir/visitor.h" diff --git a/frontends/p4/inlining.h b/frontends/p4/inlining.h index b54d6274172..009a7c92821 100644 --- a/frontends/p4/inlining.h +++ b/frontends/p4/inlining.h @@ -454,7 +454,9 @@ class Inline : public PassManager { public: Inline(TypeMap *typeMap, const RemoveUnusedPolicy &policy, bool optimizeParserInlining, EvaluatorPass *evaluator = nullptr) { +#ifdef SUPPORT_P4_14 refMap.setIsV1(P4CContext::get().options().isv1()); +#endif auto *evInstance = evaluator ? evaluator : new EvaluatorPass(&refMap, typeMap); addPasses({ evInstance, diff --git a/frontends/p4/simplifyDefUse.h b/frontends/p4/simplifyDefUse.h index 851ed4fed72..8f52f4ef897 100644 --- a/frontends/p4/simplifyDefUse.h +++ b/frontends/p4/simplifyDefUse.h @@ -92,8 +92,9 @@ class SimplifyDefUse : public PassManager { public: explicit SimplifyDefUse(TypeMap *typeMap, TypeChecking *typeChecking = nullptr) { CHECK_NULL(typeMap); - +#ifdef SUPPORT_P4_14 refMap.setIsV1(P4CContext::get().options().isv1()); +#endif // SimplifyDefUse needs the expression tree *not* to be a DAG, // because it keeps state in hash-maps indexed with PathExpressions. diff --git a/frontends/p4/toP4/toP4.cpp b/frontends/p4/toP4/toP4.cpp index 6a4a582dbc7..4ea080e5a65 100644 --- a/frontends/p4/toP4/toP4.cpp +++ b/frontends/p4/toP4/toP4.cpp @@ -20,8 +20,8 @@ limitations under the License. #include #include +#include "backends/bmv2/common/v1model.h" #include "frontends/common/parser_options.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/getV1ModelVersion.h" #include "frontends/parsers/p4/p4parser.hpp" #include "ir/dump.h" @@ -168,7 +168,7 @@ bool ToP4::preorder(const IR::P4Program *program) { if (!relativePathStr.empty() && relativePathStr.rfind("..", 0) != 0) { // TODO: This is v1model-specific code. This should be not part of the core // pass. - if (P4V1::V1Model::instance.file.name == relativePathStr) { + if (P4V1::V1Model::instance().file.name == relativePathStr) { P4V1::GetV1ModelVersion g; program->apply(g); builder.append("#define V1MODEL_VERSION "); diff --git a/frontends/p4/toP4/toP4.h b/frontends/p4/toP4/toP4.h index ca9d705a5ed..aff9e618f1c 100644 --- a/frontends/p4/toP4/toP4.h +++ b/frontends/p4/toP4/toP4.h @@ -261,8 +261,10 @@ class ToP4 : public Inspector, ResolutionContext { bool preorder(const IR::P4Table *c) override; bool preorder(const IR::P4ValueSet *c) override; +#ifdef SUPPORT_P4_14 // in case it is accidentally called on a V1Program bool preorder(const IR::V1Program *) override { return false; } +#endif }; std::string toP4(const IR::INode *node); diff --git a/frontends/p4/typeChecking/readOnlyTypeInference.cpp b/frontends/p4/typeChecking/readOnlyTypeInference.cpp index 3a4309bdcad..6b112001ccd 100644 --- a/frontends/p4/typeChecking/readOnlyTypeInference.cpp +++ b/frontends/p4/typeChecking/readOnlyTypeInference.cpp @@ -133,7 +133,9 @@ DEFINE_POSTORDER(IR::ConstructorCallExpression) DEFINE_POSTORDER(IR::SelectExpression) DEFINE_POSTORDER(IR::DefaultExpression) DEFINE_POSTORDER(IR::This) +#ifdef SUPPORT_P4_14 DEFINE_POSTORDER(IR::AttribLocal) +#endif DEFINE_POSTORDER(IR::ActionList) DEFINE_POSTORDER(IR::ReturnStatement) diff --git a/frontends/p4/typeChecking/typeCheckExpr.cpp b/frontends/p4/typeChecking/typeCheckExpr.cpp index aa647a737ab..5c10ed6407f 100644 --- a/frontends/p4/typeChecking/typeCheckExpr.cpp +++ b/frontends/p4/typeChecking/typeCheckExpr.cpp @@ -2397,10 +2397,4 @@ const IR::Node *TypeInferenceBase::postorder(const IR::SelectExpression *express return expression; } -const IR::Node *TypeInferenceBase::postorder(const IR::AttribLocal *local) { - setType(local, local->type); - setType(getOriginal(), local->type); - return local; -} - } // namespace P4 diff --git a/frontends/p4/typeChecking/typeCheckExpr_v1.cpp b/frontends/p4/typeChecking/typeCheckExpr_v1.cpp new file mode 100644 index 00000000000..22e55ef76d8 --- /dev/null +++ b/frontends/p4/typeChecking/typeCheckExpr_v1.cpp @@ -0,0 +1,27 @@ +/* +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include "typeChecker.h" + +#ifdef SUPPORT_P4_14 +namespace P4 { + +const IR::Node *TypeInferenceBase::postorder(const IR::AttribLocal *local) { + setType(local, local->type); + setType(getOriginal(), local->type); + return local; +} + +} // namespace P4 +#endif diff --git a/frontends/p4/typeChecking/typeChecker.h b/frontends/p4/typeChecking/typeChecker.h index d2977258aeb..533e43b340c 100644 --- a/frontends/p4/typeChecking/typeChecker.h +++ b/frontends/p4/typeChecking/typeChecker.h @@ -322,7 +322,9 @@ class TypeInferenceBase : public virtual Visitor, public ResolutionContext { const IR::Node *postorder(const IR::SelectExpression *expression); const IR::Node *postorder(const IR::DefaultExpression *expression); const IR::Node *postorder(const IR::This *expression); +#ifdef SUPPORT_P4_14 const IR::Node *postorder(const IR::AttribLocal *local); +#endif const IR::Node *postorder(const IR::ActionList *al); const IR::Node *postorder(const IR::ReturnStatement *stat); @@ -470,7 +472,9 @@ class ReadOnlyTypeInference : public virtual Inspector, public TypeInferenceBase void postorder(const IR::SelectExpression *expression) override; void postorder(const IR::DefaultExpression *expression) override; void postorder(const IR::This *expression) override; +#ifdef SUPPORT_P4_14 void postorder(const IR::AttribLocal *local) override; +#endif void postorder(const IR::ActionList *al) override; void postorder(const IR::ReturnStatement *stat) override; @@ -609,7 +613,9 @@ class TypeInference : public virtual Transform, public TypeInferenceBase { const IR::Node *postorder(IR::SelectExpression *expression) override; const IR::Node *postorder(IR::DefaultExpression *expression) override; const IR::Node *postorder(IR::This *expression) override; +#ifdef SUPPORT_P4_14 const IR::Node *postorder(IR::AttribLocal *local) override; +#endif const IR::Node *postorder(IR::ActionList *al) override; const IR::Node *postorder(IR::ReturnStatement *stat) override; diff --git a/frontends/p4/typeChecking/typeInference.cpp b/frontends/p4/typeChecking/typeInference.cpp index 8ec23958ffd..1724248bd1d 100644 --- a/frontends/p4/typeChecking/typeInference.cpp +++ b/frontends/p4/typeChecking/typeInference.cpp @@ -124,7 +124,9 @@ DEFINE_POSTORDER(IR::ConstructorCallExpression) DEFINE_POSTORDER(IR::SelectExpression) DEFINE_POSTORDER(IR::DefaultExpression) DEFINE_POSTORDER(IR::This) +#ifdef SUPPORT_P4_14 DEFINE_POSTORDER(IR::AttribLocal) +#endif DEFINE_POSTORDER(IR::ActionList) DEFINE_POSTORDER(IR::ReturnStatement) diff --git a/frontends/parsers/parserDriver.cpp b/frontends/parsers/parserDriver.cpp index 5a97d8508fc..1dbc3ed4043 100644 --- a/frontends/parsers/parserDriver.cpp +++ b/frontends/parsers/parserDriver.cpp @@ -13,8 +13,6 @@ #include "frontends/parsers/p4/p4AnnotationLexer.hpp" #include "frontends/parsers/p4/p4lexer.hpp" #include "frontends/parsers/p4/p4parser.hpp" -#include "frontends/parsers/v1/v1lexer.hpp" -#include "frontends/parsers/v1/v1parser.hpp" #include "lib/error.h" #ifdef HAVE_LIBBOOST_IOSTREAMS @@ -305,61 +303,3 @@ void P4ParserDriver::onReadErrorDeclaration(IR::Type_Error *error) { } } // namespace P4 - -namespace P4::V1 { - -V1ParserDriver::V1ParserDriver() : global(new IR::V1Program) {} - -/* static */ const IR::V1Program *V1ParserDriver::parse(std::istream &in, - std::string_view sourceFile, - unsigned sourceLine /* = 1 */) { - LOG1("Parsing P4-14 program " << sourceFile); - - // Create and configure the parser and lexer. - V1ParserDriver driver; - V1Lexer lexer(in); - V1Parser parser(driver, lexer); - -#ifdef YYDEBUG - if (const char *p = getenv("YYDEBUG")) parser.set_debug_level(atoi(p)); -#endif - - // Provide an initial source location. - driver.sources->mapLine(sourceFile, sourceLine); - - // Parse. - if (parser.parse() != 0) return nullptr; - return driver.global; -} - -/* static */ const IR::V1Program *V1ParserDriver::parse(FILE *in, std::string_view sourceFile, - unsigned sourceLine /* = 1 */) { - AutoStdioInputStream inputStream(in); - return parse(inputStream.get(), sourceFile, sourceLine); -} - -IR::Constant *V1ParserDriver::constantFold(IR::Expression *expr) { - IR::Node *node(expr); - auto rv = node->apply(P4::DoConstantFolding())->to(); - return rv ? new IR::Constant(rv->srcInfo, rv->type, rv->value, rv->base) : nullptr; -} - -IR::Vector V1ParserDriver::makeExpressionList(const IR::NameList *list) { - IR::Vector rv; - for (auto &name : list->names) rv.push_back(new IR::StringLiteral(name)); - return rv; -} - -void V1ParserDriver::clearPragmas() { currentPragmas.clear(); } - -void V1ParserDriver::addPragma(IR::Annotation *pragma) { - if (!P4CContext::get().options().isAnnotationDisabled(pragma)) currentPragmas.push_back(pragma); -} - -IR::Vector V1ParserDriver::takePragmasAsVector() { - IR::Vector pragmas; - std::swap(pragmas, currentPragmas); - return pragmas; -} - -} // namespace P4::V1 diff --git a/frontends/parsers/parserDriver.h b/frontends/parsers/parserDriver.h index 92d8041502f..64fb04eb9f5 100644 --- a/frontends/parsers/parserDriver.h +++ b/frontends/parsers/parserDriver.h @@ -228,6 +228,7 @@ class P4ParserDriver final : public AbstractParserDriver { } // namespace P4 +#ifdef SUPPORT_P4_14 namespace P4::V1 { class V1Lexer; @@ -249,6 +250,7 @@ class V1ParserDriver final : public P4::AbstractParserDriver { * set the initial source location. * @returns a V1Program object if parsing was successful, or null otherwise. */ + static const IR::V1Program *parse(std::istream &in, std::string_view sourceFile, unsigned sourceLine = 1); static const IR::V1Program *parse(FILE *in, std::string_view sourceFile, @@ -296,5 +298,6 @@ class V1ParserDriver final : public P4::AbstractParserDriver { }; } // namespace P4::V1 +#endif #endif /* FRONTENDS_PARSERS_PARSERDRIVER_H_ */ diff --git a/frontends/parsers/parserDriver_v1.cpp b/frontends/parsers/parserDriver_v1.cpp new file mode 100644 index 00000000000..74efbcbda4d --- /dev/null +++ b/frontends/parsers/parserDriver_v1.cpp @@ -0,0 +1,87 @@ +/* +Copyright 2013-present Barefoot Networks, Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +#include +#include +#include + +#include "frontends/common/constantFolding.h" +#include "frontends/common/options.h" +#include "frontends/parsers/v1/v1lexer.hpp" +#include "frontends/parsers/v1/v1parser.hpp" +#include "parserDriver.h" + +#ifdef SUPPORT_P4_14 +namespace P4::V1 { + +V1ParserDriver::V1ParserDriver() : global(new IR::V1Program) {} + +/* static */ const IR::V1Program *V1ParserDriver::parse(std::istream &in, + std::string_view sourceFile, + unsigned sourceLine /* = 1 */) { + LOG1("Parsing P4-14 program " << sourceFile); + + // Create and configure the parser and lexer. + V1ParserDriver driver; + V1Lexer lexer(in); + V1Parser parser(driver, lexer); + +#ifdef YYDEBUG + if (const char *p = getenv("YYDEBUG")) parser.set_debug_level(atoi(p)); +#endif + + // Provide an initial source location. + driver.sources->mapLine(sourceFile, sourceLine); + + // Parse. + if (parser.parse() != 0) return nullptr; + return driver.global; +} + +/* static */ const IR::V1Program *V1ParserDriver::parse(FILE *in, std::string_view sourceFile, + unsigned sourceLine /* = 1 */) { + std::stringstream stream; + char buffer[512]; + while (fgets(buffer, sizeof(buffer), in)) stream << buffer; + return parse(stream, sourceFile, sourceLine); +} + +IR::Constant *V1ParserDriver::constantFold(IR::Expression *expr) { + IR::Node *node(expr); + auto rv = node->apply(P4::DoConstantFolding())->to(); + return rv ? new IR::Constant(rv->srcInfo, rv->type, rv->value, rv->base) : nullptr; +} + +IR::Vector V1ParserDriver::makeExpressionList(const IR::NameList *list) { + IR::Vector rv; + for (auto &name : list->names) rv.push_back(new IR::StringLiteral(name)); + return rv; +} + +void V1ParserDriver::clearPragmas() { currentPragmas.clear(); } + +void V1ParserDriver::addPragma(IR::Annotation *pragma) { + if (!P4CContext::get().options().isAnnotationDisabled(pragma)) currentPragmas.push_back(pragma); +} + +IR::Vector V1ParserDriver::takePragmasAsVector() { + IR::Vector pragmas; + std::swap(pragmas, currentPragmas); + return pragmas; +} + +} // namespace P4::V1 +#endif diff --git a/frontends/parsers/v1/v1parser.ypp b/frontends/parsers/v1/v1parser.ypp index 710acc15245..5833fd46dbe 100644 --- a/frontends/parsers/v1/v1parser.ypp +++ b/frontends/parsers/v1/v1parser.ypp @@ -48,7 +48,7 @@ using namespace P4::literals; struct BBoxType { IR::Vector* methods; - IR::NameMap* attribs; + IR::NameMap* attribs; }; struct HeaderType { @@ -886,7 +886,7 @@ blackbox_type_declaration: BLACKBOX_TYPE name "{" blackbox_body "}" blackbox_body: /* epsilon */ { $$.methods = new IR::Vector; - $$.attribs = new IR::NameMap; } + $$.attribs = new IR::NameMap; } | blackbox_body ATTRIBUTE name "{" blackbox_attribute "}" { ($$=$1).attribs->addUnique($3, $5); } | blackbox_body METHOD name "(" opt_argument_list ")" ";" diff --git a/ir/dbprint-expression.cpp b/ir/dbprint-expression.cpp index 33874bd5a4d..c37051b8357 100644 --- a/ir/dbprint-expression.cpp +++ b/ir/dbprint-expression.cpp @@ -89,6 +89,7 @@ void IR::PlusSlice::dbprint(std::ostream &out) const { if (prec == 0) out << ';'; } +#ifdef SUPPORT_P4_14 void IR::Primitive::dbprint(std::ostream &out) const { const char *sep = ""; int prec = getprec(out); @@ -101,24 +102,17 @@ void IR::Primitive::dbprint(std::ostream &out) const { if (prec == 0) out << ';'; } -void IR::Constant::dbprint(std::ostream &out) const { - // Node::dbprint(out); - out << value; - // if (getprec(out) == 0) out << ';'; -} - -void IR::NamedExpression::dbprint(std::ostream &out) const { out << name << ":" << expression; } - -void IR::StructExpression::dbprint(std::ostream &out) const { - out << "{" << indent; - for (auto &field : components) out << Log::endl << field << ';'; - out << " }" << unindent; -} - -void IR::Member::dbprint(std::ostream &out) const { +void IR::Apply::dbprint(std::ostream &out) const { + out << "apply(" << name << ")"; int prec = getprec(out); - out << setprec(Prec_Postfix) << expr << setprec(prec) << '.' << member; - if (prec == 0) out << ';'; + if (!actions.empty()) { + out << " {" << indent << setprec(0); + for (const auto &[actName, actExprs] : actions) + out << Log::endl << actName << " {" << indent << actExprs << unindent << " }"; + out << setprec(prec) << " }" << unindent; + } else if (prec == 0) { + out << ';'; + } } void IR::If::dbprint(std::ostream &out) const { @@ -137,18 +131,26 @@ void IR::If::dbprint(std::ostream &out) const { out << " }" << unindent; } } +#endif -void IR::Apply::dbprint(std::ostream &out) const { - out << "apply(" << name << ")"; +void IR::Constant::dbprint(std::ostream &out) const { + // Node::dbprint(out); + out << value; + // if (getprec(out) == 0) out << ';'; +} + +void IR::NamedExpression::dbprint(std::ostream &out) const { out << name << ":" << expression; } + +void IR::StructExpression::dbprint(std::ostream &out) const { + out << "{" << indent; + for (auto &field : components) out << Log::endl << field << ';'; + out << " }" << unindent; +} + +void IR::Member::dbprint(std::ostream &out) const { int prec = getprec(out); - if (!actions.empty()) { - out << " {" << indent << setprec(0); - for (const auto &[actName, actExprs] : actions) - out << Log::endl << actName << " {" << indent << actExprs << unindent << " }"; - out << setprec(prec) << " }" << unindent; - } else if (prec == 0) { - out << ';'; - } + out << setprec(Prec_Postfix) << expr << setprec(prec) << '.' << member; + if (prec == 0) out << ';'; } void IR::BoolLiteral::dbprint(std::ostream &out) const { diff --git a/ir/dbprint-p4.cpp b/ir/dbprint-p4.cpp index 4d3e42c172c..78321a05be4 100644 --- a/ir/dbprint-p4.cpp +++ b/ir/dbprint-p4.cpp @@ -29,6 +29,7 @@ namespace P4 { using namespace DBPrint; using namespace IndentCtl; +#ifdef SUPPORT_P4_14 void IR::HeaderStackItemRef::dbprint(std::ostream &out) const { int prec = getprec(out); out << setprec(Prec_Postfix) << *base_ << "[" << setprec(Prec_Low) << *index_ << "]" @@ -59,6 +60,7 @@ void IR::CalculatedField::dbprint(std::ostream &out) const { } out << unindent; } + void IR::CaseEntry::dbprint(std::ostream &out) const { const char *sep = ""; int prec = getprec(out); @@ -78,6 +80,7 @@ void IR::CaseEntry::dbprint(std::ostream &out) const { } out << ':' << setprec(prec) << " " << action; } + void IR::V1Parser::dbprint(std::ostream &out) const { out << "parser " << name << " {" << indent; for (auto &stmt : stmts) out << Log::endl << *stmt; @@ -99,25 +102,8 @@ void IR::V1Parser::dbprint(std::ostream &out) const { if (drop) out << Log::endl << "drop;"; out << " }" << unindent; } + void IR::ParserException::dbprint(std::ostream &out) const { out << "IR::ParserException"; } -void IR::ParserState::dbprint(std::ostream &out) const { - out << "state " << name; - if (dbgetflags(out) & Brief) return; - out << " " << annotations << "{" << indent; - for (auto s : components) out << Log::endl << s; - if (selectExpression) out << Log::endl << selectExpression; - out << " }" << unindent; -} -void IR::P4Parser::dbprint(std::ostream &out) const { - out << "parser " << name; - if (type->typeParameters && !type->typeParameters->empty()) out << type->typeParameters; - out << '(' << type->applyParams << ')'; - if (constructorParams) out << '(' << constructorParams << ')'; - out << " " << type->annotations << "{" << indent; - for (auto d : parserLocals) out << Log::endl << d; - for (auto s : states) out << Log::endl << s; - out << " }" << unindent; -} void IR::Counter::dbprint(std::ostream &out) const { IR::Attached::dbprint(out); } void IR::Meter::dbprint(std::ostream &out) const { IR::Attached::dbprint(out); } @@ -137,6 +123,44 @@ void IR::ActionFunction::dbprint(std::ostream &out) const { out << unindent << " }"; } +void IR::ActionProfile::dbprint(std::ostream &out) const { out << "IR::ActionProfile"; } +void IR::ActionSelector::dbprint(std::ostream &out) const { out << "IR::ActionSelector"; } +void IR::V1Table::dbprint(std::ostream &out) const { out << "IR::V1Table " << name; } + +void IR::V1Program::dbprint(std::ostream &out) const { + for (const auto &obj : Values(scope)) out << obj << Log::endl; +} + +void IR::V1Control::dbprint(std::ostream &out) const { + out << "control " << name << " {" << indent << code << unindent << " }"; +} + +#endif + +void IR::P4ValueSet::dbprint(std::ostream &out) const { + out << "value_set<" << elementType << "> " << name; + out << " " << annotations << "(" << size << ")"; +} + +void IR::ParserState::dbprint(std::ostream &out) const { + out << "state " << name; + if (dbgetflags(out) & Brief) return; + out << " " << annotations << "{" << indent; + for (auto s : components) out << Log::endl << s; + if (selectExpression) out << Log::endl << selectExpression; + out << " }" << unindent; +} +void IR::P4Parser::dbprint(std::ostream &out) const { + out << "parser " << name; + if (type->typeParameters && !type->typeParameters->empty()) out << type->typeParameters; + out << '(' << type->applyParams << ')'; + if (constructorParams) out << '(' << constructorParams << ')'; + out << " " << type->annotations << "{" << indent; + for (auto d : parserLocals) out << Log::endl << d; + for (auto s : states) out << Log::endl << s; + out << " }" << unindent; +} + void IR::P4Action::dbprint(std::ostream &out) const { out << annotations << "action " << name << "("; const char *sep = ""; @@ -164,10 +188,6 @@ void IR::BlockStatement::dbprint(std::ostream &out) const { out << unindent << " }"; } -void IR::ActionProfile::dbprint(std::ostream &out) const { out << "IR::ActionProfile"; } -void IR::ActionSelector::dbprint(std::ostream &out) const { out << "IR::ActionSelector"; } -void IR::V1Table::dbprint(std::ostream &out) const { out << "IR::V1Table " << name; } - void IR::ActionList::dbprint(std::ostream &out) const { out << "{" << indent; bool first = true; @@ -204,14 +224,6 @@ void IR::P4Table::dbprint(std::ostream &out) const { out << " }" << unindent; } -void IR::P4ValueSet::dbprint(std::ostream &out) const { - out << "value_set<" << elementType << "> " << name; - out << " " << annotations << "(" << size << ")"; -} - -void IR::V1Control::dbprint(std::ostream &out) const { - out << "control " << name << " {" << indent << code << unindent << " }"; -} void IR::P4Control::dbprint(std::ostream &out) const { out << "control " << name; if (type->typeParameters && !type->typeParameters->empty()) out << type->typeParameters; @@ -224,10 +236,6 @@ void IR::P4Control::dbprint(std::ostream &out) const { out << " } }" << unindent << unindent; } -void IR::V1Program::dbprint(std::ostream &out) const { - for (const auto &obj : Values(scope)) out << obj << Log::endl; -} - void IR::P4Program::dbprint(std::ostream &out) const { for (auto obj : objects) out << obj << Log::endl; } diff --git a/ir/type.def b/ir/type.def index e0a0cd650b9..94918a840a3 100644 --- a/ir/type.def +++ b/ir/type.def @@ -964,12 +964,13 @@ class Type_Newtype : Type_Declaration, IAnnotated { #nodbprint } + /// An 'extern' black-box (not a function) class Type_Extern : Type_Declaration, INestedNamespace, IGeneralNamespace, IMayBeGenericType, IAnnotated { optional TypeParameters typeParameters = new TypeParameters; optional inline Vector methods; // methods can be overloaded, so this is not NameMap - optional inline NameMap attributes; // P4_14 only, currently + optional inline NameMap attributes; // P4_14 only, currently optional inline Vector annotations; std::vector getNestedNamespaces() const override { return { typeParameters }; } diff --git a/ir/write_context.cpp b/ir/write_context.cpp index c815a1733a8..0df6c626bcb 100644 --- a/ir/write_context.cpp +++ b/ir/write_context.cpp @@ -31,12 +31,17 @@ bool P4WriteContext::isWrite(bool root_value) { const Context *ctxt = getContext(); if (!ctxt || !ctxt->node) return root_value; while (ctxt->child_index == 0 && - (ctxt->node->is() || ctxt->node->is() || - ctxt->node->is() || ctxt->node->is())) { + (ctxt->node->is() +#ifdef SUPPORT_P4_14 + || ctxt->node->is() +#endif + || ctxt->node->is() || ctxt->node->is())) { ctxt = ctxt->parent; if (!ctxt || !ctxt->node) return root_value; } +#ifdef SUPPORT_P4_14 if (auto *prim = ctxt->node->to()) return prim->isOutput(ctxt->child_index); +#endif if (ctxt->node->is()) return ctxt->child_index == 0; if (ctxt->node->is()) { // MethodCallExpression(Vector) @@ -76,12 +81,17 @@ bool P4WriteContext::isRead(bool root_value) { const Context *ctxt = getContext(); if (!ctxt || !ctxt->node) return root_value; while (ctxt->child_index == 0 && - (ctxt->node->is() || ctxt->node->is() || - ctxt->node->is() || ctxt->node->is())) { + (ctxt->node->is() +#ifdef SUPPORT_P4_14 + || ctxt->node->is() +#endif + || ctxt->node->is() || ctxt->node->is())) { ctxt = ctxt->parent; if (!ctxt || !ctxt->node) return root_value; } +#ifdef SUPPORT_P4_14 if (auto *prim = ctxt->node->to()) return !prim->isOutput(ctxt->child_index); +#endif if (ctxt->node->is()) return ctxt->child_index != 0; if (ctxt->node->is()) { // MethodCallExpression(Vector) diff --git a/midend/expr_uses.h b/midend/expr_uses.h index e53775e0367..4ec4536ea68 100644 --- a/midend/expr_uses.h +++ b/midend/expr_uses.h @@ -37,10 +37,12 @@ class exprUses : public Inspector { } return !result; } +#ifdef SUPPORT_P4_14 bool preorder(const IR::Primitive *p) override { if (p->name == look_for) result = true; return !result; } +#endif bool preorder(const IR::Expression *) override { return !result; } void postorder(const IR::Member *m) override { diff --git a/midend/has_side_effects.h b/midend/has_side_effects.h index 82dca06ac54..9620ae68a5d 100644 --- a/midend/has_side_effects.h +++ b/midend/has_side_effects.h @@ -49,10 +49,12 @@ class hasSideEffects : public Inspector, public ResolutionContext { return false; } +#ifdef SUPPORT_P4_14 bool preorder(const IR::Primitive *) override { result = true; return false; } +#endif bool preorder(const IR::Expression *) override { return !result; } public: diff --git a/midend/local_copyprop.cpp b/midend/local_copyprop.cpp index 9db567580cc..5818cf82904 100644 --- a/midend/local_copyprop.cpp +++ b/midend/local_copyprop.cpp @@ -31,7 +31,9 @@ using namespace literals; /* helper function to get the 'outermost' containing expression in an lvalue */ static const IR::Expression *lvalue_out(const IR::Expression *exp) { if (auto ai = exp->to()) return lvalue_out(ai->left); +#ifdef SUPPORT_P4_14 if (auto hsr = exp->to()) return lvalue_out(hsr->base()); +#endif if (auto sl = exp->to()) return lvalue_out(sl->e0); if (auto mem = exp->to()) return lvalue_out(mem->expr); return exp; diff --git a/test/gtest/equiv_test.cpp b/test/gtest/equiv_test.cpp index 5ccc9e8d7c7..024e66023e3 100644 --- a/test/gtest/equiv_test.cpp +++ b/test/gtest/equiv_test.cpp @@ -59,6 +59,7 @@ TEST(IR, Equiv) { EXPECT_TRUE(list1->equiv(*list2)); EXPECT_FALSE(list1->equiv(*list3)); +#ifdef SUPPORT_P4_14 auto *pr1 = new IR::V1Program; auto *pr2 = pr1->clone(); pr1->add("a"_cs, a1); @@ -71,4 +72,5 @@ TEST(IR, Equiv) { pr1->add("lista"_cs, list1); pr2->add("listb"_cs, list1); EXPECT_FALSE(pr1->equiv(*pr2)); +#endif } diff --git a/test/gtest/load_ir_from_json.cpp b/test/gtest/load_ir_from_json.cpp index 8620a7ac28c..dffbb733edf 100644 --- a/test/gtest/load_ir_from_json.cpp +++ b/test/gtest/load_ir_from_json.cpp @@ -38,6 +38,7 @@ namespace P4::Test { class FromJSONTest : public P4CTest {}; TEST_F(FromJSONTest, load_ir_from_json) { + // FIXME: This path should be set by the build system. int exitCode = system( "./p4c-bm2-ss -o outputTO.json test/test_fromJSON.p4 " "--toJSON jsonFile.json"); diff --git a/test/gtest/midend_pass.cpp b/test/gtest/midend_pass.cpp index eaab2f31d60..b5aa3589756 100644 --- a/test/gtest/midend_pass.cpp +++ b/test/gtest/midend_pass.cpp @@ -16,9 +16,9 @@ limitations under the License. #include "midend_pass.h" +#include "backends/bmv2/common/v1model.h" #include "frontends/common/constantFolding.h" #include "frontends/common/options.h" -#include "frontends/p4-14/fromv1.0/v1model.h" #include "frontends/p4/evaluator/evaluator.h" #include "frontends/p4/moveDeclarations.h" #include "frontends/p4/simplify.h" @@ -57,8 +57,10 @@ limitations under the License. namespace P4::Test { MidEnd::MidEnd(CompilerOptions &options, std::ostream *outStream) { +#ifdef SUPPORT_P4_14 bool isv1 = options.langVersion == CompilerOptions::FrontendVersion::P4_14; refMap.setIsV1(isv1); +#endif auto evaluator = new P4::EvaluatorPass(&refMap, &typeMap); setName("MidEnd"); @@ -113,11 +115,12 @@ MidEnd::MidEnd(CompilerOptions &options, std::ostream *outStream) { // nothing further to do return nullptr; // Special handling when compiling for v1model.p4 - if (main->type->name == P4V1::V1Model::instance.sw.name) { + if (main->type->name == P4V1::V1Model::instance().sw.name) { if (main->getConstructorParameters()->size() != 6) return root; - auto verify = main->getParameterValue(P4V1::V1Model::instance.sw.verify.name); - auto update = main->getParameterValue(P4V1::V1Model::instance.sw.compute.name); - auto deparser = main->getParameterValue(P4V1::V1Model::instance.sw.deparser.name); + auto verify = main->getParameterValue(P4V1::V1Model::instance().sw.verify.name); + auto update = main->getParameterValue(P4V1::V1Model::instance().sw.compute.name); + auto deparser = + main->getParameterValue(P4V1::V1Model::instance().sw.deparser.name); if (verify == nullptr || update == nullptr || deparser == nullptr || !verify->is() || !update->is() || !deparser->is()) { diff --git a/test/gtest/parser_unroll.cpp b/test/gtest/parser_unroll.cpp index c61d44c763c..6132749d377 100644 --- a/test/gtest/parser_unroll.cpp +++ b/test/gtest/parser_unroll.cpp @@ -109,6 +109,7 @@ TEST_F(P4CParserUnroll, test3) { ASSERT_EQ(parsers.first->states.size(), parsers.second->states.size() - 4); } +#ifdef SUPPORT_P4_14 TEST_F(P4CParserUnroll, switch_20160512) { auto parsers = loadExample("../p4_14_samples/switch_20160512/switch.p4", CompilerOptions::FrontendVersion::P4_14); @@ -116,6 +117,7 @@ TEST_F(P4CParserUnroll, switch_20160512) { ASSERT_TRUE(parsers.second); ASSERT_EQ(parsers.first->states.size(), parsers.second->states.size() - 22 - 4 - 2); } +#endif TEST_F(P4CParserUnroll, header_stack_access_remover) { auto parsers = loadExample("parser-unroll-test4.p4"); diff --git a/test/test_fromJSON.p4 b/test/test_fromJSON.p4 index 84d4977c3b0..d0fc9e47b49 100644 --- a/test/test_fromJSON.p4 +++ b/test/test_fromJSON.p4 @@ -89,8 +89,8 @@ control MyIngress(inout headers hdr, mark_to_drop(standard_metadata); } action ipv4_forward(macAddr_t dstAddr, egressSpec_t port) { - X tmp = X.Field_0; - Y tmp2 = Y.Field_00; + X tmp = X.Field_0; + Y tmp2 = Y.Field_00; if (tmp == X.Field_0){ if (tmp2 == Y.Field_00){ standard_metadata.egress_spec = port; @@ -141,4 +141,4 @@ MyIngress(), MyEgress(), MyComputeChecksum(), MyDeparser() -) main; \ No newline at end of file +) main; diff --git a/testdata/p4_16_samples/switch_p4_16.p4 b/testdata/p4_16_samples/switch_p4_16.p4 new file mode 100644 index 00000000000..db6c3d2cf38 --- /dev/null +++ b/testdata/p4_16_samples/switch_p4_16.p4 @@ -0,0 +1,5884 @@ +#include +#define V1MODEL_VERSION 20200408 +#include + +enum bit<8> FieldLists { + none = 0, + i2e_mirror_info = 1, + cpu_info = 2, + e2e_mirror_info = 3, + int_i2e_mirror_info = 4, + mirror_info = 5, + sflow_cpu_info = 6 +} + +struct acl_metadata_t { + bit<1> acl_deny; + bit<1> acl_copy; + bit<1> racl_deny; + bit<16> acl_nexthop; + bit<16> racl_nexthop; + bit<1> acl_nexthop_type; + bit<1> racl_nexthop_type; + bit<1> acl_redirect; + bit<1> racl_redirect; + bit<16> if_label; + bit<16> bd_label; + bit<14> acl_stats_index; +} + +struct egress_filter_metadata_t { + bit<16> ifindex_check; + bit<16> bd; + bit<16> inner_bd; +} + +struct egress_metadata_t { + bit<1> bypass; + bit<2> port_type; + bit<16> payload_length; + bit<9> smac_idx; + bit<16> bd; + bit<16> outer_bd; + bit<48> mac_da; + bit<1> routed; + bit<16> same_bd_check; + bit<8> drop_reason; + bit<16> ifindex; +} + +struct fabric_metadata_t { + bit<3> packetType; + bit<1> fabric_header_present; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> reason_code; + bit<8> dst_device; + bit<16> dst_port; +} + +struct global_config_metadata_t { + bit<1> enable_dod; +} + +struct hash_metadata_t { + bit<16> hash1; + bit<16> hash2; + bit<16> entropy_hash; +} + +struct i2e_metadata_t { + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info) + bit<32> ingress_tstamp; + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info, FieldLists.int_i2e_mirror_info) + bit<16> mirror_session_id; +} + +struct ingress_metadata_t { + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<9> ingress_port; + @field_list(FieldLists.cpu_info, FieldLists.mirror_info, FieldLists.sflow_cpu_info) + bit<16> ifindex; + bit<16> egress_ifindex; + bit<2> port_type; + bit<16> outer_bd; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> bd; + bit<1> drop_flag; + @field_list(FieldLists.mirror_info) + bit<8> drop_reason; + bit<1> control_frame; + bit<16> bypass_lookups; + @saturating + bit<32> sflow_take_sample; +} + +struct int_metadata_t { + bit<32> switch_id; + bit<8> insert_cnt; + bit<16> insert_byte_cnt; + bit<16> gpe_int_hdr_len; + bit<8> gpe_int_hdr_len8; + bit<16> instruction_cnt; +} + +struct int_metadata_i2e_t { + @field_list(FieldLists.int_i2e_mirror_info) + bit<1> sink; + bit<1> source; +} + +struct ingress_intrinsic_metadata_t { + bit<48> ingress_global_timestamp; + bit<16> mcast_grp; + bit<16> egress_rid; + bit<3> priority; +} + +struct ipv4_metadata_t { + bit<32> lkp_ipv4_sa; + bit<32> lkp_ipv4_da; + bit<1> ipv4_unicast_enabled; + bit<2> ipv4_urpf_mode; +} + +struct ipv6_metadata_t { + bit<128> lkp_ipv6_sa; + bit<128> lkp_ipv6_da; + bit<1> ipv6_unicast_enabled; + bit<1> ipv6_src_is_link_local; + bit<2> ipv6_urpf_mode; +} + +struct l2_metadata_t { + bit<48> lkp_mac_sa; + bit<48> lkp_mac_da; + bit<3> lkp_pkt_type; + bit<16> lkp_mac_type; + bit<16> l2_nexthop; + bit<1> l2_nexthop_type; + bit<1> l2_redirect; + bit<1> l2_src_miss; + bit<16> l2_src_move; + bit<10> stp_group; + bit<3> stp_state; + bit<16> bd_stats_idx; + bit<1> learning_enabled; + bit<1> port_vlan_mapping_miss; + bit<16> same_if_check; +} + +struct l3_metadata_t { + bit<2> lkp_ip_type; + bit<4> lkp_ip_version; + bit<8> lkp_ip_proto; + bit<8> lkp_ip_tc; + bit<8> lkp_ip_ttl; + bit<16> lkp_l4_sport; + bit<16> lkp_l4_dport; + bit<16> lkp_outer_l4_sport; + bit<16> lkp_outer_l4_dport; + bit<16> vrf; + bit<10> rmac_group; + bit<1> rmac_hit; + bit<2> urpf_mode; + bit<1> urpf_hit; + bit<1> urpf_check_fail; + bit<16> urpf_bd_group; + bit<1> fib_hit; + bit<16> fib_nexthop; + bit<1> fib_nexthop_type; + bit<16> same_bd_check; + bit<16> nexthop_index; + bit<1> routed; + bit<1> outer_routed; + bit<8> mtu_index; + bit<1> l3_copy; + @saturating + bit<16> l3_mtu_check; +} + +struct meter_metadata_t { + bit<2> meter_color; + bit<16> meter_index; +} + +struct multicast_metadata_t { + bit<1> ipv4_mcast_key_type; + bit<16> ipv4_mcast_key; + bit<1> ipv6_mcast_key_type; + bit<16> ipv6_mcast_key; + bit<1> outer_mcast_route_hit; + bit<2> outer_mcast_mode; + bit<1> mcast_route_hit; + bit<1> mcast_bridge_hit; + bit<1> ipv4_multicast_enabled; + bit<1> ipv6_multicast_enabled; + bit<1> igmp_snooping_enabled; + bit<1> mld_snooping_enabled; + bit<16> bd_mrpf_group; + bit<16> mcast_rpf_group; + bit<2> mcast_mode; + bit<16> multicast_route_mc_index; + bit<16> multicast_bridge_mc_index; + bit<1> inner_replica; + bit<1> replica; + bit<16> mcast_grp; +} + +struct nexthop_metadata_t { + bit<1> nexthop_type; +} + +struct qos_metadata_t { + bit<8> outer_dscp; + bit<3> marked_cos; + bit<8> marked_dscp; + bit<3> marked_exp; +} + +struct queueing_metadata_t { + bit<48> enq_timestamp; + bit<16> enq_qdepth; + bit<32> deq_timedelta; + bit<16> deq_qdepth; +} + +struct security_metadata_t { + bit<1> storm_control_color; + bit<1> ipsg_enabled; + bit<1> ipsg_check_fail; +} + +struct sflow_meta_t { + bit<16> sflow_session_id; +} + +struct tunnel_metadata_t { + bit<5> ingress_tunnel_type; + bit<24> tunnel_vni; + bit<1> mpls_enabled; + bit<20> mpls_label; + bit<3> mpls_exp; + bit<8> mpls_ttl; + bit<5> egress_tunnel_type; + bit<14> tunnel_index; + bit<9> tunnel_src_index; + bit<9> tunnel_smac_index; + bit<14> tunnel_dst_index; + bit<14> tunnel_dmac_index; + bit<24> vnid; + bit<1> tunnel_terminate; + bit<1> tunnel_if_check; + bit<4> egress_header_count; + bit<8> inner_ip_proto; +} + +header arp_rarp_t { + bit<16> hwType; + bit<16> protoType; + bit<8> hwAddrLen; + bit<8> protoAddrLen; + bit<16> opcode; +} + +header arp_rarp_ipv4_t { + bit<48> srcHwAddr; + bit<32> srcProtoAddr; + bit<48> dstHwAddr; + bit<32> dstProtoAddr; +} + +header bfd_t { + bit<3> version; + bit<5> diag; + bit<2> state; + bit<1> p; + bit<1> f; + bit<1> c; + bit<1> a; + bit<1> d; + bit<1> m; + bit<8> detectMult; + bit<8> len; + bit<32> myDiscriminator; + bit<32> yourDiscriminator; + bit<32> desiredMinTxInterval; + bit<32> requiredMinRxInterval; + bit<32> requiredMinEchoRxInterval; +} + +header eompls_t { + bit<4> zero; + bit<12> reserved; + bit<16> seqNo; +} + +@name("erspan_header_t3_t") header erspan_header_t3_t_0 { + bit<4> version; + bit<12> vlan; + bit<6> priority; + bit<10> span_id; + bit<32> timestamp; + bit<32> sgt_other; +} + +header ethernet_t { + bit<48> dstAddr; + bit<48> srcAddr; + bit<16> etherType; +} + +header fabric_header_t { + bit<3> packetType; + bit<2> headerVersion; + bit<2> packetVersion; + bit<1> pad1; + bit<3> fabricColor; + bit<5> fabricQos; + bit<8> dstDevice; + bit<16> dstPortOrGroup; +} + +header fabric_header_cpu_t { + bit<5> egressQueue; + bit<1> txBypass; + bit<2> reserved; + bit<16> ingressPort; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> reasonCode; +} + +header fabric_header_mirror_t { + bit<16> rewriteIndex; + bit<10> egressPort; + bit<5> egressQueue; + bit<1> pad; +} + +header fabric_header_multicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> mcastGrp; +} + +header fabric_header_sflow_t { + bit<16> sflow_session_id; +} + +header fabric_header_unicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> nexthopIndex; +} + +header fabric_payload_header_t { + bit<16> etherType; +} + +header fcoe_header_t { + bit<4> version; + bit<4> type_; + bit<8> sof; + bit<32> rsvd1; + bit<32> ts_upper; + bit<32> ts_lower; + bit<32> size_; + bit<8> eof; + bit<24> rsvd2; +} + +header genv_t { + bit<2> ver; + bit<6> optLen; + bit<1> oam; + bit<1> critical; + bit<6> reserved; + bit<16> protoType; + bit<24> vni; + bit<8> reserved2; +} + +header gre_t { + bit<1> C; + bit<1> R; + bit<1> K; + bit<1> S; + bit<1> s; + bit<3> recurse; + bit<5> flags; + bit<3> ver; + bit<16> proto; +} + +header icmp_t { + bit<16> typeCode; + bit<16> hdrChecksum; +} + +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; + bit<32> srcAddr; + bit<32> dstAddr; +} + +header ipv6_t { + bit<4> version; + bit<8> trafficClass; + bit<20> flowLabel; + bit<16> payloadLen; + bit<8> nextHdr; + bit<8> hopLimit; + bit<128> srcAddr; + bit<128> dstAddr; +} + +header sctp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> verifTag; + bit<32> checksum; +} + +header tcp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> seqNo; + bit<32> ackNo; + bit<4> dataOffset; + bit<4> res; + bit<8> flags; + bit<16> window; + bit<16> checksum; + bit<16> urgentPtr; +} + +header udp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<16> length_; + bit<16> checksum; +} + +header int_egress_port_id_header_t { + bit<1> bos; + bit<31> egress_port_id; +} + +header int_egress_port_tx_utilization_header_t { + bit<1> bos; + bit<31> egress_port_tx_utilization; +} + +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +header int_hop_latency_header_t { + bit<1> bos; + bit<31> hop_latency; +} + +header int_ingress_port_id_header_t { + bit<1> bos; + bit<15> ingress_port_id_1; + bit<16> ingress_port_id_0; +} + +header int_ingress_tstamp_header_t { + bit<1> bos; + bit<31> ingress_tstamp; +} + +header int_q_congestion_header_t { + bit<1> bos; + bit<31> q_congestion; +} + +header int_q_occupancy_header_t { + bit<1> bos; + bit<7> q_occupancy1; + bit<24> q_occupancy0; +} + +header int_switch_id_header_t { + bit<1> bos; + bit<31> switch_id; +} + +header lisp_t { + bit<8> flags; + bit<24> nonce; + bit<32> lsbsInstanceId; +} + +header llc_header_t { + bit<8> dsap; + bit<8> ssap; + bit<8> control_; +} + +header nsh_t { + bit<1> oam; + bit<1> context; + bit<6> flags; + bit<8> reserved; + bit<16> protoType; + bit<24> spath; + bit<8> sindex; +} + +header nsh_context_t { + bit<32> network_platform; + bit<32> network_shared; + bit<32> service_platform; + bit<32> service_shared; +} + +header nvgre_t { + bit<24> tni; + bit<8> flow_id; +} + +header roce_header_t { + bit<320> ib_grh; + bit<96> ib_bth; +} + +header roce_v2_header_t { + bit<96> ib_bth; +} + +header sflow_hdr_t { + bit<32> version; + bit<32> addrType; + bit<32> ipAddress; + bit<32> subAgentId; + bit<32> seqNumber; + bit<32> uptime; + bit<32> numSamples; +} + +header sflow_raw_hdr_record_t { + bit<20> enterprise; + bit<12> format; + bit<32> flowDataLength; + bit<32> headerProtocol; + bit<32> frameLength; + bit<32> bytesRemoved; + bit<32> headerSize; +} + +header sflow_sample_t { + bit<20> enterprise; + bit<12> format; + bit<32> sampleLength; + bit<32> seqNumer; + bit<8> srcIdType; + bit<24> srcIdIndex; + bit<32> samplingRate; + bit<32> samplePool; + bit<32> numDrops; + bit<32> inputIfindex; + bit<32> outputIfindex; + bit<32> numFlowRecords; +} + +header snap_header_t { + bit<24> oui; + bit<16> type_; +} + +header trill_t { + bit<2> version; + bit<2> reserved; + bit<1> multiDestination; + bit<5> optLength; + bit<6> hopCount; + bit<16> egressRbridge; + bit<16> ingressRbridge; +} + +header vntag_t { + bit<1> direction; + bit<1> pointer; + bit<14> destVif; + bit<1> looped; + bit<1> reserved; + bit<2> version; + bit<12> srcVif; +} + +header vxlan_t { + bit<8> flags; + bit<24> reserved; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_t { + bit<8> flags; + bit<16> reserved; + bit<8> next_proto; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_int_header_t { + bit<8> int_type; + bit<8> rsvd; + bit<8> len; + bit<8> next_proto; +} + +header int_value_t { + bit<1> bos; + bit<31> val; +} + +header mpls_t { + bit<20> label; + bit<3> exp; + bit<1> bos; + bit<8> ttl; +} + +header vlan_tag_t { + bit<3> pcp; + bit<1> cfi; + bit<12> vid; + bit<16> etherType; +} + +struct metadata { + @name(".acl_metadata") + acl_metadata_t acl_metadata; + @name(".egress_filter_metadata") + egress_filter_metadata_t egress_filter_metadata; + @name(".egress_metadata") + egress_metadata_t egress_metadata; + @name(".fabric_metadata") + fabric_metadata_t fabric_metadata; + @name(".global_config_metadata") + global_config_metadata_t global_config_metadata; + @name(".hash_metadata") + hash_metadata_t hash_metadata; + @name(".i2e_metadata") + i2e_metadata_t i2e_metadata; + @name(".ingress_metadata") + ingress_metadata_t ingress_metadata; + @name(".int_metadata") + int_metadata_t int_metadata; + @name(".int_metadata_i2e") + int_metadata_i2e_t int_metadata_i2e; + @name(".ipv4_metadata") + ipv4_metadata_t ipv4_metadata; + @name(".ipv6_metadata") + ipv6_metadata_t ipv6_metadata; + @name(".l2_metadata") + l2_metadata_t l2_metadata; + @name(".l3_metadata") + l3_metadata_t l3_metadata; + @name(".meter_metadata") + meter_metadata_t meter_metadata; + @name(".multicast_metadata") + multicast_metadata_t multicast_metadata; + @name(".nexthop_metadata") + nexthop_metadata_t nexthop_metadata; + @name(".qos_metadata") + qos_metadata_t qos_metadata; + @name(".security_metadata") + security_metadata_t security_metadata; + @name(".sflow_metadata") + sflow_meta_t sflow_metadata; + @name(".tunnel_metadata") + tunnel_metadata_t tunnel_metadata; +} + +struct headers { + @name(".arp_rarp") + arp_rarp_t arp_rarp; + @name(".arp_rarp_ipv4") + arp_rarp_ipv4_t arp_rarp_ipv4; + @name(".bfd") + bfd_t bfd; + @name(".eompls") + eompls_t eompls; + @name(".erspan_t3_header") + erspan_header_t3_t_0 erspan_t3_header; + @name(".ethernet") + ethernet_t ethernet; + @name(".fabric_header") + fabric_header_t fabric_header; + @name(".fabric_header_cpu") + fabric_header_cpu_t fabric_header_cpu; + @name(".fabric_header_mirror") + fabric_header_mirror_t fabric_header_mirror; + @name(".fabric_header_multicast") + fabric_header_multicast_t fabric_header_multicast; + @name(".fabric_header_sflow") + fabric_header_sflow_t fabric_header_sflow; + @name(".fabric_header_unicast") + fabric_header_unicast_t fabric_header_unicast; + @name(".fabric_payload_header") + fabric_payload_header_t fabric_payload_header; + @name(".fcoe") + fcoe_header_t fcoe; + @name(".genv") + genv_t genv; + @name(".gre") + gre_t gre; + @name(".icmp") + icmp_t icmp; + @name(".inner_ethernet") + ethernet_t inner_ethernet; + @name(".inner_icmp") + icmp_t inner_icmp; + @name(".inner_ipv4") + ipv4_t inner_ipv4; + @name(".inner_ipv6") + ipv6_t inner_ipv6; + @name(".inner_sctp") + sctp_t inner_sctp; + @name(".inner_tcp") + tcp_t inner_tcp; + @name(".inner_udp") + udp_t inner_udp; + @name(".int_egress_port_id_header") + int_egress_port_id_header_t int_egress_port_id_header; + @name(".int_egress_port_tx_utilization_header") + int_egress_port_tx_utilization_header_t int_egress_port_tx_utilization_header; + @name(".int_header") + int_header_t int_header; + @name(".int_hop_latency_header") + int_hop_latency_header_t int_hop_latency_header; + @name(".int_ingress_port_id_header") + int_ingress_port_id_header_t int_ingress_port_id_header; + @name(".int_ingress_tstamp_header") + int_ingress_tstamp_header_t int_ingress_tstamp_header; + @name(".int_q_congestion_header") + int_q_congestion_header_t int_q_congestion_header; + @name(".int_q_occupancy_header") + int_q_occupancy_header_t int_q_occupancy_header; + @name(".int_switch_id_header") + int_switch_id_header_t int_switch_id_header; + @name(".ipv4") + ipv4_t ipv4; + @name(".ipv6") + ipv6_t ipv6; + @name(".lisp") + lisp_t lisp; + @name(".llc_header") + llc_header_t llc_header; + @name(".nsh") + nsh_t nsh; + @name(".nsh_context") + nsh_context_t nsh_context; + @name(".nvgre") + nvgre_t nvgre; + @name(".outer_udp") + udp_t outer_udp; + @name(".roce") + roce_header_t roce; + @name(".roce_v2") + roce_v2_header_t roce_v2; + @name(".sctp") + sctp_t sctp; + @name(".sflow") + sflow_hdr_t sflow; + @name(".sflow_raw_hdr_record") + sflow_raw_hdr_record_t sflow_raw_hdr_record; + @name(".sflow_sample") + sflow_sample_t sflow_sample; + @name(".snap_header") + snap_header_t snap_header; + @name(".tcp") + tcp_t tcp; + @name(".trill") + trill_t trill; + @name(".udp") + udp_t udp; + @name(".vntag") + vntag_t vntag; + @name(".vxlan") + vxlan_t vxlan; + @name(".vxlan_gpe") + vxlan_gpe_t vxlan_gpe; + @name(".vxlan_gpe_int_header") + vxlan_gpe_int_header_t vxlan_gpe_int_header; + @name(".int_val") + int_value_t[24] int_val; + @name(".mpls") + mpls_t[3] mpls; + @name(".vlan_tag_") + vlan_tag_t[2] vlan_tag_; +} + +parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".parse_all_int_meta_value_heders") state parse_all_int_meta_value_heders { + packet.extract(hdr.int_switch_id_header); + packet.extract(hdr.int_ingress_port_id_header); + packet.extract(hdr.int_hop_latency_header); + packet.extract(hdr.int_q_occupancy_header); + packet.extract(hdr.int_ingress_tstamp_header); + packet.extract(hdr.int_egress_port_id_header); + packet.extract(hdr.int_q_congestion_header); + packet.extract(hdr.int_egress_port_tx_utilization_header); + transition parse_int_val; + } + @name(".parse_arp_rarp") state parse_arp_rarp { + packet.extract(hdr.arp_rarp); + transition select(hdr.arp_rarp.protoType) { + 16w0x800: parse_arp_rarp_ipv4; + default: accept; + } + } + @name(".parse_arp_rarp_ipv4") state parse_arp_rarp_ipv4 { + packet.extract(hdr.arp_rarp_ipv4); + transition parse_set_prio_med; + } + @name(".parse_bfd") state parse_bfd { + packet.extract(hdr.bfd); + transition parse_set_prio_max; + } + @name(".parse_eompls") state parse_eompls { + meta.tunnel_metadata.ingress_tunnel_type = 5w6; + transition parse_inner_ethernet; + } + @name(".parse_erspan_t3") state parse_erspan_t3 { + packet.extract(hdr.erspan_t3_header); + transition parse_inner_ethernet; + } + @name(".parse_ethernet") state parse_ethernet { + packet.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x9000: parse_fabric_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_header") state parse_fabric_header { + packet.extract(hdr.fabric_header); + transition select(hdr.fabric_header.packetType) { + 3w1: parse_fabric_header_unicast; + 3w2: parse_fabric_header_multicast; + 3w3: parse_fabric_header_mirror; + 3w5: parse_fabric_header_cpu; + default: accept; + } + } + @name(".parse_fabric_header_cpu") state parse_fabric_header_cpu { + packet.extract(hdr.fabric_header_cpu); + meta.ingress_metadata.bypass_lookups = (bit<16>)hdr.fabric_header_cpu.reasonCode; + transition select(hdr.fabric_header_cpu.reasonCode) { + 16w0x4: parse_fabric_sflow_header; + default: parse_fabric_payload_header; + } + } + @name(".parse_fabric_header_mirror") state parse_fabric_header_mirror { + packet.extract(hdr.fabric_header_mirror); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_multicast") state parse_fabric_header_multicast { + packet.extract(hdr.fabric_header_multicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_unicast") state parse_fabric_header_unicast { + packet.extract(hdr.fabric_header_unicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_payload_header") state parse_fabric_payload_header { + packet.extract(hdr.fabric_payload_header); + transition select(hdr.fabric_payload_header.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_sflow_header") state parse_fabric_sflow_header { + packet.extract(hdr.fabric_header_sflow); + transition parse_fabric_payload_header; + } + @name(".parse_fcoe") state parse_fcoe { + packet.extract(hdr.fcoe); + transition accept; + } + @name(".parse_geneve") state parse_geneve { + packet.extract(hdr.genv); + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.genv.vni; + meta.tunnel_metadata.ingress_tunnel_type = 5w4; + transition select(hdr.genv.ver, hdr.genv.optLen, hdr.genv.protoType) { + (2w0x0, 6w0x0, 16w0x6558): parse_inner_ethernet; + (2w0x0, 6w0x0, 16w0x800): parse_inner_ipv4; + (2w0x0, 6w0x0, 16w0x86dd): parse_inner_ipv6; + default: accept; + } + } + @name(".parse_gpe_int_header") state parse_gpe_int_header { + packet.extract(hdr.vxlan_gpe_int_header); + meta.int_metadata.gpe_int_hdr_len = (bit<16>)hdr.vxlan_gpe_int_header.len; + transition parse_int_header; + } + @name(".parse_gre") state parse_gre { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x1, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x6558): parse_nvgre; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x86dd): parse_gre_ipv6; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x22eb): parse_erspan_t3; + default: accept; + } + } + @name(".parse_gre_ipv4") state parse_gre_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv4; + } + @name(".parse_gre_ipv6") state parse_gre_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv6; + } + @name(".parse_gre_v6") state parse_gre_v6 { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + default: accept; + } + } + @name(".parse_icmp") state parse_icmp { + packet.extract(hdr.icmp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.icmp.typeCode; + transition select(hdr.icmp.typeCode) { + 16w0x8200 &&& 16w0xfe00: parse_set_prio_med; + 16w0x8400 &&& 16w0xfc00: parse_set_prio_med; + 16w0x8800 &&& 16w0xff00: parse_set_prio_med; + default: accept; + } + } + @name(".parse_inner_ethernet") state parse_inner_ethernet { + packet.extract(hdr.inner_ethernet); + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.inner_ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.inner_ethernet.dstAddr; + transition select(hdr.inner_ethernet.etherType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_inner_icmp") state parse_inner_icmp { + packet.extract(hdr.inner_icmp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_icmp.typeCode; + transition accept; + } + @name(".parse_inner_ipv4") state parse_inner_ipv4 { + packet.extract(hdr.inner_ipv4); + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.inner_ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.inner_ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.inner_ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.inner_ipv4.ttl; + transition select(hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ihl, hdr.inner_ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_inner_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_inner_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_ipv6") state parse_inner_ipv6 { + packet.extract(hdr.inner_ipv6); + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.inner_ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.inner_ipv6.hopLimit; + transition select(hdr.inner_ipv6.nextHdr) { + 8w58: parse_inner_icmp; + 8w6: parse_inner_tcp; + 8w17: parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_sctp") state parse_inner_sctp { + packet.extract(hdr.inner_sctp); + transition accept; + } + @name(".parse_inner_tcp") state parse_inner_tcp { + packet.extract(hdr.inner_tcp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_tcp.srcPort; + meta.l3_metadata.lkp_l4_dport = (bit<16>)hdr.inner_tcp.dstPort; + transition accept; + } + @name(".parse_inner_udp") state parse_inner_udp { + packet.extract(hdr.inner_udp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_udp.srcPort; + meta.l3_metadata.lkp_l4_dport = (bit<16>)hdr.inner_udp.dstPort; + transition accept; + } + @name(".parse_int_header") state parse_int_header { + packet.extract(hdr.int_header); + meta.int_metadata.instruction_cnt = (bit<16>)hdr.int_header.ins_cnt; + transition select(hdr.int_header.rsvd1, hdr.int_header.total_hop_cnt) { + (5w0x0, 8w0x0): accept; + (5w0x0 &&& 5w0xf, 8w0x0 &&& 8w0x0): parse_int_val; + default: accept; + default: parse_all_int_meta_value_heders; + } + } + @name(".parse_int_val") state parse_int_val { + packet.extract(hdr.int_val.next); + transition select(hdr.int_val.last.bos) { + 1w0: parse_int_val; + 1w1: parse_inner_ethernet; + } + } + @name(".parse_ipv4") state parse_ipv4 { + packet.extract(hdr.ipv4); + transition select(hdr.ipv4.fragOffset, hdr.ipv4.ihl, hdr.ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_udp; + (13w0x0, 4w0x5, 8w0x2f): parse_gre; + (13w0x0, 4w0x5, 8w0x4): parse_ipv4_in_ip; + (13w0x0, 4w0x5, 8w0x29): parse_ipv6_in_ip; + (13w0, 4w0, 8w2): parse_set_prio_med; + (13w0, 4w0, 8w88): parse_set_prio_med; + (13w0, 4w0, 8w89): parse_set_prio_med; + (13w0, 4w0, 8w103): parse_set_prio_med; + (13w0, 4w0, 8w112): parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv4_in_ip") state parse_ipv4_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv4; + } + @name(".parse_ipv6") state parse_ipv6 { + packet.extract(hdr.ipv6); + transition select(hdr.ipv6.nextHdr) { + 8w58: parse_icmp; + 8w6: parse_tcp; + 8w4: parse_ipv4_in_ip; + 8w17: parse_udp; + 8w47: parse_gre; + 8w41: parse_ipv6_in_ip; + 8w88: parse_set_prio_med; + 8w89: parse_set_prio_med; + 8w103: parse_set_prio_med; + 8w112: parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv6_in_ip") state parse_ipv6_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv6; + } + @name(".parse_lisp") state parse_lisp { + packet.extract(hdr.lisp); + transition select((packet.lookahead>())[3:0]) { + 4w0x4: parse_inner_ipv4; + 4w0x6: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_llc_header") state parse_llc_header { + packet.extract(hdr.llc_header); + transition select(hdr.llc_header.dsap, hdr.llc_header.ssap) { + (8w0xaa, 8w0xaa): parse_snap_header; + (8w0xfe, 8w0xfe): parse_set_prio_med; + default: accept; + } + } + @name(".parse_mpls") state parse_mpls { + packet.extract(hdr.mpls.next); + transition select(hdr.mpls.last.bos) { + 1w0: parse_mpls; + 1w1: parse_mpls_bos; + default: accept; + } + } + @name(".parse_mpls_bos") state parse_mpls_bos { + transition select((packet.lookahead>())[3:0]) { + 4w0x4: parse_mpls_inner_ipv4; + 4w0x6: parse_mpls_inner_ipv6; + default: parse_eompls; + } + } + @name(".parse_mpls_inner_ipv4") state parse_mpls_inner_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv4; + } + @name(".parse_mpls_inner_ipv6") state parse_mpls_inner_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv6; + } + @name(".parse_nsh") state parse_nsh { + packet.extract(hdr.nsh); + packet.extract(hdr.nsh_context); + transition select(hdr.nsh.protoType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + 16w0x6558: parse_inner_ethernet; + default: accept; + } + } + @name(".parse_nvgre") state parse_nvgre { + packet.extract(hdr.nvgre); + meta.tunnel_metadata.ingress_tunnel_type = 5w5; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.nvgre.tni; + transition parse_inner_ethernet; + } + @name(".parse_pw") state parse_pw { + transition accept; + } + @name(".parse_qinq") state parse_qinq { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8100: parse_qinq_vlan; + default: accept; + } + } + @name(".parse_qinq_vlan") state parse_qinq_vlan { + packet.extract(hdr.vlan_tag_[1]); + transition select(hdr.vlan_tag_[1].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_roce") state parse_roce { + packet.extract(hdr.roce); + transition accept; + } + @name(".parse_roce_v2") state parse_roce_v2 { + packet.extract(hdr.roce_v2); + transition accept; + } + @name(".parse_sctp") state parse_sctp { + packet.extract(hdr.sctp); + transition accept; + } + @name(".parse_set_prio_high") state parse_set_prio_high { + standard_metadata.priority = 3w5; + transition accept; + } + @name(".parse_set_prio_max") state parse_set_prio_max { + standard_metadata.priority = 3w7; + transition accept; + } + @name(".parse_set_prio_med") state parse_set_prio_med { + standard_metadata.priority = 3w3; + transition accept; + } + @name(".parse_sflow") state parse_sflow { + packet.extract(hdr.sflow); + transition accept; + } + @name(".parse_snap_header") state parse_snap_header { + packet.extract(hdr.snap_header); + transition select(hdr.snap_header.type_) { + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_tcp") state parse_tcp { + packet.extract(hdr.tcp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.tcp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.tcp.dstPort; + transition select(hdr.tcp.dstPort) { + 16w179: parse_set_prio_med; + 16w639: parse_set_prio_med; + default: accept; + } + } + @name(".parse_trill") state parse_trill { + packet.extract(hdr.trill); + transition parse_inner_ethernet; + } + @name(".parse_udp") state parse_udp { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w4789: parse_vxlan; + 16w6081: parse_geneve; + 16w4790: parse_vxlan_gpe; + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + 16w6343: parse_sflow; + default: accept; + } + } + @name(".parse_udp_v6") state parse_udp_v6 { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + default: accept; + } + } + @name(".parse_vlan") state parse_vlan { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_vntag") state parse_vntag { + packet.extract(hdr.vntag); + transition parse_inner_ethernet; + } + @name(".parse_vpls") state parse_vpls { + transition accept; + } + @name(".parse_vxlan") state parse_vxlan { + packet.extract(hdr.vxlan); + meta.tunnel_metadata.ingress_tunnel_type = 5w1; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.vxlan.vni; + transition parse_inner_ethernet; + } + @name(".parse_vxlan_gpe") state parse_vxlan_gpe { + packet.extract(hdr.vxlan_gpe); + meta.tunnel_metadata.ingress_tunnel_type = 5w12; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.vxlan_gpe.vni; + transition select(hdr.vxlan_gpe.flags, hdr.vxlan_gpe.next_proto) { + (8w0x8 &&& 8w0x8, 8w0x5 &&& 8w0xff): parse_gpe_int_header; + default: parse_inner_ethernet; + } + } + @name(".start") state start { + transition parse_ethernet; + } +} + +@name(".bd_action_profile") action_profile(32w1024) bd_action_profile; +@name(".ecmp_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w10) ecmp_action_profile; +@name(".fabric_lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) fabric_lag_action_profile; +@name(".lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) lag_action_profile; +control process_replication(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_replication.nop") action nop() { + } + @name(".process_replication.set_replica_copy_bridged") action set_replica_copy_bridged() { + meta.egress_metadata.routed = 1w0; + } + @name(".process_replication.outer_replica_from_rid") action outer_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w0; + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.outer_routed; + meta.egress_metadata.same_bd_check = (bit<16>)bd ^ (bit<16>)meta.ingress_metadata.outer_bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".process_replication.inner_replica_from_rid") action inner_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w1; + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.same_bd_check = (bit<16>)bd ^ (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".replica_type") table replica_type { + actions = { + nop; + set_replica_copy_bridged; + } + key = { + meta.multicast_metadata.replica : exact; + meta.egress_metadata.same_bd_check: ternary; + } + size = 512; + } + @name(".rid") table rid { + actions = { + nop; + outer_replica_from_rid; + inner_replica_from_rid; + } + key = { + standard_metadata.egress_rid: exact; + } + size = 1024; + } + apply { + if (standard_metadata.egress_rid != 16w0) { + rid.apply(); + replica_type.apply(); + } + } +} + +control process_vlan_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_decap.nop") action nop() { + } + @name(".process_vlan_decap.remove_vlan_single_tagged") action remove_vlan_single_tagged() { + hdr.ethernet.etherType = (bit<16>)hdr.vlan_tag_[0].etherType; + hdr.vlan_tag_[0].setInvalid(); + } + @name(".process_vlan_decap.remove_vlan_double_tagged") action remove_vlan_double_tagged() { + hdr.ethernet.etherType = (bit<16>)hdr.vlan_tag_[1].etherType; + hdr.vlan_tag_[0].setInvalid(); + hdr.vlan_tag_[1].setInvalid(); + } + @name(".vlan_decap") table vlan_decap { + actions = { + nop; + remove_vlan_single_tagged; + remove_vlan_double_tagged; + } + key = { + hdr.vlan_tag_[0].isValid(): exact; + hdr.vlan_tag_[1].isValid(): exact; + } + size = 1024; + } + apply { + vlan_decap.apply(); + } +} + +control process_tunnel_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_decap.decap_inner_udp") action decap_inner_udp() { + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_tcp") action decap_inner_tcp() { + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_icmp") action decap_inner_icmp() { + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_unknown") action decap_inner_unknown() { + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv4") action decap_vxlan_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.vxlan.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv6") action decap_vxlan_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_non_ip") action decap_vxlan_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv4") action decap_genv_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.genv.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv6") action decap_genv_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_non_ip") action decap_genv_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv4") action decap_nvgre_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv6") action decap_nvgre_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_non_ip") action decap_nvgre_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_gre_inner_ipv4") action decap_gre_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_gre_inner_ipv6") action decap_gre_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_gre_inner_non_ip") action decap_gre_inner_non_ip() { + hdr.ethernet.etherType = (bit<16>)hdr.gre.proto; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_ip_inner_ipv4") action decap_ip_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_ip_inner_ipv6") action decap_ip_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop1") action decap_mpls_inner_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop1") action decap_mpls_inner_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1") action decap_mpls_inner_ethernet_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1") action decap_mpls_inner_ethernet_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1") action decap_mpls_inner_ethernet_non_ip_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop2") action decap_mpls_inner_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop2") action decap_mpls_inner_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2") action decap_mpls_inner_ethernet_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2") action decap_mpls_inner_ethernet_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2") action decap_mpls_inner_ethernet_non_ip_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop3") action decap_mpls_inner_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop3") action decap_mpls_inner_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3") action decap_mpls_inner_ethernet_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3") action decap_mpls_inner_ethernet_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3") action decap_mpls_inner_ethernet_non_ip_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".tunnel_decap_process_inner") table tunnel_decap_process_inner { + actions = { + decap_inner_udp; + decap_inner_tcp; + decap_inner_icmp; + decap_inner_unknown; + } + key = { + hdr.inner_tcp.isValid() : exact; + hdr.inner_udp.isValid() : exact; + hdr.inner_icmp.isValid(): exact; + } + size = 1024; + } + @name(".tunnel_decap_process_outer") table tunnel_decap_process_outer { + actions = { + decap_vxlan_inner_ipv4; + decap_vxlan_inner_ipv6; + decap_vxlan_inner_non_ip; + decap_genv_inner_ipv4; + decap_genv_inner_ipv6; + decap_genv_inner_non_ip; + decap_nvgre_inner_ipv4; + decap_nvgre_inner_ipv6; + decap_nvgre_inner_non_ip; + decap_gre_inner_ipv4; + decap_gre_inner_ipv6; + decap_gre_inner_non_ip; + decap_ip_inner_ipv4; + decap_ip_inner_ipv6; + decap_mpls_inner_ipv4_pop1; + decap_mpls_inner_ipv6_pop1; + decap_mpls_inner_ethernet_ipv4_pop1; + decap_mpls_inner_ethernet_ipv6_pop1; + decap_mpls_inner_ethernet_non_ip_pop1; + decap_mpls_inner_ipv4_pop2; + decap_mpls_inner_ipv6_pop2; + decap_mpls_inner_ethernet_ipv4_pop2; + decap_mpls_inner_ethernet_ipv6_pop2; + decap_mpls_inner_ethernet_non_ip_pop2; + decap_mpls_inner_ipv4_pop3; + decap_mpls_inner_ipv6_pop3; + decap_mpls_inner_ethernet_ipv4_pop3; + decap_mpls_inner_ethernet_ipv6_pop3; + decap_mpls_inner_ethernet_non_ip_pop3; + } + key = { + meta.tunnel_metadata.ingress_tunnel_type: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w1) { + if (meta.multicast_metadata.inner_replica == 1w1 || meta.multicast_metadata.replica == 1w0) { + tunnel_decap_process_outer.apply(); + tunnel_decap_process_inner.apply(); + } + } + } +} + +control process_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_rewrite.nop") action nop() { + } + @name(".process_rewrite.set_l2_rewrite") action set_l2_rewrite() { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = (bit<16>)meta.ingress_metadata.bd; + } + @name(".process_rewrite.set_l2_rewrite_with_tunnel") action set_l2_rewrite_with_tunnel(bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_l3_rewrite") action set_l3_rewrite(bit<16> bd, bit<8> mtu_index, bit<48> dmac) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = (bit<16>)bd; + meta.l3_metadata.mtu_index = mtu_index; + } + @name(".process_rewrite.set_l3_rewrite_with_tunnel") action set_l3_rewrite_with_tunnel(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = (bit<16>)bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l2") action set_mpls_swap_push_rewrite_l2(bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + hdr.mpls[0].label = label; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_push_rewrite_l2") action set_mpls_push_rewrite_l2(bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l3") action set_mpls_swap_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + hdr.mpls[0].label = label; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.set_mpls_push_rewrite_l3") action set_mpls_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.rewrite_ipv4_multicast") action rewrite_ipv4_multicast() { + hdr.ethernet.dstAddr[22:0] = ((bit<48>)hdr.ipv4.dstAddr)[22:0]; + } + @name(".process_rewrite.rewrite_ipv6_multicast") action rewrite_ipv6_multicast() { + } + @name(".rewrite") table rewrite { + actions = { + nop; + set_l2_rewrite; + set_l2_rewrite_with_tunnel; + set_l3_rewrite; + set_l3_rewrite_with_tunnel; + set_mpls_swap_push_rewrite_l2; + set_mpls_push_rewrite_l2; + set_mpls_swap_push_rewrite_l3; + set_mpls_push_rewrite_l3; + } + key = { + meta.l3_metadata.nexthop_index: exact; + } + size = 1024; + } + @name(".rewrite_multicast") table rewrite_multicast { + actions = { + nop; + rewrite_ipv4_multicast; + rewrite_ipv6_multicast; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + } + apply { + if (meta.egress_metadata.routed == 1w0 || meta.l3_metadata.nexthop_index != 16w0) { + rewrite.apply(); + } else { + rewrite_multicast.apply(); + } + } +} + +control process_egress_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_bd.nop") action nop() { + } + @name(".process_egress_bd.set_egress_bd_properties") action set_egress_bd_properties(bit<9> smac_idx) { + meta.egress_metadata.smac_idx = smac_idx; + } + @name(".egress_bd_map") table egress_bd_map { + actions = { + nop; + set_egress_bd_properties; + } + key = { + meta.egress_metadata.bd: exact; + } + size = 1024; + } + apply { + egress_bd_map.apply(); + } +} + +control process_mac_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_rewrite.nop") action nop() { + } + @name(".process_mac_rewrite.ipv4_unicast_rewrite") action ipv4_unicast_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1; + } + @name(".process_mac_rewrite.ipv4_multicast_rewrite") action ipv4_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x1005e000000; + hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1; + } + @name(".process_mac_rewrite.ipv6_unicast_rewrite") action ipv6_unicast_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit - 8w1; + } + @name(".process_mac_rewrite.ipv6_multicast_rewrite") action ipv6_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x333300000000; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit - 8w1; + } + @name(".process_mac_rewrite.mpls_rewrite") action mpls_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.mpls[0].ttl = hdr.mpls[0].ttl - 8w1; + } + @name(".process_mac_rewrite.rewrite_smac") action rewrite_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".l3_rewrite") table l3_rewrite { + actions = { + nop; + ipv4_unicast_rewrite; + ipv4_multicast_rewrite; + ipv6_unicast_rewrite; + ipv6_multicast_rewrite; + mpls_rewrite; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + hdr.mpls[0].isValid() : exact; + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + } + @name(".smac_rewrite") table smac_rewrite { + actions = { + rewrite_smac; + } + key = { + meta.egress_metadata.smac_idx: exact; + } + size = 512; + } + apply { + if (meta.egress_metadata.routed == 1w1) { + l3_rewrite.apply(); + smac_rewrite.apply(); + } + } +} + +control process_mtu(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mtu.mtu_miss") action mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_mtu.ipv4_mtu_check") action ipv4_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)hdr.ipv4.totalLen; + } + @name(".process_mtu.ipv6_mtu_check") action ipv6_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)hdr.ipv6.payloadLen; + } + @name(".mtu") table mtu { + actions = { + mtu_miss; + ipv4_mtu_check; + ipv6_mtu_check; + } + key = { + meta.l3_metadata.mtu_index: exact; + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + } + size = 1024; + } + apply { + mtu.apply(); + } +} + +control process_int_insertion(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_insertion.int_set_header_0_bos") action int_set_header_0_bos() { + hdr.int_switch_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_1_bos") action int_set_header_1_bos() { + hdr.int_ingress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_2_bos") action int_set_header_2_bos() { + hdr.int_hop_latency_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_3_bos") action int_set_header_3_bos() { + hdr.int_q_occupancy_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_4_bos") action int_set_header_4_bos() { + hdr.int_ingress_tstamp_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_5_bos") action int_set_header_5_bos() { + hdr.int_egress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_6_bos") action int_set_header_6_bos() { + hdr.int_q_congestion_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_7_bos") action int_set_header_7_bos() { + hdr.int_egress_port_tx_utilization_header.bos = 1w1; + } + @name(".process_int_insertion.nop") action nop() { + } + @name(".process_int_insertion.int_transit") action int_transit(bit<32> switch_id) { + meta.int_metadata.insert_cnt = (bit<8>)hdr.int_header.max_hop_cnt - (bit<8>)hdr.int_header.total_hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = (bit<16>)(meta.int_metadata.instruction_cnt << 2); + meta.int_metadata.gpe_int_hdr_len8 = (bit<8>)hdr.int_header.ins_cnt; + } + @name(".process_int_insertion.int_src") action int_src(bit<32> switch_id, bit<8> hop_cnt, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407, bit<16> ins_byte_cnt, bit<8> total_words) { + meta.int_metadata.insert_cnt = hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = ins_byte_cnt; + meta.int_metadata.gpe_int_hdr_len8 = total_words; + hdr.int_header.setValid(); + hdr.int_header.ver = 2w0; + hdr.int_header.rep = 2w0; + hdr.int_header.c = 1w0; + hdr.int_header.e = 1w0; + hdr.int_header.rsvd1 = 5w0; + hdr.int_header.ins_cnt = ins_cnt; + hdr.int_header.max_hop_cnt = (bit<8>)hop_cnt; + hdr.int_header.total_hop_cnt = 8w0; + hdr.int_header.instruction_mask_0003 = ins_mask0003; + hdr.int_header.instruction_mask_0407 = ins_mask0407; + hdr.int_header.instruction_mask_0811 = 4w0; + hdr.int_header.instruction_mask_1215 = 4w0; + hdr.int_header.rsvd2 = 16w0; + } + @name(".process_int_insertion.int_reset") action int_reset() { + meta.int_metadata.switch_id = 32w0; + meta.int_metadata.insert_byte_cnt = 16w0; + meta.int_metadata.insert_cnt = 8w0; + meta.int_metadata.gpe_int_hdr_len8 = 8w0; + meta.int_metadata.gpe_int_hdr_len = 16w0; + meta.int_metadata.instruction_cnt = 16w0; + } + @name(".process_int_insertion.int_set_header_0003_i0") action int_set_header_0003_i0() { + } + @name(".process_int_insertion.int_set_header_3") action int_set_header_3() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + } + @name(".process_int_insertion.int_set_header_0003_i1") action int_set_header_0003_i1() { + int_set_header_3(); + } + @name(".process_int_insertion.int_set_header_2") action int_set_header_2() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i2") action int_set_header_0003_i2() { + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_0003_i3") action int_set_header_0003_i3() { + int_set_header_3(); + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_1") action int_set_header_1() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = (bit<16>)meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i4") action int_set_header_0003_i4() { + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i5") action int_set_header_0003_i5() { + int_set_header_3(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i6") action int_set_header_0003_i6() { + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i7") action int_set_header_0003_i7() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0") action int_set_header_0() { + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i8") action int_set_header_0003_i8() { + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i9") action int_set_header_0003_i9() { + int_set_header_3(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i10") action int_set_header_0003_i10() { + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i11") action int_set_header_0003_i11() { + int_set_header_3(); + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i12") action int_set_header_0003_i12() { + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i13") action int_set_header_0003_i13() { + int_set_header_3(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i14") action int_set_header_0003_i14() { + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i15") action int_set_header_0003_i15() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0407_i0") action int_set_header_0407_i0() { + } + @name(".process_int_insertion.int_set_header_7") action int_set_header_7() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i1") action int_set_header_0407_i1() { + int_set_header_7(); + } + @name(".process_int_insertion.int_set_header_6") action int_set_header_6() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i2") action int_set_header_0407_i2() { + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_0407_i3") action int_set_header_0407_i3() { + int_set_header_7(); + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_5") action int_set_header_5() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i4") action int_set_header_0407_i4() { + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i5") action int_set_header_0407_i5() { + int_set_header_7(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i6") action int_set_header_0407_i6() { + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i7") action int_set_header_0407_i7() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_4") action int_set_header_4() { + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i8") action int_set_header_0407_i8() { + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i9") action int_set_header_0407_i9() { + int_set_header_7(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i10") action int_set_header_0407_i10() { + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i11") action int_set_header_0407_i11() { + int_set_header_7(); + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i12") action int_set_header_0407_i12() { + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i13") action int_set_header_0407_i13() { + int_set_header_7(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i14") action int_set_header_0407_i14() { + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i15") action int_set_header_0407_i15() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_e_bit") action int_set_e_bit() { + hdr.int_header.e = 1w1; + } + @name(".process_int_insertion.int_update_total_hop_cnt") action int_update_total_hop_cnt() { + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 8w1; + } + @name(".int_bos") table int_bos { + actions = { + int_set_header_0_bos; + int_set_header_1_bos; + int_set_header_2_bos; + int_set_header_3_bos; + int_set_header_4_bos; + int_set_header_5_bos; + int_set_header_6_bos; + int_set_header_7_bos; + nop; + } + key = { + hdr.int_header.total_hop_cnt : ternary; + hdr.int_header.instruction_mask_0003: ternary; + hdr.int_header.instruction_mask_0407: ternary; + hdr.int_header.instruction_mask_0811: ternary; + hdr.int_header.instruction_mask_1215: ternary; + } + size = 17; + } + @name(".int_insert") table int_insert { + actions = { + int_transit; + int_src; + int_reset; + } + key = { + meta.int_metadata_i2e.source: ternary; + meta.int_metadata_i2e.sink : ternary; + hdr.int_header.isValid() : exact; + } + size = 3; + } + @name(".int_inst_0003") table int_inst_0003 { + actions = { + int_set_header_0003_i0; + int_set_header_0003_i1; + int_set_header_0003_i2; + int_set_header_0003_i3; + int_set_header_0003_i4; + int_set_header_0003_i5; + int_set_header_0003_i6; + int_set_header_0003_i7; + int_set_header_0003_i8; + int_set_header_0003_i9; + int_set_header_0003_i10; + int_set_header_0003_i11; + int_set_header_0003_i12; + int_set_header_0003_i13; + int_set_header_0003_i14; + int_set_header_0003_i15; + } + key = { + hdr.int_header.instruction_mask_0003: exact; + } + size = 17; + } + @name(".int_inst_0407") table int_inst_0407 { + actions = { + int_set_header_0407_i0; + int_set_header_0407_i1; + int_set_header_0407_i2; + int_set_header_0407_i3; + int_set_header_0407_i4; + int_set_header_0407_i5; + int_set_header_0407_i6; + int_set_header_0407_i7; + int_set_header_0407_i8; + int_set_header_0407_i9; + int_set_header_0407_i10; + int_set_header_0407_i11; + int_set_header_0407_i12; + int_set_header_0407_i13; + int_set_header_0407_i14; + int_set_header_0407_i15; + nop; + } + key = { + hdr.int_header.instruction_mask_0407: exact; + } + size = 17; + } + @name(".int_inst_0811") table int_inst_0811 { + actions = { + nop; + } + key = { + hdr.int_header.instruction_mask_0811: exact; + } + size = 16; + } + @name(".int_inst_1215") table int_inst_1215 { + actions = { + nop; + } + key = { + hdr.int_header.instruction_mask_1215: exact; + } + size = 17; + } + @name(".int_meta_header_update") table int_meta_header_update { + actions = { + int_set_e_bit; + int_update_total_hop_cnt; + } + key = { + meta.int_metadata.insert_cnt: ternary; + } + size = 2; + } + apply { + switch (int_insert.apply().action_run) { + int_transit: { + if (meta.int_metadata.insert_cnt != 8w0) { + int_inst_0003.apply(); + int_inst_0407.apply(); + int_inst_0811.apply(); + int_inst_1215.apply(); + int_bos.apply(); + } + int_meta_header_update.apply(); + } + } + } +} + +control process_egress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress_bd_stats") @min_width(32) direct_counter(CounterType.packets_and_bytes) egress_bd_stats; + @name(".process_egress_bd_stats.nop") action nop() { + } + @name(".process_egress_bd_stats.nop_0") action nop_0() { + egress_bd_stats.count(); + } + @name(".egress_bd_stats") table egress_bd_stats_0 { + actions = { + nop_0; + } + key = { + meta.egress_metadata.bd : exact; + meta.l2_metadata.lkp_pkt_type: exact; + } + size = 1024; + counters = egress_bd_stats; + } + apply { + egress_bd_stats_0.apply(); + } +} + +control process_tunnel_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_encap.nop") action nop() { + } + @name(".process_tunnel_encap.set_egress_tunnel_vni") action set_egress_tunnel_vni(bit<24> vnid) { + meta.tunnel_metadata.vnid = vnid; + } + @name(".process_tunnel_encap.rewrite_tunnel_dmac") action rewrite_tunnel_dmac(bit<48> dmac) { + hdr.ethernet.dstAddr = dmac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_dst") action rewrite_tunnel_ipv4_dst(bit<32> ip) { + hdr.ipv4.dstAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_dst") action rewrite_tunnel_ipv6_dst(bit<128> ip) { + hdr.ipv6.dstAddr = ip; + } + @name(".process_tunnel_encap.inner_ipv4_udp_rewrite") action inner_ipv4_udp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.udp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_tcp_rewrite") action inner_ipv4_tcp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.tcp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_icmp_rewrite") action inner_ipv4_icmp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.icmp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_unknown_rewrite") action inner_ipv4_unknown_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv6_udp_rewrite") action inner_ipv6_udp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_tcp_rewrite") action inner_ipv6_tcp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.tcp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_icmp_rewrite") action inner_ipv6_icmp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.icmp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_unknown_rewrite") action inner_ipv6_unknown_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_non_ip_rewrite") action inner_non_ip_rewrite() { + meta.egress_metadata.payload_length = (bit<16>)standard_metadata.packet_length + 16w65522; + } + @name(".process_tunnel_encap.f_insert_vxlan_header") action f_insert_vxlan_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = (bit<16>)meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.vxlan.reserved2 = 8w0; + } + @name(".process_tunnel_encap.f_insert_ipv4_header") action f_insert_ipv4_header(bit<8> proto) { + hdr.ipv4.setValid(); + hdr.ipv4.protocol = (bit<8>)proto; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + } + @name(".process_tunnel_encap.ipv4_vxlan_rewrite") action ipv4_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_genv_header") action f_insert_genv_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = (bit<16>)meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + } + @name(".process_tunnel_encap.ipv4_genv_rewrite") action ipv4_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_nvgre_header") action f_insert_nvgre_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.nvgre.flow_id[7:0] = ((bit<8>)meta.hash_metadata.entropy_hash)[7:0]; + } + @name(".process_tunnel_encap.ipv4_nvgre_rewrite") action ipv4_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w42; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_gre_header") action f_insert_gre_header() { + hdr.gre.setValid(); + } + @name(".process_tunnel_encap.ipv4_gre_rewrite") action ipv4_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = (bit<16>)hdr.ethernet.etherType; + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w24; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_ip_rewrite") action ipv4_ip_rewrite() { + f_insert_ipv4_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w20; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_erspan_t3_header") action f_insert_erspan_t3_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = (bit<32>)meta.i2e_metadata.ingress_tstamp; + hdr.erspan_t3_header.span_id = (bit<10>)meta.i2e_metadata.mirror_session_id; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + } + @name(".process_tunnel_encap.ipv4_erspan_t3_rewrite") action ipv4_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + } + @name(".process_tunnel_encap.f_insert_ipv6_header") action f_insert_ipv6_header(bit<8> proto) { + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = (bit<8>)proto; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + } + @name(".process_tunnel_encap.ipv6_gre_rewrite") action ipv6_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = (bit<16>)hdr.ethernet.etherType; + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w4; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_ip_rewrite") action ipv6_ip_rewrite() { + f_insert_ipv6_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_nvgre_rewrite") action ipv6_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w22; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_vxlan_rewrite") action ipv6_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_genv_rewrite") action ipv6_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_erspan_t3_rewrite") action ipv6_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w26; + } + @name(".process_tunnel_encap.mpls_ethernet_push1_rewrite") action mpls_ethernet_push1_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push1_rewrite") action mpls_ip_push1_rewrite() { + { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push2_rewrite") action mpls_ethernet_push2_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push2_rewrite") action mpls_ip_push2_rewrite() { + { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push3_rewrite") action mpls_ethernet_push3_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push3_rewrite") action mpls_ip_push3_rewrite() { + { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.fabric_rewrite") action fabric_rewrite(bit<14> tunnel_index) { + meta.tunnel_metadata.tunnel_index = tunnel_index; + } + @name(".process_tunnel_encap.tunnel_mtu_check") action tunnel_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)meta.egress_metadata.payload_length; + } + @name(".process_tunnel_encap.tunnel_mtu_miss") action tunnel_mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_tunnel_encap.set_tunnel_rewrite_details") action set_tunnel_rewrite_details(bit<16> outer_bd, bit<9> smac_idx, bit<14> dmac_idx, bit<9> sip_index, bit<14> dip_index) { + meta.egress_metadata.outer_bd = outer_bd; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + meta.tunnel_metadata.tunnel_src_index = sip_index; + meta.tunnel_metadata.tunnel_dst_index = dip_index; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push1") action set_mpls_rewrite_push1(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].bos = 1w0x1; + hdr.mpls[0].ttl = ttl1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push2") action set_mpls_rewrite_push2(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push3") action set_mpls_rewrite_push3(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<20> label3, bit<3> exp3, bit<8> ttl3, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x0; + hdr.mpls[2].label = label3; + hdr.mpls[2].exp = exp3; + hdr.mpls[2].ttl = ttl3; + hdr.mpls[2].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.cpu_rx_rewrite") action cpu_rx_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w5; + hdr.fabric_header_cpu.setValid(); + hdr.fabric_header_cpu.ingressPort = (bit<16>)meta.ingress_metadata.ingress_port; + hdr.fabric_header_cpu.ingressIfindex = (bit<16>)meta.ingress_metadata.ifindex; + hdr.fabric_header_cpu.ingressBd = (bit<16>)meta.ingress_metadata.bd; + hdr.fabric_header_cpu.reasonCode = (bit<16>)meta.fabric_metadata.reason_code; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_unicast_rewrite") action fabric_unicast_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w1; + hdr.fabric_header.dstDevice = (bit<8>)meta.fabric_metadata.dst_device; + hdr.fabric_header.dstPortOrGroup = (bit<16>)meta.fabric_metadata.dst_port; + hdr.fabric_header_unicast.setValid(); + hdr.fabric_header_unicast.tunnelTerminate = (bit<1>)meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_unicast.routed = (bit<1>)meta.l3_metadata.routed; + hdr.fabric_header_unicast.outerRouted = (bit<1>)meta.l3_metadata.outer_routed; + hdr.fabric_header_unicast.ingressTunnelType = (bit<5>)meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_unicast.nexthopIndex = (bit<16>)meta.l3_metadata.nexthop_index; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_multicast_rewrite") action fabric_multicast_rewrite(bit<16> fabric_mgid) { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w2; + hdr.fabric_header.dstDevice = 8w127; + hdr.fabric_header.dstPortOrGroup = fabric_mgid; + hdr.fabric_header_multicast.ingressIfindex = (bit<16>)meta.ingress_metadata.ifindex; + hdr.fabric_header_multicast.ingressBd = (bit<16>)meta.ingress_metadata.bd; + hdr.fabric_header_multicast.setValid(); + hdr.fabric_header_multicast.tunnelTerminate = (bit<1>)meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_multicast.routed = (bit<1>)meta.l3_metadata.routed; + hdr.fabric_header_multicast.outerRouted = (bit<1>)meta.l3_metadata.outer_routed; + hdr.fabric_header_multicast.ingressTunnelType = (bit<5>)meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_multicast.mcastGrp = (bit<16>)meta.multicast_metadata.mcast_grp; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.rewrite_tunnel_smac") action rewrite_tunnel_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_src") action rewrite_tunnel_ipv4_src(bit<32> ip) { + hdr.ipv4.srcAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_src") action rewrite_tunnel_ipv6_src(bit<128> ip) { + hdr.ipv6.srcAddr = ip; + } + @name(".egress_vni") table egress_vni { + actions = { + nop; + set_egress_tunnel_vni; + } + key = { + meta.egress_metadata.bd : exact; + meta.tunnel_metadata.egress_tunnel_type: exact; + } + size = 1024; + } + @name(".tunnel_dmac_rewrite") table tunnel_dmac_rewrite { + actions = { + nop; + rewrite_tunnel_dmac; + } + key = { + meta.tunnel_metadata.tunnel_dmac_index: exact; + } + size = 1024; + } + @name(".tunnel_dst_rewrite") table tunnel_dst_rewrite { + actions = { + nop; + rewrite_tunnel_ipv4_dst; + rewrite_tunnel_ipv6_dst; + } + key = { + meta.tunnel_metadata.tunnel_dst_index: exact; + } + size = 1024; + } + @name(".tunnel_encap_process_inner") table tunnel_encap_process_inner { + actions = { + inner_ipv4_udp_rewrite; + inner_ipv4_tcp_rewrite; + inner_ipv4_icmp_rewrite; + inner_ipv4_unknown_rewrite; + inner_ipv6_udp_rewrite; + inner_ipv6_tcp_rewrite; + inner_ipv6_icmp_rewrite; + inner_ipv6_unknown_rewrite; + inner_non_ip_rewrite; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + hdr.tcp.isValid() : exact; + hdr.udp.isValid() : exact; + hdr.icmp.isValid(): exact; + } + size = 1024; + } + @name(".tunnel_encap_process_outer") table tunnel_encap_process_outer { + actions = { + nop; + ipv4_vxlan_rewrite; + ipv4_genv_rewrite; + ipv4_nvgre_rewrite; + ipv4_gre_rewrite; + ipv4_ip_rewrite; + ipv4_erspan_t3_rewrite; + ipv6_gre_rewrite; + ipv6_ip_rewrite; + ipv6_nvgre_rewrite; + ipv6_vxlan_rewrite; + ipv6_genv_rewrite; + ipv6_erspan_t3_rewrite; + mpls_ethernet_push1_rewrite; + mpls_ip_push1_rewrite; + mpls_ethernet_push2_rewrite; + mpls_ip_push2_rewrite; + mpls_ethernet_push3_rewrite; + mpls_ip_push3_rewrite; + fabric_rewrite; + } + key = { + meta.tunnel_metadata.egress_tunnel_type : exact; + meta.tunnel_metadata.egress_header_count: exact; + meta.multicast_metadata.replica : exact; + } + size = 1024; + } + @name(".tunnel_mtu") table tunnel_mtu { + actions = { + tunnel_mtu_check; + tunnel_mtu_miss; + } + key = { + meta.tunnel_metadata.tunnel_index: exact; + } + size = 1024; + } + @name(".tunnel_rewrite") table tunnel_rewrite { + actions = { + nop; + set_tunnel_rewrite_details; + set_mpls_rewrite_push1; + set_mpls_rewrite_push2; + set_mpls_rewrite_push3; + cpu_rx_rewrite; + fabric_unicast_rewrite; + fabric_multicast_rewrite; + } + key = { + meta.tunnel_metadata.tunnel_index: exact; + } + size = 1024; + } + @name(".tunnel_smac_rewrite") table tunnel_smac_rewrite { + actions = { + nop; + rewrite_tunnel_smac; + } + key = { + meta.tunnel_metadata.tunnel_smac_index: exact; + } + size = 1024; + } + @name(".tunnel_src_rewrite") table tunnel_src_rewrite { + actions = { + nop; + rewrite_tunnel_ipv4_src; + rewrite_tunnel_ipv6_src; + } + key = { + meta.tunnel_metadata.tunnel_src_index: exact; + } + size = 1024; + } + apply { + if (meta.fabric_metadata.fabric_header_present == 1w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0) { + egress_vni.apply(); + if (meta.tunnel_metadata.egress_tunnel_type != 5w15 && meta.tunnel_metadata.egress_tunnel_type != 5w16) { + tunnel_encap_process_inner.apply(); + } + tunnel_encap_process_outer.apply(); + tunnel_rewrite.apply(); + tunnel_mtu.apply(); + tunnel_src_rewrite.apply(); + tunnel_dst_rewrite.apply(); + tunnel_smac_rewrite.apply(); + tunnel_dmac_rewrite.apply(); + } + } +} + +control process_int_outer_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_outer_encap.int_update_vxlan_gpe_ipv4") action int_update_vxlan_gpe_ipv4() { + hdr.ipv4.totalLen = hdr.ipv4.totalLen + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.vxlan_gpe_int_header.len = hdr.vxlan_gpe_int_header.len + (bit<8>)meta.int_metadata.gpe_int_hdr_len8; + } + @name(".process_int_outer_encap.int_add_update_vxlan_gpe_ipv4") action int_add_update_vxlan_gpe_ipv4() { + hdr.vxlan_gpe_int_header.setValid(); + hdr.vxlan_gpe_int_header.int_type = 8w0x1; + hdr.vxlan_gpe_int_header.next_proto = 8w3; + hdr.vxlan_gpe.next_proto = 8w5; + hdr.vxlan_gpe_int_header.len = (bit<8>)meta.int_metadata.gpe_int_hdr_len8; + hdr.ipv4.totalLen = hdr.ipv4.totalLen + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + (bit<16>)meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_outer_encap.nop") action nop() { + } + @name(".int_outer_encap") table int_outer_encap { + actions = { + int_update_vxlan_gpe_ipv4; + int_add_update_vxlan_gpe_ipv4; + nop; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.vxlan_gpe.isValid() : exact; + meta.int_metadata_i2e.source : exact; + meta.tunnel_metadata.egress_tunnel_type: ternary; + } + size = 8; + } + apply { + if (meta.int_metadata.insert_cnt != 8w0) { + int_outer_encap.apply(); + } + } +} + +control process_vlan_xlate(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_xlate.set_egress_packet_vlan_untagged") action set_egress_packet_vlan_untagged() { + } + @name(".process_vlan_xlate.set_egress_packet_vlan_tagged") action set_egress_packet_vlan_tagged(bit<12> vlan_id) { + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[0].etherType = (bit<16>)hdr.ethernet.etherType; + hdr.vlan_tag_[0].vid = vlan_id; + hdr.ethernet.etherType = 16w0x8100; + } + @name(".process_vlan_xlate.set_egress_packet_vlan_double_tagged") action set_egress_packet_vlan_double_tagged(bit<12> s_tag, bit<12> c_tag) { + hdr.vlan_tag_[1].setValid(); + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[1].etherType = (bit<16>)hdr.ethernet.etherType; + hdr.vlan_tag_[1].vid = c_tag; + hdr.vlan_tag_[0].etherType = 16w0x8100; + hdr.vlan_tag_[0].vid = s_tag; + hdr.ethernet.etherType = 16w0x9100; + } + @name(".egress_vlan_xlate") table egress_vlan_xlate { + actions = { + set_egress_packet_vlan_untagged; + set_egress_packet_vlan_tagged; + set_egress_packet_vlan_double_tagged; + } + key = { + meta.egress_metadata.ifindex: exact; + meta.egress_metadata.bd : exact; + } + size = 1024; + } + apply { + egress_vlan_xlate.apply(); + } +} + +control process_egress_filter(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_filter.egress_filter_check") action egress_filter_check() { + meta.egress_filter_metadata.ifindex_check = (bit<16>)meta.ingress_metadata.ifindex ^ (bit<16>)meta.egress_metadata.ifindex; + meta.egress_filter_metadata.bd = (bit<16>)meta.ingress_metadata.outer_bd ^ (bit<16>)meta.egress_metadata.outer_bd; + meta.egress_filter_metadata.inner_bd = (bit<16>)meta.ingress_metadata.bd ^ (bit<16>)meta.egress_metadata.bd; + } + @name(".process_egress_filter.set_egress_filter_drop") action set_egress_filter_drop() { + mark_to_drop(standard_metadata); + } + @name(".egress_filter") table egress_filter { + actions = { + egress_filter_check; + } + } + @name(".egress_filter_drop") table egress_filter_drop { + actions = { + set_egress_filter_drop; + } + } + apply { + egress_filter.apply(); + if (meta.multicast_metadata.inner_replica == 1w1) { + if (meta.tunnel_metadata.ingress_tunnel_type == 5w0 && meta.tunnel_metadata.egress_tunnel_type == 5w0 && meta.egress_filter_metadata.bd == 16w0 && meta.egress_filter_metadata.ifindex_check == 16w0 || meta.tunnel_metadata.ingress_tunnel_type != 5w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0 && meta.egress_filter_metadata.inner_bd == 16w0) { + egress_filter_drop.apply(); + } + } + } +} + +control process_egress_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_acl.nop") action nop() { + } + @name(".process_egress_acl.egress_mirror") action egress_mirror(bit<32> session_id) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + clone_preserving_field_list(CloneType.E2E, (bit<32>)session_id, (bit<8>)FieldLists.e2e_mirror_info); + } + @name(".process_egress_acl.egress_mirror_drop") action egress_mirror_drop(bit<32> session_id) { + egress_mirror(session_id); + mark_to_drop(standard_metadata); + } + @name(".process_egress_acl.egress_copy_to_cpu") action egress_copy_to_cpu(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.E2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_egress_acl.egress_redirect_to_cpu") action egress_redirect_to_cpu(bit<16> reason_code) { + egress_copy_to_cpu(reason_code); + mark_to_drop(standard_metadata); + } + @name(".egress_acl") table egress_acl { + actions = { + nop; + egress_mirror; + egress_mirror_drop; + egress_redirect_to_cpu; + } + key = { + standard_metadata.egress_port: ternary; + meta.l3_metadata.l3_mtu_check: ternary; + } + size = 512; + } + apply { + if (meta.egress_metadata.bypass == 1w0) { + egress_acl.apply(); + } + } +} + +control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress.egress_port_type_normal") action egress_port_type_normal(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w0; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_fabric") action egress_port_type_fabric(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w1; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w15; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_cpu") action egress_port_type_cpu(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w2; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w16; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.nop") action nop() { + } + @name(".egress.set_mirror_nhop") action set_mirror_nhop(bit<16> nhop_idx) { + meta.l3_metadata.nexthop_index = nhop_idx; + } + @name(".egress.set_mirror_bd") action set_mirror_bd(bit<16> bd) { + meta.egress_metadata.bd = bd; + } + @name(".egress.sflow_pkt_to_cpu") action sflow_pkt_to_cpu() { + hdr.fabric_header_sflow.setValid(); + hdr.fabric_header_sflow.sflow_session_id = (bit<16>)meta.sflow_metadata.sflow_session_id; + } + @name(".egress_port_mapping") table egress_port_mapping { + actions = { + egress_port_type_normal; + egress_port_type_fabric; + egress_port_type_cpu; + } + key = { + standard_metadata.egress_port: exact; + } + size = 288; + } + @name(".mirror") table mirror { + actions = { + nop; + set_mirror_nhop; + set_mirror_bd; + sflow_pkt_to_cpu; + } + key = { + meta.i2e_metadata.mirror_session_id: exact; + } + size = 1024; + } + @name(".process_replication") process_replication() process_replication_0; + @name(".process_vlan_decap") process_vlan_decap() process_vlan_decap_0; + @name(".process_tunnel_decap") process_tunnel_decap() process_tunnel_decap_0; + @name(".process_rewrite") process_rewrite() process_rewrite_0; + @name(".process_egress_bd") process_egress_bd() process_egress_bd_0; + @name(".process_mac_rewrite") process_mac_rewrite() process_mac_rewrite_0; + @name(".process_mtu") process_mtu() process_mtu_0; + @name(".process_int_insertion") process_int_insertion() process_int_insertion_0; + @name(".process_egress_bd_stats") process_egress_bd_stats() process_egress_bd_stats_0; + @name(".process_tunnel_encap") process_tunnel_encap() process_tunnel_encap_0; + @name(".process_int_outer_encap") process_int_outer_encap() process_int_outer_encap_0; + @name(".process_vlan_xlate") process_vlan_xlate() process_vlan_xlate_0; + @name(".process_egress_filter") process_egress_filter() process_egress_filter_0; + @name(".process_egress_acl") process_egress_acl() process_egress_acl_0; + apply { + if (meta.egress_metadata.bypass == 1w0) { + if (standard_metadata.instance_type != 32w0 && standard_metadata.instance_type != 32w5) { + mirror.apply(); + } else { + process_replication_0.apply(hdr, meta, standard_metadata); + } + switch (egress_port_mapping.apply().action_run) { + egress_port_type_normal: { + if (standard_metadata.instance_type == 32w0 || standard_metadata.instance_type == 32w5) { + process_vlan_decap_0.apply(hdr, meta, standard_metadata); + } + process_tunnel_decap_0.apply(hdr, meta, standard_metadata); + process_rewrite_0.apply(hdr, meta, standard_metadata); + process_egress_bd_0.apply(hdr, meta, standard_metadata); + process_mac_rewrite_0.apply(hdr, meta, standard_metadata); + process_mtu_0.apply(hdr, meta, standard_metadata); + process_int_insertion_0.apply(hdr, meta, standard_metadata); + process_egress_bd_stats_0.apply(hdr, meta, standard_metadata); + } + } + process_tunnel_encap_0.apply(hdr, meta, standard_metadata); + process_int_outer_encap_0.apply(hdr, meta, standard_metadata); + if (meta.egress_metadata.port_type == 2w0) { + process_vlan_xlate_0.apply(hdr, meta, standard_metadata); + } + process_egress_filter_0.apply(hdr, meta, standard_metadata); + } + process_egress_acl_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ingress_port_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_port_mapping.set_ifindex") action set_ifindex(bit<16> ifindex, bit<2> port_type) { + meta.ingress_metadata.ifindex = ifindex; + meta.ingress_metadata.port_type = port_type; + } + @name(".process_ingress_port_mapping.set_ingress_port_properties") action set_ingress_port_properties(bit<16> if_label) { + meta.acl_metadata.if_label = if_label; + } + @name(".ingress_port_mapping") table ingress_port_mapping { + actions = { + set_ifindex; + } + key = { + standard_metadata.ingress_port: exact; + } + size = 288; + } + @name(".ingress_port_properties") table ingress_port_properties { + actions = { + set_ingress_port_properties; + } + key = { + standard_metadata.ingress_port: exact; + } + size = 288; + } + apply { + ingress_port_mapping.apply(); + ingress_port_properties.apply(); + } +} + +control validate_outer_ipv4_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv4_header.set_valid_outer_ipv4_packet") action set_valid_outer_ipv4_packet() { + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.ipv4.diffserv; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.ipv4.version; + } + @name(".validate_outer_ipv4_header.set_malformed_outer_ipv4_packet") action set_malformed_outer_ipv4_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv4_packet") table validate_outer_ipv4_packet { + actions = { + set_valid_outer_ipv4_packet; + set_malformed_outer_ipv4_packet; + } + key = { + hdr.ipv4.version : ternary; + hdr.ipv4.ttl : ternary; + hdr.ipv4.srcAddr[31:24]: ternary @name("ipv4.srcAddr"); + } + size = 512; + } + apply { + validate_outer_ipv4_packet.apply(); + } +} + +control validate_outer_ipv6_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv6_header.set_valid_outer_ipv6_packet") action set_valid_outer_ipv6_packet() { + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.ipv6.trafficClass; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.ipv6.version; + } + @name(".validate_outer_ipv6_header.set_malformed_outer_ipv6_packet") action set_malformed_outer_ipv6_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv6_packet") table validate_outer_ipv6_packet { + actions = { + set_valid_outer_ipv6_packet; + set_malformed_outer_ipv6_packet; + } + key = { + hdr.ipv6.version : ternary; + hdr.ipv6.hopLimit : ternary; + hdr.ipv6.srcAddr[127:112]: ternary @name("ipv6.srcAddr"); + } + size = 512; + } + apply { + validate_outer_ipv6_packet.apply(); + } +} + +control validate_mpls_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_mpls_header.set_valid_mpls_label1") action set_valid_mpls_label1() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[0].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[0].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label2") action set_valid_mpls_label2() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[1].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[1].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label3") action set_valid_mpls_label3() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[2].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[2].exp; + } + @name(".validate_mpls_packet") table validate_mpls_packet { + actions = { + set_valid_mpls_label1; + set_valid_mpls_label2; + set_valid_mpls_label3; + } + key = { + hdr.mpls[0].label : ternary; + hdr.mpls[0].bos : ternary; + hdr.mpls[0].isValid(): exact; + hdr.mpls[1].label : ternary; + hdr.mpls[1].bos : ternary; + hdr.mpls[1].isValid(): exact; + hdr.mpls[2].label : ternary; + hdr.mpls[2].bos : ternary; + hdr.mpls[2].isValid(): exact; + } + size = 512; + } + apply { + validate_mpls_packet.apply(); + } +} + +control process_validate_outer_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_outer_header.malformed_outer_ethernet_packet") action malformed_outer_ethernet_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_untagged") action set_valid_outer_unicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged") action set_valid_outer_unicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged") action set_valid_outer_unicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged") action set_valid_outer_unicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_untagged") action set_valid_outer_multicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged") action set_valid_outer_multicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged") action set_valid_outer_multicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged") action set_valid_outer_multicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_untagged") action set_valid_outer_broadcast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged") action set_valid_outer_broadcast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged") action set_valid_outer_broadcast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged") action set_valid_outer_broadcast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".validate_outer_ethernet") table validate_outer_ethernet { + actions = { + malformed_outer_ethernet_packet; + set_valid_outer_unicast_packet_untagged; + set_valid_outer_unicast_packet_single_tagged; + set_valid_outer_unicast_packet_double_tagged; + set_valid_outer_unicast_packet_qinq_tagged; + set_valid_outer_multicast_packet_untagged; + set_valid_outer_multicast_packet_single_tagged; + set_valid_outer_multicast_packet_double_tagged; + set_valid_outer_multicast_packet_qinq_tagged; + set_valid_outer_broadcast_packet_untagged; + set_valid_outer_broadcast_packet_single_tagged; + set_valid_outer_broadcast_packet_double_tagged; + set_valid_outer_broadcast_packet_qinq_tagged; + } + key = { + hdr.ethernet.srcAddr : ternary; + hdr.ethernet.dstAddr : ternary; + hdr.vlan_tag_[0].isValid(): exact; + hdr.vlan_tag_[1].isValid(): exact; + } + size = 512; + } + @name(".validate_outer_ipv4_header") validate_outer_ipv4_header() validate_outer_ipv4_header_0; + @name(".validate_outer_ipv6_header") validate_outer_ipv6_header() validate_outer_ipv6_header_0; + @name(".validate_mpls_header") validate_mpls_header() validate_mpls_header_0; + apply { + switch (validate_outer_ethernet.apply().action_run) { + malformed_outer_ethernet_packet: { + } + default: { + if (hdr.ipv4.isValid()) { + validate_outer_ipv4_header_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + validate_outer_ipv6_header_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.mpls[0].isValid()) { + validate_mpls_header_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + } +} + +control process_global_params(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_global_params.deflect_on_drop") action deflect_on_drop(bit<8> enable_dod) { + } + @name(".process_global_params.set_config_parameters") action set_config_parameters(bit<8> enable_dod) { + deflect_on_drop(enable_dod); + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + meta.ingress_metadata.ingress_port = (bit<9>)standard_metadata.ingress_port; + meta.l2_metadata.same_if_check = (bit<16>)meta.ingress_metadata.ifindex; + standard_metadata.egress_spec = 9w511; + random(meta.ingress_metadata.sflow_take_sample, (bit<32>)0, 32w0x7fffffff); + } + @name(".switch_config_params") table switch_config_params { + actions = { + set_config_parameters; + } + size = 1; + } + apply { + switch_config_params.apply(); + } +} + +control process_port_vlan_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_port_vlan_mapping.set_bd_properties") action set_bd_properties(bit<16> bd, bit<16> vrf, bit<10> stp_group, bit<1> learning_enabled, bit<16> bd_label, bit<16> stats_idx, bit<10> rmac_group, bit<1> ipv4_unicast_enabled, bit<1> ipv6_unicast_enabled, bit<2> ipv4_urpf_mode, bit<2> ipv6_urpf_mode, bit<1> igmp_snooping_enabled, bit<1> mld_snooping_enabled, bit<1> ipv4_multicast_enabled, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group, bit<16> ipv4_mcast_key, bit<1> ipv4_mcast_key_type, bit<16> ipv6_mcast_key, bit<1> ipv6_mcast_key_type) { + meta.ingress_metadata.bd = bd; + meta.ingress_metadata.outer_bd = (bit<16>)bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.stp_group = stp_group; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l2_metadata.learning_enabled = learning_enabled; + meta.l3_metadata.vrf = vrf; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_mcast_key_type = ipv4_mcast_key_type; + meta.multicast_metadata.ipv4_mcast_key = ipv4_mcast_key; + meta.multicast_metadata.ipv6_mcast_key_type = ipv6_mcast_key_type; + meta.multicast_metadata.ipv6_mcast_key = ipv6_mcast_key; + } + @name(".process_port_vlan_mapping.port_vlan_mapping_miss") action port_vlan_mapping_miss() { + meta.l2_metadata.port_vlan_mapping_miss = 1w1; + } + @name(".port_vlan_mapping") table port_vlan_mapping { + actions = { + set_bd_properties; + port_vlan_mapping_miss; + } + key = { + meta.ingress_metadata.ifindex: exact; + hdr.vlan_tag_[0].isValid() : exact; + hdr.vlan_tag_[0].vid : exact; + hdr.vlan_tag_[1].isValid() : exact; + hdr.vlan_tag_[1].vid : exact; + } + size = 4096; + implementation = bd_action_profile; + } + apply { + port_vlan_mapping.apply(); + } +} + +control process_spanning_tree(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_spanning_tree.set_stp_state") action set_stp_state(bit<3> stp_state) { + meta.l2_metadata.stp_state = stp_state; + } + @name(".spanning_tree") table spanning_tree { + actions = { + set_stp_state; + } + key = { + meta.ingress_metadata.ifindex: exact; + meta.l2_metadata.stp_group : exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.l2_metadata.stp_group != 10w0) { + spanning_tree.apply(); + } + } +} + +control process_ip_sourceguard(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_sourceguard.on_miss") action on_miss() { + } + @name(".process_ip_sourceguard.ipsg_miss") action ipsg_miss() { + meta.security_metadata.ipsg_check_fail = 1w1; + } + @name(".ipsg") table ipsg { + actions = { + on_miss; + } + key = { + meta.ingress_metadata.ifindex : exact; + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_sa : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + } + size = 1024; + } + @name(".ipsg_permit_special") table ipsg_permit_special { + actions = { + ipsg_miss; + } + key = { + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.security_metadata.ipsg_enabled == 1w1) { + switch (ipsg.apply().action_run) { + on_miss: { + ipsg_permit_special.apply(); + } + } + } + } +} + +control process_int_endpoint(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_endpoint.int_sink_update_vxlan_gpe_v4") action int_sink_update_vxlan_gpe_v4() { + hdr.vxlan_gpe.next_proto = (bit<8>)hdr.vxlan_gpe_int_header.next_proto; + hdr.vxlan_gpe_int_header.setInvalid(); + hdr.ipv4.totalLen = hdr.ipv4.totalLen - (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ - (bit<16>)meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_endpoint.nop") action nop() { + } + @name(".process_int_endpoint.int_set_src") action int_set_src() { + meta.int_metadata_i2e.source = 1w1; + } + @name(".process_int_endpoint.int_set_no_src") action int_set_no_src() { + meta.int_metadata_i2e.source = 1w0; + } + @name(".process_int_endpoint.int_sink") action int_sink(bit<32> mirror_id) { + meta.int_metadata_i2e.sink = 1w1; + meta.i2e_metadata.mirror_session_id = (bit<16>)mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)mirror_id, (bit<8>)FieldLists.int_i2e_mirror_info); + hdr.int_header.setInvalid(); + hdr.int_val[0].setInvalid(); + hdr.int_val[1].setInvalid(); + hdr.int_val[2].setInvalid(); + hdr.int_val[3].setInvalid(); + hdr.int_val[4].setInvalid(); + hdr.int_val[5].setInvalid(); + hdr.int_val[6].setInvalid(); + hdr.int_val[7].setInvalid(); + hdr.int_val[8].setInvalid(); + hdr.int_val[9].setInvalid(); + hdr.int_val[10].setInvalid(); + hdr.int_val[11].setInvalid(); + hdr.int_val[12].setInvalid(); + hdr.int_val[13].setInvalid(); + hdr.int_val[14].setInvalid(); + hdr.int_val[15].setInvalid(); + hdr.int_val[16].setInvalid(); + hdr.int_val[17].setInvalid(); + hdr.int_val[18].setInvalid(); + hdr.int_val[19].setInvalid(); + hdr.int_val[20].setInvalid(); + hdr.int_val[21].setInvalid(); + hdr.int_val[22].setInvalid(); + hdr.int_val[23].setInvalid(); + } + @name(".process_int_endpoint.int_sink_gpe") action int_sink_gpe(bit<32> mirror_id) { + meta.int_metadata.insert_byte_cnt = (bit<16>)(meta.int_metadata.gpe_int_hdr_len << 2); + int_sink(mirror_id); + } + @name(".process_int_endpoint.int_no_sink") action int_no_sink() { + meta.int_metadata_i2e.sink = 1w0; + } + @name(".int_sink_update_outer") table int_sink_update_outer { + actions = { + int_sink_update_vxlan_gpe_v4; + nop; + } + key = { + hdr.vxlan_gpe_int_header.isValid(): exact; + hdr.ipv4.isValid() : exact; + meta.int_metadata_i2e.sink : exact; + } + size = 2; + } + @name(".int_source") table int_source { + actions = { + int_set_src; + int_set_no_src; + } + key = { + hdr.int_header.isValid() : exact; + hdr.ipv4.isValid() : exact; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv4.dstAddr : ternary; + hdr.inner_ipv4.srcAddr : ternary; + } + size = 256; + } + @name(".int_terminate") table int_terminate { + actions = { + int_sink_gpe; + int_no_sink; + } + key = { + hdr.int_header.isValid() : exact; + hdr.vxlan_gpe_int_header.isValid(): exact; + hdr.ipv4.isValid() : exact; + meta.ipv4_metadata.lkp_ipv4_da : ternary; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv4.dstAddr : ternary; + } + size = 256; + } + apply { + if (!hdr.int_header.isValid()) { + int_source.apply(); + } else { + int_terminate.apply(); + int_sink_update_outer.apply(); + } + } +} + +control process_ingress_fabric(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_fabric.nop") action nop() { + } + @name(".process_ingress_fabric.terminate_cpu_packet") action terminate_cpu_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.egress_metadata.bypass = (bit<1>)hdr.fabric_header_cpu.txBypass; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_cpu.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_unicast_packet") action switch_fabric_unicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + meta.fabric_metadata.dst_device = (bit<8>)hdr.fabric_header.dstDevice; + meta.fabric_metadata.dst_port = (bit<16>)hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_unicast_packet") action terminate_fabric_unicast_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.tunnel_metadata.tunnel_terminate = (bit<1>)hdr.fabric_header_unicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = (bit<5>)hdr.fabric_header_unicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = (bit<16>)hdr.fabric_header_unicast.nexthopIndex; + meta.l3_metadata.routed = (bit<1>)hdr.fabric_header_unicast.routed; + meta.l3_metadata.outer_routed = (bit<1>)hdr.fabric_header_unicast.outerRouted; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_unicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_multicast_packet") action switch_fabric_multicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + standard_metadata.mcast_grp = (bit<16>)hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_multicast_packet") action terminate_fabric_multicast_packet() { + meta.tunnel_metadata.tunnel_terminate = (bit<1>)hdr.fabric_header_multicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = (bit<5>)hdr.fabric_header_multicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = 16w0; + meta.l3_metadata.routed = (bit<1>)hdr.fabric_header_multicast.routed; + meta.l3_metadata.outer_routed = (bit<1>)hdr.fabric_header_multicast.outerRouted; + standard_metadata.mcast_grp = (bit<16>)hdr.fabric_header_multicast.mcastGrp; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_multicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.set_ingress_ifindex_properties") action set_ingress_ifindex_properties() { + } + @name(".process_ingress_fabric.non_ip_over_fabric") action non_ip_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_ingress_fabric.ipv4_over_fabric") action ipv4_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv4.protocol; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".process_ingress_fabric.ipv6_over_fabric") action ipv6_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".fabric_ingress_dst_lkp") table fabric_ingress_dst_lkp { + actions = { + nop; + terminate_cpu_packet; + switch_fabric_unicast_packet; + terminate_fabric_unicast_packet; + switch_fabric_multicast_packet; + terminate_fabric_multicast_packet; + } + key = { + hdr.fabric_header.dstDevice: exact; + } + } + @name(".fabric_ingress_src_lkp") table fabric_ingress_src_lkp { + actions = { + nop; + set_ingress_ifindex_properties; + } + key = { + hdr.fabric_header_multicast.ingressIfindex: exact; + } + size = 1024; + } + @name(".native_packet_over_fabric") table native_packet_over_fabric { + actions = { + non_ip_over_fabric; + ipv4_over_fabric; + ipv6_over_fabric; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type != 2w0) { + fabric_ingress_dst_lkp.apply(); + if (meta.ingress_metadata.port_type == 2w1) { + if (hdr.fabric_header_multicast.isValid()) { + fabric_ingress_src_lkp.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w0) { + native_packet_over_fabric.apply(); + } + } + } + } +} + +control process_outer_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast.nop") action nop() { + } + @name(".process_outer_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv4_multicast") table outer_ipv4_multicast { + actions = { + nop; + on_miss; + outer_multicast_route_s_g_hit; + outer_multicast_bridge_s_g_hit; + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact; + meta.multicast_metadata.ipv4_mcast_key : exact; + hdr.ipv4.srcAddr : exact; + hdr.ipv4.dstAddr : exact; + } + size = 1024; + } + @name(".outer_ipv4_multicast_star_g") table outer_ipv4_multicast_star_g { + actions = { + nop; + outer_multicast_route_sm_star_g_hit; + outer_multicast_route_bidir_star_g_hit; + outer_multicast_bridge_star_g_hit; + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact; + meta.multicast_metadata.ipv4_mcast_key : exact; + hdr.ipv4.dstAddr : ternary; + } + size = 512; + } + apply { + switch (outer_ipv4_multicast.apply().action_run) { + on_miss: { + outer_ipv4_multicast_star_g.apply(); + } + } + } +} + +control process_outer_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv6_multicast.nop") action nop() { + } + @name(".process_outer_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv6_multicast") table outer_ipv6_multicast { + actions = { + nop; + on_miss; + outer_multicast_route_s_g_hit; + outer_multicast_bridge_s_g_hit; + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact; + meta.multicast_metadata.ipv6_mcast_key : exact; + hdr.ipv6.srcAddr : exact; + hdr.ipv6.dstAddr : exact; + } + size = 1024; + } + @name(".outer_ipv6_multicast_star_g") table outer_ipv6_multicast_star_g { + actions = { + nop; + outer_multicast_route_sm_star_g_hit; + outer_multicast_route_bidir_star_g_hit; + outer_multicast_bridge_star_g_hit; + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact; + meta.multicast_metadata.ipv6_mcast_key : exact; + hdr.ipv6.dstAddr : ternary; + } + size = 512; + } + apply { + switch (outer_ipv6_multicast.apply().action_run) { + on_miss: { + outer_ipv6_multicast_star_g.apply(); + } + } + } +} + +control process_outer_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_outer_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast") process_outer_ipv4_multicast() process_outer_ipv4_multicast_0; + @name(".process_outer_ipv6_multicast") process_outer_ipv6_multicast() process_outer_ipv6_multicast_0; + @name(".process_outer_multicast_rpf") process_outer_multicast_rpf() process_outer_multicast_rpf_0; + apply { + if (hdr.ipv4.isValid()) { + process_outer_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + process_outer_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + } + process_outer_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_vtep.nop") action nop() { + } + @name(".process_ipv4_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.on_miss") action on_miss() { + } + @name(".process_ipv4_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv4_dest_vtep") table ipv4_dest_vtep { + actions = { + nop; + set_tunnel_termination_flag; + set_tunnel_vni_and_termination_flag; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv4.dstAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + @name(".ipv4_src_vtep") table ipv4_src_vtep { + actions = { + on_miss; + src_vtep_hit; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv4.srcAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + apply { + switch (ipv4_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv4_dest_vtep.apply(); + } + } + } +} + +control process_ipv6_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_vtep.nop") action nop() { + } + @name(".process_ipv6_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.on_miss") action on_miss() { + } + @name(".process_ipv6_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv6_dest_vtep") table ipv6_dest_vtep { + actions = { + nop; + set_tunnel_termination_flag; + set_tunnel_vni_and_termination_flag; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv6.dstAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + @name(".ipv6_src_vtep") table ipv6_src_vtep { + actions = { + on_miss; + src_vtep_hit; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv6.srcAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + apply { + switch (ipv6_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv6_dest_vtep.apply(); + } + } + } +} + +control process_mpls(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mpls.terminate_eompls") action terminate_eompls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_vpls") action terminate_vpls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_ipv4_over_mpls") action terminate_ipv4_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + } + @name(".process_mpls.terminate_ipv6_over_mpls") action terminate_ipv6_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + } + @name(".process_mpls.terminate_pw") action terminate_pw(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + } + @name(".process_mpls.forward_mpls") action forward_mpls(bit<16> nexthop_index) { + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + meta.l3_metadata.fib_hit = 1w1; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + } + @name(".mpls") table mpls_0 { + actions = { + terminate_eompls; + terminate_vpls; + terminate_ipv4_over_mpls; + terminate_ipv6_over_mpls; + terminate_pw; + forward_mpls; + } + key = { + meta.tunnel_metadata.mpls_label: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + apply { + mpls_0.apply(); + } +} + +control process_tunnel(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel.on_miss") action on_miss() { + } + @name(".process_tunnel.outer_rmac_hit") action outer_rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".process_tunnel.nop") action nop() { + } + @name(".process_tunnel.tunnel_lookup_miss") action tunnel_lookup_miss() { + } + @name(".process_tunnel.terminate_tunnel_inner_non_ip") action terminate_tunnel_inner_non_ip(bit<16> bd, bit<16> bd_label, bit<16> stats_idx) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w0; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv4") action terminate_tunnel_inner_ethernet_ipv4(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv4_unicast_enabled, bit<2> ipv4_urpf_mode, bit<1> igmp_snooping_enabled, bit<16> stats_idx, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv4") action terminate_tunnel_inner_ipv4(bit<16> vrf, bit<10> rmac_group, bit<2> ipv4_urpf_mode, bit<1> ipv4_unicast_enabled, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv6") action terminate_tunnel_inner_ethernet_ipv6(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> mld_snooping_enabled, bit<16> stats_idx, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv6") action terminate_tunnel_inner_ipv6(bit<16> vrf, bit<10> rmac_group, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action non_ip_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action ipv4_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.ipv4.ttl; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action ipv6_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.ipv6.hopLimit; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".outer_rmac") table outer_rmac { + actions = { + on_miss; + outer_rmac_hit; + } + key = { + meta.l3_metadata.rmac_group: exact; + hdr.ethernet.dstAddr : exact; + } + size = 1024; + } + @name(".tunnel") table tunnel { + actions = { + nop; + tunnel_lookup_miss; + terminate_tunnel_inner_non_ip; + terminate_tunnel_inner_ethernet_ipv4; + terminate_tunnel_inner_ipv4; + terminate_tunnel_inner_ethernet_ipv6; + terminate_tunnel_inner_ipv6; + } + key = { + meta.tunnel_metadata.tunnel_vni : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + @name(".tunnel_lookup_miss") table tunnel_lookup_miss_0 { + actions = { + non_ip_tunnel_lookup_miss; + ipv4_tunnel_lookup_miss; + ipv6_tunnel_lookup_miss; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + } + @name(".tunnel_miss") table tunnel_miss { + actions = { + non_ip_tunnel_lookup_miss; + ipv4_tunnel_lookup_miss; + ipv6_tunnel_lookup_miss; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + } + @name(".process_ingress_fabric") process_ingress_fabric() process_ingress_fabric_0; + @name(".process_outer_multicast") process_outer_multicast() process_outer_multicast_0; + @name(".process_ipv4_vtep") process_ipv4_vtep() process_ipv4_vtep_0; + @name(".process_ipv6_vtep") process_ipv6_vtep() process_ipv6_vtep_0; + @name(".process_mpls") process_mpls() process_mpls_0; + apply { + process_ingress_fabric_0.apply(hdr, meta, standard_metadata); + if (meta.tunnel_metadata.ingress_tunnel_type != 5w0) { + switch (outer_rmac.apply().action_run) { + on_miss: { + process_outer_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (hdr.ipv4.isValid()) { + process_ipv4_vtep_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + process_ipv6_vtep_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.mpls[0].isValid()) { + process_mpls_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + } + if (meta.tunnel_metadata.tunnel_terminate == 1w1 || meta.multicast_metadata.outer_mcast_route_hit == 1w1 && (meta.multicast_metadata.outer_mcast_mode == 2w1 && meta.multicast_metadata.mcast_rpf_group == 16w0 || meta.multicast_metadata.outer_mcast_mode == 2w2 && meta.multicast_metadata.mcast_rpf_group != 16w0)) { + switch (tunnel.apply().action_run) { + tunnel_lookup_miss: { + tunnel_lookup_miss_0.apply(); + } + } + } else { + tunnel_miss.apply(); + } + } +} + +control process_ingress_sflow(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".sflow_ingress_session_pkt_counter") direct_counter(CounterType.packets) sflow_ingress_session_pkt_counter; + @name(".process_ingress_sflow.nop") action nop() { + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu") action sflow_ing_pkt_to_cpu(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)sflow_i2e_mirror_id, (bit<8>)FieldLists.sflow_cpu_info); + } + @name(".process_ingress_sflow.sflow_ing_session_enable") action sflow_ing_session_enable(bit<32> rate_thr, bit<16> session_id) { + meta.ingress_metadata.sflow_take_sample = rate_thr |+| meta.ingress_metadata.sflow_take_sample; + meta.sflow_metadata.sflow_session_id = session_id; + } + @name(".process_ingress_sflow.nop_1") action nop_1() { + sflow_ingress_session_pkt_counter.count(); + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu_0") action sflow_ing_pkt_to_cpu_0(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + sflow_ingress_session_pkt_counter.count(); + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)sflow_i2e_mirror_id, (bit<8>)FieldLists.sflow_cpu_info); + } + @name(".sflow_ing_take_sample") table sflow_ing_take_sample { + actions = { + nop_1; + sflow_ing_pkt_to_cpu_0; + } + key = { + meta.ingress_metadata.sflow_take_sample: ternary; + meta.sflow_metadata.sflow_session_id : exact; + } + counters = sflow_ingress_session_pkt_counter; + } + @name(".sflow_ingress") table sflow_ingress { + actions = { + nop; + sflow_ing_session_enable; + } + key = { + meta.ingress_metadata.ifindex : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + hdr.sflow.isValid() : exact; + } + size = 512; + } + apply { + sflow_ingress.apply(); + sflow_ing_take_sample.apply(); + } +} + +@name(".storm_control_meter") meter>(32w1024, MeterType.bytes) storm_control_meter; +control process_storm_control(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_storm_control.nop") action nop() { + } + @name(".process_storm_control.set_storm_control_meter") action set_storm_control_meter(bit<16> meter_idx) { + storm_control_meter.execute_meter((bit<10>)(bit<10>)meter_idx, meta.meter_metadata.meter_color); + meta.meter_metadata.meter_index = (bit<16>)meter_idx; + } + @name(".storm_control") table storm_control { + actions = { + nop; + set_storm_control_meter; + } + key = { + standard_metadata.ingress_port: exact; + meta.l2_metadata.lkp_pkt_type : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + storm_control.apply(); + } + } +} + +control process_validate_packet(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_packet.nop") action nop() { + } + @name(".process_validate_packet.set_unicast") action set_unicast() { + meta.l2_metadata.lkp_pkt_type = 3w1; + } + @name(".process_validate_packet.set_unicast_and_ipv6_src_is_link_local") action set_unicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + } + @name(".process_validate_packet.set_multicast") action set_multicast() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_multicast_and_ipv6_src_is_link_local") action set_multicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_broadcast") action set_broadcast() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w2; + } + @name(".process_validate_packet.set_malformed_packet") action set_malformed_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_packet") table validate_packet { + actions = { + nop; + set_unicast; + set_unicast_and_ipv6_src_is_link_local; + set_multicast; + set_multicast_and_ipv6_src_is_link_local; + set_broadcast; + set_malformed_packet; + } + key = { + meta.l2_metadata.lkp_mac_sa[40:40] : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary; + meta.l3_metadata.lkp_ip_type : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + meta.l3_metadata.lkp_ip_version : ternary; + meta.ipv4_metadata.lkp_ipv4_sa[31:24] : ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv6_metadata.lkp_ipv6_sa[127:112]: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + } + apply { + if (meta.ingress_metadata.drop_flag == 1w0) { + validate_packet.apply(); + } + } +} + +control process_mac(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac.nop") action nop() { + } + @name(".process_mac.dmac_hit") action dmac_hit(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + } + @name(".process_mac.dmac_multicast_hit") action dmac_multicast_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_miss") action dmac_miss() { + meta.ingress_metadata.egress_ifindex = 16w65535; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_redirect_nexthop") action dmac_redirect_nexthop(bit<16> nexthop_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = nexthop_index; + meta.l2_metadata.l2_nexthop_type = 1w0; + } + @name(".process_mac.dmac_redirect_ecmp") action dmac_redirect_ecmp(bit<16> ecmp_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = ecmp_index; + meta.l2_metadata.l2_nexthop_type = 1w1; + } + @name(".process_mac.dmac_drop") action dmac_drop() { + mark_to_drop(standard_metadata); + } + @name(".process_mac.smac_miss") action smac_miss() { + meta.l2_metadata.l2_src_miss = 1w1; + } + @name(".process_mac.smac_hit") action smac_hit(bit<16> ifindex) { + meta.l2_metadata.l2_src_move = (bit<16>)meta.ingress_metadata.ifindex ^ ifindex; + } + @name(".dmac") table dmac { + support_timeout = true; + actions = { + nop; + dmac_hit; + dmac_multicast_hit; + dmac_miss; + dmac_redirect_nexthop; + dmac_redirect_ecmp; + dmac_drop; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_da: exact; + } + size = 1024; + } + @name(".smac") table smac { + actions = { + nop; + smac_miss; + smac_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_sa: exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + smac.apply(); + } + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + dmac.apply(); + } + } +} + +control process_mac_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_acl.nop") action nop() { + } + @name(".process_mac_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.i2e_mirror_info); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_mac_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".mac_acl") table mac_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.l2_metadata.lkp_mac_sa : ternary; + meta.l2_metadata.lkp_mac_da : ternary; + meta.l2_metadata.lkp_mac_type: ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + mac_acl.apply(); + } + } +} + +control process_ip_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_acl.nop") action nop() { + } + @name(".process_ip_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.i2e_mirror_info); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_ip_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ip_acl") table ip_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + hdr.tcp.flags : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + } + size = 512; + } + @name(".ipv6_acl") table ipv6_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.ipv6_metadata.lkp_ipv6_sa: ternary; + meta.ipv6_metadata.lkp_ipv6_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + hdr.tcp.flags : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + ip_acl.apply(); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2) { + ipv6_acl.apply(); + } + } + } + } +} + +control process_qos(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_qos.nop") action nop() { + } + @name(".process_qos.apply_cos_marking") action apply_cos_marking(bit<3> cos) { + meta.qos_metadata.marked_cos = cos; + } + @name(".process_qos.apply_dscp_marking") action apply_dscp_marking(bit<8> dscp) { + meta.qos_metadata.marked_dscp = dscp; + } + @name(".process_qos.apply_tc_marking") action apply_tc_marking(bit<3> tc) { + meta.qos_metadata.marked_exp = tc; + } + @name(".qos") table qos { + actions = { + nop; + apply_cos_marking; + apply_dscp_marking; + apply_tc_marking; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_ip_tc : ternary; + meta.tunnel_metadata.mpls_exp : ternary; + meta.qos_metadata.outer_dscp : ternary; + } + size = 512; + } + apply { + qos.apply(); + } +} + +control process_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv4_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_s_g_stats; + @name(".ipv4_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_star_g_stats; + @name(".process_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_ipv4_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.nop") action nop() { + } + @name(".process_ipv4_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_bridge") table ipv4_multicast_bridge { + actions = { + on_miss; + multicast_bridge_s_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".ipv4_multicast_bridge_star_g") table ipv4_multicast_bridge_star_g { + actions = { + nop; + multicast_bridge_star_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".process_ipv4_multicast.on_miss_0") action on_miss_0() { + ipv4_multicast_route_s_g_stats.count(); + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit_0") action multicast_route_s_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route") table ipv4_multicast_route { + actions = { + on_miss_0; + multicast_route_s_g_hit_0; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + counters = ipv4_multicast_route_s_g_stats; + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss_0") action multicast_route_star_g_miss_0() { + ipv4_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit_0") action multicast_route_sm_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit_0") action multicast_route_bidir_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route_star_g") table ipv4_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_0; + multicast_route_sm_star_g_hit_0; + multicast_route_bidir_star_g_hit_0; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + counters = ipv4_multicast_route_star_g_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv4_multicast_bridge.apply().action_run) { + on_miss: { + ipv4_multicast_bridge_star_g.apply(); + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv4_multicast_enabled == 1w1) { + switch (ipv4_multicast_route.apply().action_run) { + on_miss_0: { + ipv4_multicast_route_star_g.apply(); + } + } + } + } +} + +control process_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv6_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_s_g_stats; + @name(".ipv6_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_star_g_stats; + @name(".process_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_ipv6_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.nop") action nop() { + } + @name(".process_ipv6_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_bridge") table ipv6_multicast_bridge { + actions = { + on_miss; + multicast_bridge_s_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".ipv6_multicast_bridge_star_g") table ipv6_multicast_bridge_star_g { + actions = { + nop; + multicast_bridge_star_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".process_ipv6_multicast.on_miss_1") action on_miss_1() { + ipv6_multicast_route_s_g_stats.count(); + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit_1") action multicast_route_s_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route") table ipv6_multicast_route { + actions = { + on_miss_1; + multicast_route_s_g_hit_1; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + counters = ipv6_multicast_route_s_g_stats; + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss_1") action multicast_route_star_g_miss_1() { + ipv6_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit_1") action multicast_route_sm_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit_1") action multicast_route_bidir_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route_star_g") table ipv6_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_1; + multicast_route_sm_star_g_hit_1; + multicast_route_bidir_star_g_hit_1; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + counters = ipv6_multicast_route_star_g_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv6_multicast_bridge.apply().action_run) { + on_miss: { + ipv6_multicast_bridge_star_g.apply(); + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv6_multicast_enabled == 1w1) { + switch (ipv6_multicast_route.apply().action_run) { + on_miss_1: { + ipv6_multicast_route_star_g.apply(); + } + } + } + } +} + +control process_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_multicast") process_ipv4_multicast() process_ipv4_multicast_0; + @name(".process_ipv6_multicast") process_ipv6_multicast() process_ipv6_multicast_0; + @name(".process_multicast_rpf") process_multicast_rpf() process_multicast_rpf_0; + apply { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + process_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2) { + process_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + } + process_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_racl.nop") action nop() { + } + @name(".process_ipv4_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv4_racl") table ipv4_racl { + actions = { + nop; + racl_deny; + racl_permit; + racl_redirect_nexthop; + racl_redirect_ecmp; + } + key = { + meta.acl_metadata.bd_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + } + size = 512; + } + apply { + ipv4_racl.apply(); + } +} + +control process_ipv4_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_urpf.on_miss") action on_miss() { + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action ipv4_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = (bit<2>)meta.ipv4_metadata.ipv4_urpf_mode; + } + @name(".process_ipv4_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv4_urpf") table ipv4_urpf { + actions = { + on_miss; + ipv4_urpf_hit; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + } + size = 1024; + } + @name(".ipv4_urpf_lpm") table ipv4_urpf_lpm { + actions = { + ipv4_urpf_hit; + urpf_miss; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: lpm; + } + size = 512; + } + apply { + if (meta.ipv4_metadata.ipv4_urpf_mode != 2w0) { + switch (ipv4_urpf.apply().action_run) { + on_miss: { + ipv4_urpf_lpm.apply(); + } + } + } + } +} + +control process_ipv4_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_fib.on_miss") action on_miss() { + } + @name(".process_ipv4_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv4_fib") table ipv4_fib { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".ipv4_fib_lpm") table ipv4_fib_lpm { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: lpm; + } + size = 512; + } + apply { + switch (ipv4_fib.apply().action_run) { + on_miss: { + ipv4_fib_lpm.apply(); + } + } + } +} + +control process_ipv6_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_racl.nop") action nop() { + } + @name(".process_ipv6_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv6_racl") table ipv6_racl { + actions = { + nop; + racl_deny; + racl_permit; + racl_redirect_nexthop; + racl_redirect_ecmp; + } + key = { + meta.acl_metadata.bd_label : ternary; + meta.ipv6_metadata.lkp_ipv6_sa: ternary; + meta.ipv6_metadata.lkp_ipv6_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + } + size = 512; + } + apply { + ipv6_racl.apply(); + } +} + +control process_ipv6_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_urpf.on_miss") action on_miss() { + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action ipv6_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = (bit<2>)meta.ipv6_metadata.ipv6_urpf_mode; + } + @name(".process_ipv6_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv6_urpf") table ipv6_urpf { + actions = { + on_miss; + ipv6_urpf_hit; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + } + size = 1024; + } + @name(".ipv6_urpf_lpm") table ipv6_urpf_lpm { + actions = { + ipv6_urpf_hit; + urpf_miss; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: lpm; + } + size = 512; + } + apply { + if (meta.ipv6_metadata.ipv6_urpf_mode != 2w0) { + switch (ipv6_urpf.apply().action_run) { + on_miss: { + ipv6_urpf_lpm.apply(); + } + } + } + } +} + +control process_ipv6_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_fib.on_miss") action on_miss() { + } + @name(".process_ipv6_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv6_fib") table ipv6_fib { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".ipv6_fib_lpm") table ipv6_fib_lpm { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: lpm; + } + size = 512; + } + apply { + switch (ipv6_fib.apply().action_run) { + on_miss: { + ipv6_fib_lpm.apply(); + } + } + } +} + +control process_urpf_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_urpf_bd.nop") action nop() { + } + @name(".process_urpf_bd.urpf_bd_miss") action urpf_bd_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".urpf_bd") table urpf_bd { + actions = { + nop; + urpf_bd_miss; + } + key = { + meta.l3_metadata.urpf_bd_group: exact; + meta.ingress_metadata.bd : exact; + } + size = 1024; + } + apply { + if (meta.l3_metadata.urpf_mode == 2w2 && meta.l3_metadata.urpf_hit == 1w1) { + urpf_bd.apply(); + } + } +} + +control process_meter_index(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_index") direct_meter>(MeterType.bytes) meter_index; + @name(".process_meter_index.nop") action nop() { + } + @name(".process_meter_index.nop_2") action nop_2() { + meter_index.read(meta.meter_metadata.meter_color); + } + @name(".meter_index") table meter_index_0 { + actions = { + nop_2; + } + key = { + meta.meter_metadata.meter_index: exact; + } + size = 1024; + meters = meter_index; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_index_0.apply(); + } + } +} + +control process_hashes(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_hashes.compute_lkp_ipv4_hash") action compute_lkp_ipv4_hash() { + hash(meta.hash_metadata.hash1, HashAlgorithm.crc16, (bit<16>)0, { meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + } + @name(".process_hashes.compute_lkp_ipv6_hash") action compute_lkp_ipv6_hash() { + hash(meta.hash_metadata.hash1, HashAlgorithm.crc16, (bit<16>)0, { meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + } + @name(".process_hashes.compute_lkp_non_ip_hash") action compute_lkp_non_ip_hash() { + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.ingress_metadata.ifindex, meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.l2_metadata.lkp_mac_type }, (bit<32>)65536); + } + @name(".process_hashes.computed_two_hashes") action computed_two_hashes() { + meta.hash_metadata.entropy_hash = (bit<16>)meta.hash_metadata.hash2; + } + @name(".process_hashes.computed_one_hash") action computed_one_hash() { + meta.hash_metadata.hash1 = (bit<16>)meta.hash_metadata.hash2; + meta.hash_metadata.entropy_hash = (bit<16>)meta.hash_metadata.hash2; + } + @name(".compute_ipv4_hashes") table compute_ipv4_hashes { + actions = { + compute_lkp_ipv4_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_ipv6_hashes") table compute_ipv6_hashes { + actions = { + compute_lkp_ipv6_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_non_ip_hashes") table compute_non_ip_hashes { + actions = { + compute_lkp_non_ip_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_other_hashes") table compute_other_hashes { + actions = { + computed_two_hashes; + computed_one_hash; + } + key = { + meta.hash_metadata.hash1: exact; + } + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv4.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv4.isValid()) { + compute_ipv4_hashes.apply(); + } else { + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv6.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv6.isValid()) { + compute_ipv6_hashes.apply(); + } else { + compute_non_ip_hashes.apply(); + } + } + compute_other_hashes.apply(); + } +} + +control process_meter_action(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_stats") direct_counter(CounterType.packets) meter_stats; + @name(".process_meter_action.meter_permit") action meter_permit() { + } + @name(".process_meter_action.meter_deny") action meter_deny() { + mark_to_drop(standard_metadata); + } + @name(".process_meter_action.meter_permit_0") action meter_permit_0() { + meter_stats.count(); + } + @name(".process_meter_action.meter_deny_0") action meter_deny_0() { + meter_stats.count(); + mark_to_drop(standard_metadata); + } + @name(".meter_action") table meter_action { + actions = { + meter_permit_0; + meter_deny_0; + } + key = { + meta.meter_metadata.meter_color: exact; + meta.meter_metadata.meter_index: exact; + } + size = 1024; + counters = meter_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_action.apply(); + } + } +} + +@name(".ingress_bd_stats_count") @min_width(32) counter>(32w1024, CounterType.packets_and_bytes) ingress_bd_stats_count; +control process_ingress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_bd_stats.update_ingress_bd_stats") action update_ingress_bd_stats() { + ingress_bd_stats_count.count((bit<10>)(bit<10>)meta.l2_metadata.bd_stats_idx); + } + @name(".ingress_bd_stats") table ingress_bd_stats { + actions = { + update_ingress_bd_stats; + } + size = 1024; + } + apply { + ingress_bd_stats.apply(); + } +} + +@name(".acl_stats_count") @min_width(16) counter>(32w1024, CounterType.packets_and_bytes) acl_stats_count; +control process_ingress_acl_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_acl_stats.acl_stats_update") action acl_stats_update() { + acl_stats_count.count((bit<10>)(bit<10>)meta.acl_metadata.acl_stats_index); + } + @name(".acl_stats") table acl_stats { + actions = { + acl_stats_update; + } + size = 1024; + } + apply { + acl_stats.apply(); + } +} + +control process_storm_control_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".storm_control_stats") direct_counter(CounterType.packets) storm_control_stats; + @name(".process_storm_control_stats.nop") action nop() { + } + @name(".process_storm_control_stats.nop_3") action nop_3() { + storm_control_stats.count(); + } + @name(".storm_control_stats") table storm_control_stats_0 { + actions = { + nop_3; + } + key = { + meta.meter_metadata.meter_color: exact; + standard_metadata.ingress_port : exact; + } + size = 1024; + counters = storm_control_stats; + } + apply { + storm_control_stats_0.apply(); + } +} + +control process_fwd_results(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fwd_results.nop") action nop() { + } + @name(".process_fwd_results.set_l2_redirect_action") action set_l2_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.l2_metadata.l2_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.l2_metadata.l2_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_fib_redirect_action") action set_fib_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.l3_metadata.fib_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.l3_metadata.fib_nexthop_type; + meta.l3_metadata.routed = 1w1; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.reason_code = 16w0x217; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_cpu_redirect_action") action set_cpu_redirect_action() { + meta.l3_metadata.routed = 1w0; + standard_metadata.mcast_grp = 16w0; + standard_metadata.egress_spec = 9w64; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_acl_redirect_action") action set_acl_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.acl_metadata.acl_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.acl_metadata.acl_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_racl_redirect_action") action set_racl_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.acl_metadata.racl_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.acl_metadata.racl_nexthop_type; + meta.l3_metadata.routed = 1w1; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_multicast_route_action") action set_multicast_route_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = (bit<16>)meta.multicast_metadata.multicast_route_mc_index; + meta.l3_metadata.routed = 1w1; + meta.l3_metadata.same_bd_check = 16w0xffff; + } + @name(".process_fwd_results.set_multicast_bridge_action") action set_multicast_bridge_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = (bit<16>)meta.multicast_metadata.multicast_bridge_mc_index; + } + @name(".process_fwd_results.set_multicast_flood") action set_multicast_flood() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w65535; + } + @name(".process_fwd_results.set_multicast_drop") action set_multicast_drop() { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = 8w44; + } + @name(".fwd_result") table fwd_result { + actions = { + nop; + set_l2_redirect_action; + set_fib_redirect_action; + set_cpu_redirect_action; + set_acl_redirect_action; + set_racl_redirect_action; + set_multicast_route_action; + set_multicast_bridge_action; + set_multicast_flood; + set_multicast_drop; + } + key = { + meta.l2_metadata.l2_redirect : ternary; + meta.acl_metadata.acl_redirect : ternary; + meta.acl_metadata.racl_redirect : ternary; + meta.l3_metadata.rmac_hit : ternary; + meta.l3_metadata.fib_hit : ternary; + meta.l2_metadata.lkp_pkt_type : ternary; + meta.l3_metadata.lkp_ip_type : ternary; + meta.multicast_metadata.igmp_snooping_enabled: ternary; + meta.multicast_metadata.mld_snooping_enabled : ternary; + meta.multicast_metadata.mcast_route_hit : ternary; + meta.multicast_metadata.mcast_bridge_hit : ternary; + meta.multicast_metadata.mcast_rpf_group : ternary; + meta.multicast_metadata.mcast_mode : ternary; + } + size = 512; + } + apply { + if (!(meta.ingress_metadata.bypass_lookups == 16w0xffff)) { + fwd_result.apply(); + } + } +} + +control process_nexthop(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_nexthop.nop") action nop() { + } + @name(".process_nexthop.set_ecmp_nexthop_details") action set_ecmp_nexthop_details(bit<16> ifindex, bit<16> bd, bit<16> nhop_index, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.nexthop_index = nhop_index; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + meta.tunnel_metadata.tunnel_if_check = (bit<1>)meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood") action set_ecmp_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index, bit<16> nhop_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.l3_metadata.nexthop_index = nhop_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_nexthop.set_nexthop_details") action set_nexthop_details(bit<16> ifindex, bit<16> bd, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + meta.tunnel_metadata.tunnel_if_check = (bit<1>)meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_nexthop_details_for_post_routed_flood") action set_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".ecmp_group") table ecmp_group { + actions = { + nop; + set_ecmp_nexthop_details; + set_ecmp_nexthop_details_for_post_routed_flood; + } + key = { + meta.l3_metadata.nexthop_index: exact; + meta.hash_metadata.hash1 : selector; + } + size = 1024; + implementation = ecmp_action_profile; + } + @name(".nexthop") table nexthop { + actions = { + nop; + set_nexthop_details; + set_nexthop_details_for_post_routed_flood; + } + key = { + meta.l3_metadata.nexthop_index: exact; + } + size = 1024; + } + apply { + if (meta.nexthop_metadata.nexthop_type == 1w1) { + ecmp_group.apply(); + } else { + nexthop.apply(); + } + } +} + +control process_multicast_flooding(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_multicast_flooding.nop") action nop() { + } + @name(".process_multicast_flooding.set_bd_flood_mc_index") action set_bd_flood_mc_index(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + } + @name(".bd_flood") table bd_flood { + actions = { + nop; + set_bd_flood_mc_index; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_pkt_type: exact; + } + size = 1024; + } + apply { + bd_flood.apply(); + } +} + +control process_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_lag.set_lag_miss") action set_lag_miss() { + } + @name(".process_lag.set_lag_port") action set_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_lag.set_lag_remote_port") action set_lag_remote_port(bit<8> device, bit<16> port) { + meta.fabric_metadata.dst_device = device; + meta.fabric_metadata.dst_port = port; + } + @name(".lag_group") table lag_group { + actions = { + set_lag_miss; + set_lag_port; + set_lag_remote_port; + } + key = { + meta.ingress_metadata.egress_ifindex: exact; + meta.hash_metadata.hash2 : selector; + } + size = 1024; + implementation = lag_action_profile; + } + apply { + lag_group.apply(); + } +} + +@name("mac_learn_digest") struct mac_learn_digest { + bit<16> bd; + bit<48> lkp_mac_sa; + bit<16> ifindex; +} + +control process_mac_learning(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_learning.nop") action nop() { + } + @name(".process_mac_learning.generate_learn_notify") action generate_learn_notify() { + digest((bit<32>)1024, { meta.ingress_metadata.bd, meta.l2_metadata.lkp_mac_sa, meta.ingress_metadata.ifindex }); + } + @name(".learn_notify") table learn_notify { + actions = { + nop; + generate_learn_notify; + } + key = { + meta.l2_metadata.l2_src_miss: ternary; + meta.l2_metadata.l2_src_move: ternary; + meta.l2_metadata.stp_state : ternary; + } + size = 512; + } + apply { + if (meta.l2_metadata.learning_enabled == 1w1) { + learn_notify.apply(); + } + } +} + +control process_fabric_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fabric_lag.nop") action nop() { + } + @name(".process_fabric_lag.set_fabric_lag_port") action set_fabric_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_fabric_lag.set_fabric_multicast") action set_fabric_multicast(bit<8> fabric_mgid) { + meta.multicast_metadata.mcast_grp = (bit<16>)standard_metadata.mcast_grp; + } + @name(".fabric_lag") table fabric_lag { + actions = { + nop; + set_fabric_lag_port; + set_fabric_multicast; + } + key = { + meta.fabric_metadata.dst_device: exact; + meta.hash_metadata.hash2 : selector; + } + implementation = fabric_lag_action_profile; + } + apply { + fabric_lag.apply(); + } +} + +@name(".drop_stats") counter>(32w1024, CounterType.packets) drop_stats; +@name(".drop_stats_2") counter>(32w1024, CounterType.packets) drop_stats_2; +control process_system_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_system_acl.drop_stats_update") action drop_stats_update() { + drop_stats_2.count((bit<10>)(bit<10>)meta.ingress_metadata.drop_reason); + } + @name(".process_system_acl.nop") action nop() { + } + @name(".process_system_acl.copy_to_cpu_with_reason") action copy_to_cpu_with_reason(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.I2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_system_acl.redirect_to_cpu") action redirect_to_cpu(bit<16> reason_code) { + copy_to_cpu_with_reason(reason_code); + mark_to_drop(standard_metadata); + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_system_acl.copy_to_cpu") action copy_to_cpu() { + clone_preserving_field_list(CloneType.I2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_system_acl.drop_packet") action drop_packet() { + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.drop_packet_with_reason") action drop_packet_with_reason(bit<10> drop_reason) { + drop_stats.count((bit<10>)drop_reason); + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.negative_mirror") action negative_mirror(bit<32> session_id) { + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.mirror_info); + mark_to_drop(standard_metadata); + } + @name(".drop_stats") table drop_stats_0 { + actions = { + drop_stats_update; + } + size = 1024; + } + @name(".system_acl") table system_acl { + actions = { + nop; + redirect_to_cpu; + copy_to_cpu_with_reason; + copy_to_cpu; + drop_packet; + drop_packet_with_reason; + negative_mirror; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.l2_metadata.lkp_mac_sa : ternary; + meta.l2_metadata.lkp_mac_da : ternary; + meta.l2_metadata.lkp_mac_type : ternary; + meta.ingress_metadata.ifindex : ternary; + meta.l2_metadata.port_vlan_mapping_miss : ternary; + meta.security_metadata.ipsg_check_fail : ternary; + meta.security_metadata.storm_control_color: ternary; + meta.acl_metadata.acl_deny : ternary; + meta.acl_metadata.racl_deny : ternary; + meta.l3_metadata.urpf_check_fail : ternary; + meta.ingress_metadata.drop_flag : ternary; + meta.acl_metadata.acl_copy : ternary; + meta.l3_metadata.l3_copy : ternary; + meta.l3_metadata.rmac_hit : ternary; + meta.l3_metadata.routed : ternary; + meta.ipv6_metadata.ipv6_src_is_link_local : ternary; + meta.l2_metadata.same_if_check : ternary; + meta.tunnel_metadata.tunnel_if_check : ternary; + meta.l3_metadata.same_bd_check : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + meta.l2_metadata.stp_state : ternary; + meta.ingress_metadata.control_frame : ternary; + meta.ipv4_metadata.ipv4_unicast_enabled : ternary; + meta.ipv6_metadata.ipv6_unicast_enabled : ternary; + meta.ingress_metadata.egress_ifindex : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x20 == 16w0) { + system_acl.apply(); + if (meta.ingress_metadata.drop_flag == 1w1) { + drop_stats_0.apply(); + } + } + } +} + +control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ingress.rmac_hit") action rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".ingress.rmac_miss") action rmac_miss() { + meta.l3_metadata.rmac_hit = 1w0; + } + @name(".rmac") table rmac { + actions = { + rmac_hit; + rmac_miss; + } + key = { + meta.l3_metadata.rmac_group: exact; + meta.l2_metadata.lkp_mac_da: exact; + } + size = 1024; + } + @name(".process_ingress_port_mapping") process_ingress_port_mapping() process_ingress_port_mapping_0; + @name(".process_validate_outer_header") process_validate_outer_header() process_validate_outer_header_0; + @name(".process_global_params") process_global_params() process_global_params_0; + @name(".process_port_vlan_mapping") process_port_vlan_mapping() process_port_vlan_mapping_0; + @name(".process_spanning_tree") process_spanning_tree() process_spanning_tree_0; + @name(".process_ip_sourceguard") process_ip_sourceguard() process_ip_sourceguard_0; + @name(".process_int_endpoint") process_int_endpoint() process_int_endpoint_0; + @name(".process_tunnel") process_tunnel() process_tunnel_0; + @name(".process_ingress_sflow") process_ingress_sflow() process_ingress_sflow_0; + @name(".process_storm_control") process_storm_control() process_storm_control_0; + @name(".process_validate_packet") process_validate_packet() process_validate_packet_0; + @name(".process_mac") process_mac() process_mac_0; + @name(".process_mac_acl") process_mac_acl() process_mac_acl_0; + @name(".process_ip_acl") process_ip_acl() process_ip_acl_0; + @name(".process_qos") process_qos() process_qos_0; + @name(".process_multicast") process_multicast() process_multicast_0; + @name(".process_ipv4_racl") process_ipv4_racl() process_ipv4_racl_0; + @name(".process_ipv4_urpf") process_ipv4_urpf() process_ipv4_urpf_0; + @name(".process_ipv4_fib") process_ipv4_fib() process_ipv4_fib_0; + @name(".process_ipv6_racl") process_ipv6_racl() process_ipv6_racl_0; + @name(".process_ipv6_urpf") process_ipv6_urpf() process_ipv6_urpf_0; + @name(".process_ipv6_fib") process_ipv6_fib() process_ipv6_fib_0; + @name(".process_urpf_bd") process_urpf_bd() process_urpf_bd_0; + @name(".process_meter_index") process_meter_index() process_meter_index_0; + @name(".process_hashes") process_hashes() process_hashes_0; + @name(".process_meter_action") process_meter_action() process_meter_action_0; + @name(".process_ingress_bd_stats") process_ingress_bd_stats() process_ingress_bd_stats_0; + @name(".process_ingress_acl_stats") process_ingress_acl_stats() process_ingress_acl_stats_0; + @name(".process_storm_control_stats") process_storm_control_stats() process_storm_control_stats_0; + @name(".process_fwd_results") process_fwd_results() process_fwd_results_0; + @name(".process_nexthop") process_nexthop() process_nexthop_0; + @name(".process_multicast_flooding") process_multicast_flooding() process_multicast_flooding_0; + @name(".process_lag") process_lag() process_lag_0; + @name(".process_mac_learning") process_mac_learning() process_mac_learning_0; + @name(".process_fabric_lag") process_fabric_lag() process_fabric_lag_0; + @name(".process_system_acl") process_system_acl() process_system_acl_0; + apply { + process_ingress_port_mapping_0.apply(hdr, meta, standard_metadata); + process_validate_outer_header_0.apply(hdr, meta, standard_metadata); + process_global_params_0.apply(hdr, meta, standard_metadata); + process_port_vlan_mapping_0.apply(hdr, meta, standard_metadata); + process_spanning_tree_0.apply(hdr, meta, standard_metadata); + process_ip_sourceguard_0.apply(hdr, meta, standard_metadata); + process_int_endpoint_0.apply(hdr, meta, standard_metadata); + process_tunnel_0.apply(hdr, meta, standard_metadata); + process_ingress_sflow_0.apply(hdr, meta, standard_metadata); + process_storm_control_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + if (!(hdr.mpls[0].isValid() && meta.l3_metadata.fib_hit == 1w1)) { + process_validate_packet_0.apply(hdr, meta, standard_metadata); + process_mac_0.apply(hdr, meta, standard_metadata); + if (meta.l3_metadata.lkp_ip_type == 2w0) { + process_mac_acl_0.apply(hdr, meta, standard_metadata); + } else { + process_ip_acl_0.apply(hdr, meta, standard_metadata); + } + process_qos_0.apply(hdr, meta, standard_metadata); + switch (rmac.apply().action_run) { + rmac_miss: { + process_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1 && meta.ipv4_metadata.ipv4_unicast_enabled == 1w1) { + process_ipv4_racl_0.apply(hdr, meta, standard_metadata); + process_ipv4_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv4_fib_0.apply(hdr, meta, standard_metadata); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2 && meta.ipv6_metadata.ipv6_unicast_enabled == 1w1) { + process_ipv6_racl_0.apply(hdr, meta, standard_metadata); + process_ipv6_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv6_fib_0.apply(hdr, meta, standard_metadata); + } + } + process_urpf_bd_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + process_meter_index_0.apply(hdr, meta, standard_metadata); + process_hashes_0.apply(hdr, meta, standard_metadata); + process_meter_action_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_ingress_bd_stats_0.apply(hdr, meta, standard_metadata); + process_ingress_acl_stats_0.apply(hdr, meta, standard_metadata); + process_storm_control_stats_0.apply(hdr, meta, standard_metadata); + process_fwd_results_0.apply(hdr, meta, standard_metadata); + process_nexthop_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.egress_ifindex == 16w65535) { + process_multicast_flooding_0.apply(hdr, meta, standard_metadata); + } else { + process_lag_0.apply(hdr, meta, standard_metadata); + } + process_mac_learning_0.apply(hdr, meta, standard_metadata); + } + process_fabric_lag_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_system_acl_0.apply(hdr, meta, standard_metadata); + } + } +} + +control DeparserImpl(packet_out packet, in headers hdr) { + apply { + packet.emit(hdr.ethernet); + packet.emit(hdr.fabric_header); + packet.emit(hdr.fabric_header_cpu); + packet.emit(hdr.fabric_header_sflow); + packet.emit(hdr.fabric_header_mirror); + packet.emit(hdr.fabric_header_multicast); + packet.emit(hdr.fabric_header_unicast); + packet.emit(hdr.fabric_payload_header); + packet.emit(hdr.llc_header); + packet.emit(hdr.snap_header); + packet.emit(hdr.vlan_tag_[0]); + packet.emit(hdr.vlan_tag_[1]); + packet.emit(hdr.arp_rarp); + packet.emit(hdr.arp_rarp_ipv4); + packet.emit(hdr.ipv6); + packet.emit(hdr.ipv4); + packet.emit(hdr.gre); + packet.emit(hdr.erspan_t3_header); + packet.emit(hdr.nvgre); + packet.emit(hdr.udp); + packet.emit(hdr.sflow); + packet.emit(hdr.vxlan_gpe); + packet.emit(hdr.vxlan_gpe_int_header); + packet.emit(hdr.int_header); + packet.emit(hdr.int_switch_id_header); + packet.emit(hdr.int_ingress_port_id_header); + packet.emit(hdr.int_hop_latency_header); + packet.emit(hdr.int_q_occupancy_header); + packet.emit(hdr.int_ingress_tstamp_header); + packet.emit(hdr.int_egress_port_id_header); + packet.emit(hdr.int_q_congestion_header); + packet.emit(hdr.int_egress_port_tx_utilization_header); + packet.emit(hdr.int_val); + packet.emit(hdr.genv); + packet.emit(hdr.vxlan); + packet.emit(hdr.tcp); + packet.emit(hdr.icmp); + packet.emit(hdr.mpls); + packet.emit(hdr.inner_ethernet); + packet.emit(hdr.inner_ipv6); + packet.emit(hdr.inner_ipv4); + packet.emit(hdr.inner_udp); + packet.emit(hdr.inner_tcp); + packet.emit(hdr.inner_icmp); + } +} + +control verifyChecksum(inout headers hdr, inout metadata meta) { + apply { + verify_checksum(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + verify_checksum(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +control computeChecksum(inout headers hdr, inout metadata meta) { + apply { + update_checksum(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + update_checksum(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +V1Switch(ParserImpl(), verifyChecksum(), ingress(), egress(), computeChecksum(), DeparserImpl()) main; diff --git a/testdata/p4_16_samples_outputs/switch_p4_16-first.p4 b/testdata/p4_16_samples_outputs/switch_p4_16-first.p4 new file mode 100644 index 00000000000..8d0a72cda21 --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16-first.p4 @@ -0,0 +1,6114 @@ +#include +#define V1MODEL_VERSION 20200408 +#include + +enum bit<8> FieldLists { + none = 8w0, + i2e_mirror_info = 8w1, + cpu_info = 8w2, + e2e_mirror_info = 8w3, + int_i2e_mirror_info = 8w4, + mirror_info = 8w5, + sflow_cpu_info = 8w6 +} + +struct acl_metadata_t { + bit<1> acl_deny; + bit<1> acl_copy; + bit<1> racl_deny; + bit<16> acl_nexthop; + bit<16> racl_nexthop; + bit<1> acl_nexthop_type; + bit<1> racl_nexthop_type; + bit<1> acl_redirect; + bit<1> racl_redirect; + bit<16> if_label; + bit<16> bd_label; + bit<14> acl_stats_index; +} + +struct egress_filter_metadata_t { + bit<16> ifindex_check; + bit<16> bd; + bit<16> inner_bd; +} + +struct egress_metadata_t { + bit<1> bypass; + bit<2> port_type; + bit<16> payload_length; + bit<9> smac_idx; + bit<16> bd; + bit<16> outer_bd; + bit<48> mac_da; + bit<1> routed; + bit<16> same_bd_check; + bit<8> drop_reason; + bit<16> ifindex; +} + +struct fabric_metadata_t { + bit<3> packetType; + bit<1> fabric_header_present; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> reason_code; + bit<8> dst_device; + bit<16> dst_port; +} + +struct global_config_metadata_t { + bit<1> enable_dod; +} + +struct hash_metadata_t { + bit<16> hash1; + bit<16> hash2; + bit<16> entropy_hash; +} + +struct i2e_metadata_t { + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info) + bit<32> ingress_tstamp; + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info, FieldLists.int_i2e_mirror_info) + bit<16> mirror_session_id; +} + +struct ingress_metadata_t { + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<9> ingress_port; + @field_list(FieldLists.cpu_info, FieldLists.mirror_info, FieldLists.sflow_cpu_info) + bit<16> ifindex; + bit<16> egress_ifindex; + bit<2> port_type; + bit<16> outer_bd; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> bd; + bit<1> drop_flag; + @field_list(FieldLists.mirror_info) + bit<8> drop_reason; + bit<1> control_frame; + bit<16> bypass_lookups; + @saturating + bit<32> sflow_take_sample; +} + +struct int_metadata_t { + bit<32> switch_id; + bit<8> insert_cnt; + bit<16> insert_byte_cnt; + bit<16> gpe_int_hdr_len; + bit<8> gpe_int_hdr_len8; + bit<16> instruction_cnt; +} + +struct int_metadata_i2e_t { + @field_list(FieldLists.int_i2e_mirror_info) + bit<1> sink; + bit<1> source; +} + +struct ingress_intrinsic_metadata_t { + bit<48> ingress_global_timestamp; + bit<16> mcast_grp; + bit<16> egress_rid; + bit<3> priority; +} + +struct ipv4_metadata_t { + bit<32> lkp_ipv4_sa; + bit<32> lkp_ipv4_da; + bit<1> ipv4_unicast_enabled; + bit<2> ipv4_urpf_mode; +} + +struct ipv6_metadata_t { + bit<128> lkp_ipv6_sa; + bit<128> lkp_ipv6_da; + bit<1> ipv6_unicast_enabled; + bit<1> ipv6_src_is_link_local; + bit<2> ipv6_urpf_mode; +} + +struct l2_metadata_t { + bit<48> lkp_mac_sa; + bit<48> lkp_mac_da; + bit<3> lkp_pkt_type; + bit<16> lkp_mac_type; + bit<16> l2_nexthop; + bit<1> l2_nexthop_type; + bit<1> l2_redirect; + bit<1> l2_src_miss; + bit<16> l2_src_move; + bit<10> stp_group; + bit<3> stp_state; + bit<16> bd_stats_idx; + bit<1> learning_enabled; + bit<1> port_vlan_mapping_miss; + bit<16> same_if_check; +} + +struct l3_metadata_t { + bit<2> lkp_ip_type; + bit<4> lkp_ip_version; + bit<8> lkp_ip_proto; + bit<8> lkp_ip_tc; + bit<8> lkp_ip_ttl; + bit<16> lkp_l4_sport; + bit<16> lkp_l4_dport; + bit<16> lkp_outer_l4_sport; + bit<16> lkp_outer_l4_dport; + bit<16> vrf; + bit<10> rmac_group; + bit<1> rmac_hit; + bit<2> urpf_mode; + bit<1> urpf_hit; + bit<1> urpf_check_fail; + bit<16> urpf_bd_group; + bit<1> fib_hit; + bit<16> fib_nexthop; + bit<1> fib_nexthop_type; + bit<16> same_bd_check; + bit<16> nexthop_index; + bit<1> routed; + bit<1> outer_routed; + bit<8> mtu_index; + bit<1> l3_copy; + @saturating + bit<16> l3_mtu_check; +} + +struct meter_metadata_t { + bit<2> meter_color; + bit<16> meter_index; +} + +struct multicast_metadata_t { + bit<1> ipv4_mcast_key_type; + bit<16> ipv4_mcast_key; + bit<1> ipv6_mcast_key_type; + bit<16> ipv6_mcast_key; + bit<1> outer_mcast_route_hit; + bit<2> outer_mcast_mode; + bit<1> mcast_route_hit; + bit<1> mcast_bridge_hit; + bit<1> ipv4_multicast_enabled; + bit<1> ipv6_multicast_enabled; + bit<1> igmp_snooping_enabled; + bit<1> mld_snooping_enabled; + bit<16> bd_mrpf_group; + bit<16> mcast_rpf_group; + bit<2> mcast_mode; + bit<16> multicast_route_mc_index; + bit<16> multicast_bridge_mc_index; + bit<1> inner_replica; + bit<1> replica; + bit<16> mcast_grp; +} + +struct nexthop_metadata_t { + bit<1> nexthop_type; +} + +struct qos_metadata_t { + bit<8> outer_dscp; + bit<3> marked_cos; + bit<8> marked_dscp; + bit<3> marked_exp; +} + +struct queueing_metadata_t { + bit<48> enq_timestamp; + bit<16> enq_qdepth; + bit<32> deq_timedelta; + bit<16> deq_qdepth; +} + +struct security_metadata_t { + bit<1> storm_control_color; + bit<1> ipsg_enabled; + bit<1> ipsg_check_fail; +} + +struct sflow_meta_t { + bit<16> sflow_session_id; +} + +struct tunnel_metadata_t { + bit<5> ingress_tunnel_type; + bit<24> tunnel_vni; + bit<1> mpls_enabled; + bit<20> mpls_label; + bit<3> mpls_exp; + bit<8> mpls_ttl; + bit<5> egress_tunnel_type; + bit<14> tunnel_index; + bit<9> tunnel_src_index; + bit<9> tunnel_smac_index; + bit<14> tunnel_dst_index; + bit<14> tunnel_dmac_index; + bit<24> vnid; + bit<1> tunnel_terminate; + bit<1> tunnel_if_check; + bit<4> egress_header_count; + bit<8> inner_ip_proto; +} + +header arp_rarp_t { + bit<16> hwType; + bit<16> protoType; + bit<8> hwAddrLen; + bit<8> protoAddrLen; + bit<16> opcode; +} + +header arp_rarp_ipv4_t { + bit<48> srcHwAddr; + bit<32> srcProtoAddr; + bit<48> dstHwAddr; + bit<32> dstProtoAddr; +} + +header bfd_t { + bit<3> version; + bit<5> diag; + bit<2> state; + bit<1> p; + bit<1> f; + bit<1> c; + bit<1> a; + bit<1> d; + bit<1> m; + bit<8> detectMult; + bit<8> len; + bit<32> myDiscriminator; + bit<32> yourDiscriminator; + bit<32> desiredMinTxInterval; + bit<32> requiredMinRxInterval; + bit<32> requiredMinEchoRxInterval; +} + +header eompls_t { + bit<4> zero; + bit<12> reserved; + bit<16> seqNo; +} + +@name("erspan_header_t3_t") header erspan_header_t3_t_0 { + bit<4> version; + bit<12> vlan; + bit<6> priority; + bit<10> span_id; + bit<32> timestamp; + bit<32> sgt_other; +} + +header ethernet_t { + bit<48> dstAddr; + bit<48> srcAddr; + bit<16> etherType; +} + +header fabric_header_t { + bit<3> packetType; + bit<2> headerVersion; + bit<2> packetVersion; + bit<1> pad1; + bit<3> fabricColor; + bit<5> fabricQos; + bit<8> dstDevice; + bit<16> dstPortOrGroup; +} + +header fabric_header_cpu_t { + bit<5> egressQueue; + bit<1> txBypass; + bit<2> reserved; + bit<16> ingressPort; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> reasonCode; +} + +header fabric_header_mirror_t { + bit<16> rewriteIndex; + bit<10> egressPort; + bit<5> egressQueue; + bit<1> pad; +} + +header fabric_header_multicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> mcastGrp; +} + +header fabric_header_sflow_t { + bit<16> sflow_session_id; +} + +header fabric_header_unicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> nexthopIndex; +} + +header fabric_payload_header_t { + bit<16> etherType; +} + +header fcoe_header_t { + bit<4> version; + bit<4> type_; + bit<8> sof; + bit<32> rsvd1; + bit<32> ts_upper; + bit<32> ts_lower; + bit<32> size_; + bit<8> eof; + bit<24> rsvd2; +} + +header genv_t { + bit<2> ver; + bit<6> optLen; + bit<1> oam; + bit<1> critical; + bit<6> reserved; + bit<16> protoType; + bit<24> vni; + bit<8> reserved2; +} + +header gre_t { + bit<1> C; + bit<1> R; + bit<1> K; + bit<1> S; + bit<1> s; + bit<3> recurse; + bit<5> flags; + bit<3> ver; + bit<16> proto; +} + +header icmp_t { + bit<16> typeCode; + bit<16> hdrChecksum; +} + +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; + bit<32> srcAddr; + bit<32> dstAddr; +} + +header ipv6_t { + bit<4> version; + bit<8> trafficClass; + bit<20> flowLabel; + bit<16> payloadLen; + bit<8> nextHdr; + bit<8> hopLimit; + bit<128> srcAddr; + bit<128> dstAddr; +} + +header sctp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> verifTag; + bit<32> checksum; +} + +header tcp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> seqNo; + bit<32> ackNo; + bit<4> dataOffset; + bit<4> res; + bit<8> flags; + bit<16> window; + bit<16> checksum; + bit<16> urgentPtr; +} + +header udp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<16> length_; + bit<16> checksum; +} + +header int_egress_port_id_header_t { + bit<1> bos; + bit<31> egress_port_id; +} + +header int_egress_port_tx_utilization_header_t { + bit<1> bos; + bit<31> egress_port_tx_utilization; +} + +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +header int_hop_latency_header_t { + bit<1> bos; + bit<31> hop_latency; +} + +header int_ingress_port_id_header_t { + bit<1> bos; + bit<15> ingress_port_id_1; + bit<16> ingress_port_id_0; +} + +header int_ingress_tstamp_header_t { + bit<1> bos; + bit<31> ingress_tstamp; +} + +header int_q_congestion_header_t { + bit<1> bos; + bit<31> q_congestion; +} + +header int_q_occupancy_header_t { + bit<1> bos; + bit<7> q_occupancy1; + bit<24> q_occupancy0; +} + +header int_switch_id_header_t { + bit<1> bos; + bit<31> switch_id; +} + +header lisp_t { + bit<8> flags; + bit<24> nonce; + bit<32> lsbsInstanceId; +} + +header llc_header_t { + bit<8> dsap; + bit<8> ssap; + bit<8> control_; +} + +header nsh_t { + bit<1> oam; + bit<1> context; + bit<6> flags; + bit<8> reserved; + bit<16> protoType; + bit<24> spath; + bit<8> sindex; +} + +header nsh_context_t { + bit<32> network_platform; + bit<32> network_shared; + bit<32> service_platform; + bit<32> service_shared; +} + +header nvgre_t { + bit<24> tni; + bit<8> flow_id; +} + +header roce_header_t { + bit<320> ib_grh; + bit<96> ib_bth; +} + +header roce_v2_header_t { + bit<96> ib_bth; +} + +header sflow_hdr_t { + bit<32> version; + bit<32> addrType; + bit<32> ipAddress; + bit<32> subAgentId; + bit<32> seqNumber; + bit<32> uptime; + bit<32> numSamples; +} + +header sflow_raw_hdr_record_t { + bit<20> enterprise; + bit<12> format; + bit<32> flowDataLength; + bit<32> headerProtocol; + bit<32> frameLength; + bit<32> bytesRemoved; + bit<32> headerSize; +} + +header sflow_sample_t { + bit<20> enterprise; + bit<12> format; + bit<32> sampleLength; + bit<32> seqNumer; + bit<8> srcIdType; + bit<24> srcIdIndex; + bit<32> samplingRate; + bit<32> samplePool; + bit<32> numDrops; + bit<32> inputIfindex; + bit<32> outputIfindex; + bit<32> numFlowRecords; +} + +header snap_header_t { + bit<24> oui; + bit<16> type_; +} + +header trill_t { + bit<2> version; + bit<2> reserved; + bit<1> multiDestination; + bit<5> optLength; + bit<6> hopCount; + bit<16> egressRbridge; + bit<16> ingressRbridge; +} + +header vntag_t { + bit<1> direction; + bit<1> pointer; + bit<14> destVif; + bit<1> looped; + bit<1> reserved; + bit<2> version; + bit<12> srcVif; +} + +header vxlan_t { + bit<8> flags; + bit<24> reserved; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_t { + bit<8> flags; + bit<16> reserved; + bit<8> next_proto; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_int_header_t { + bit<8> int_type; + bit<8> rsvd; + bit<8> len; + bit<8> next_proto; +} + +header int_value_t { + bit<1> bos; + bit<31> val; +} + +header mpls_t { + bit<20> label; + bit<3> exp; + bit<1> bos; + bit<8> ttl; +} + +header vlan_tag_t { + bit<3> pcp; + bit<1> cfi; + bit<12> vid; + bit<16> etherType; +} + +struct metadata { + @name(".acl_metadata") + acl_metadata_t acl_metadata; + @name(".egress_filter_metadata") + egress_filter_metadata_t egress_filter_metadata; + @name(".egress_metadata") + egress_metadata_t egress_metadata; + @name(".fabric_metadata") + fabric_metadata_t fabric_metadata; + @name(".global_config_metadata") + global_config_metadata_t global_config_metadata; + @name(".hash_metadata") + hash_metadata_t hash_metadata; + @name(".i2e_metadata") + i2e_metadata_t i2e_metadata; + @name(".ingress_metadata") + ingress_metadata_t ingress_metadata; + @name(".int_metadata") + int_metadata_t int_metadata; + @name(".int_metadata_i2e") + int_metadata_i2e_t int_metadata_i2e; + @name(".ipv4_metadata") + ipv4_metadata_t ipv4_metadata; + @name(".ipv6_metadata") + ipv6_metadata_t ipv6_metadata; + @name(".l2_metadata") + l2_metadata_t l2_metadata; + @name(".l3_metadata") + l3_metadata_t l3_metadata; + @name(".meter_metadata") + meter_metadata_t meter_metadata; + @name(".multicast_metadata") + multicast_metadata_t multicast_metadata; + @name(".nexthop_metadata") + nexthop_metadata_t nexthop_metadata; + @name(".qos_metadata") + qos_metadata_t qos_metadata; + @name(".security_metadata") + security_metadata_t security_metadata; + @name(".sflow_metadata") + sflow_meta_t sflow_metadata; + @name(".tunnel_metadata") + tunnel_metadata_t tunnel_metadata; +} + +struct headers { + @name(".arp_rarp") + arp_rarp_t arp_rarp; + @name(".arp_rarp_ipv4") + arp_rarp_ipv4_t arp_rarp_ipv4; + @name(".bfd") + bfd_t bfd; + @name(".eompls") + eompls_t eompls; + @name(".erspan_t3_header") + erspan_header_t3_t_0 erspan_t3_header; + @name(".ethernet") + ethernet_t ethernet; + @name(".fabric_header") + fabric_header_t fabric_header; + @name(".fabric_header_cpu") + fabric_header_cpu_t fabric_header_cpu; + @name(".fabric_header_mirror") + fabric_header_mirror_t fabric_header_mirror; + @name(".fabric_header_multicast") + fabric_header_multicast_t fabric_header_multicast; + @name(".fabric_header_sflow") + fabric_header_sflow_t fabric_header_sflow; + @name(".fabric_header_unicast") + fabric_header_unicast_t fabric_header_unicast; + @name(".fabric_payload_header") + fabric_payload_header_t fabric_payload_header; + @name(".fcoe") + fcoe_header_t fcoe; + @name(".genv") + genv_t genv; + @name(".gre") + gre_t gre; + @name(".icmp") + icmp_t icmp; + @name(".inner_ethernet") + ethernet_t inner_ethernet; + @name(".inner_icmp") + icmp_t inner_icmp; + @name(".inner_ipv4") + ipv4_t inner_ipv4; + @name(".inner_ipv6") + ipv6_t inner_ipv6; + @name(".inner_sctp") + sctp_t inner_sctp; + @name(".inner_tcp") + tcp_t inner_tcp; + @name(".inner_udp") + udp_t inner_udp; + @name(".int_egress_port_id_header") + int_egress_port_id_header_t int_egress_port_id_header; + @name(".int_egress_port_tx_utilization_header") + int_egress_port_tx_utilization_header_t int_egress_port_tx_utilization_header; + @name(".int_header") + int_header_t int_header; + @name(".int_hop_latency_header") + int_hop_latency_header_t int_hop_latency_header; + @name(".int_ingress_port_id_header") + int_ingress_port_id_header_t int_ingress_port_id_header; + @name(".int_ingress_tstamp_header") + int_ingress_tstamp_header_t int_ingress_tstamp_header; + @name(".int_q_congestion_header") + int_q_congestion_header_t int_q_congestion_header; + @name(".int_q_occupancy_header") + int_q_occupancy_header_t int_q_occupancy_header; + @name(".int_switch_id_header") + int_switch_id_header_t int_switch_id_header; + @name(".ipv4") + ipv4_t ipv4; + @name(".ipv6") + ipv6_t ipv6; + @name(".lisp") + lisp_t lisp; + @name(".llc_header") + llc_header_t llc_header; + @name(".nsh") + nsh_t nsh; + @name(".nsh_context") + nsh_context_t nsh_context; + @name(".nvgre") + nvgre_t nvgre; + @name(".outer_udp") + udp_t outer_udp; + @name(".roce") + roce_header_t roce; + @name(".roce_v2") + roce_v2_header_t roce_v2; + @name(".sctp") + sctp_t sctp; + @name(".sflow") + sflow_hdr_t sflow; + @name(".sflow_raw_hdr_record") + sflow_raw_hdr_record_t sflow_raw_hdr_record; + @name(".sflow_sample") + sflow_sample_t sflow_sample; + @name(".snap_header") + snap_header_t snap_header; + @name(".tcp") + tcp_t tcp; + @name(".trill") + trill_t trill; + @name(".udp") + udp_t udp; + @name(".vntag") + vntag_t vntag; + @name(".vxlan") + vxlan_t vxlan; + @name(".vxlan_gpe") + vxlan_gpe_t vxlan_gpe; + @name(".vxlan_gpe_int_header") + vxlan_gpe_int_header_t vxlan_gpe_int_header; + @name(".int_val") + int_value_t[24] int_val; + @name(".mpls") + mpls_t[3] mpls; + @name(".vlan_tag_") + vlan_tag_t[2] vlan_tag_; +} + +parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".parse_all_int_meta_value_heders") state parse_all_int_meta_value_heders { + packet.extract(hdr.int_switch_id_header); + packet.extract(hdr.int_ingress_port_id_header); + packet.extract(hdr.int_hop_latency_header); + packet.extract(hdr.int_q_occupancy_header); + packet.extract(hdr.int_ingress_tstamp_header); + packet.extract(hdr.int_egress_port_id_header); + packet.extract(hdr.int_q_congestion_header); + packet.extract(hdr.int_egress_port_tx_utilization_header); + transition parse_int_val; + } + @name(".parse_arp_rarp") state parse_arp_rarp { + packet.extract(hdr.arp_rarp); + transition select(hdr.arp_rarp.protoType) { + 16w0x800: parse_arp_rarp_ipv4; + default: accept; + } + } + @name(".parse_arp_rarp_ipv4") state parse_arp_rarp_ipv4 { + packet.extract(hdr.arp_rarp_ipv4); + transition parse_set_prio_med; + } + @name(".parse_bfd") state parse_bfd { + packet.extract(hdr.bfd); + transition parse_set_prio_max; + } + @name(".parse_eompls") state parse_eompls { + meta.tunnel_metadata.ingress_tunnel_type = 5w6; + transition parse_inner_ethernet; + } + @name(".parse_erspan_t3") state parse_erspan_t3 { + packet.extract(hdr.erspan_t3_header); + transition parse_inner_ethernet; + } + @name(".parse_ethernet") state parse_ethernet { + packet.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x9000: parse_fabric_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_header") state parse_fabric_header { + packet.extract(hdr.fabric_header); + transition select(hdr.fabric_header.packetType) { + 3w1: parse_fabric_header_unicast; + 3w2: parse_fabric_header_multicast; + 3w3: parse_fabric_header_mirror; + 3w5: parse_fabric_header_cpu; + default: accept; + } + } + @name(".parse_fabric_header_cpu") state parse_fabric_header_cpu { + packet.extract(hdr.fabric_header_cpu); + meta.ingress_metadata.bypass_lookups = hdr.fabric_header_cpu.reasonCode; + transition select(hdr.fabric_header_cpu.reasonCode) { + 16w0x4: parse_fabric_sflow_header; + default: parse_fabric_payload_header; + } + } + @name(".parse_fabric_header_mirror") state parse_fabric_header_mirror { + packet.extract(hdr.fabric_header_mirror); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_multicast") state parse_fabric_header_multicast { + packet.extract(hdr.fabric_header_multicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_unicast") state parse_fabric_header_unicast { + packet.extract(hdr.fabric_header_unicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_payload_header") state parse_fabric_payload_header { + packet.extract(hdr.fabric_payload_header); + transition select(hdr.fabric_payload_header.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_sflow_header") state parse_fabric_sflow_header { + packet.extract(hdr.fabric_header_sflow); + transition parse_fabric_payload_header; + } + @name(".parse_fcoe") state parse_fcoe { + packet.extract(hdr.fcoe); + transition accept; + } + @name(".parse_geneve") state parse_geneve { + packet.extract(hdr.genv); + meta.tunnel_metadata.tunnel_vni = hdr.genv.vni; + meta.tunnel_metadata.ingress_tunnel_type = 5w4; + transition select(hdr.genv.ver, hdr.genv.optLen, hdr.genv.protoType) { + (2w0x0, 6w0x0, 16w0x6558): parse_inner_ethernet; + (2w0x0, 6w0x0, 16w0x800): parse_inner_ipv4; + (2w0x0, 6w0x0, 16w0x86dd): parse_inner_ipv6; + default: accept; + } + } + @name(".parse_gpe_int_header") state parse_gpe_int_header { + packet.extract(hdr.vxlan_gpe_int_header); + meta.int_metadata.gpe_int_hdr_len = (bit<16>)hdr.vxlan_gpe_int_header.len; + transition parse_int_header; + } + @name(".parse_gre") state parse_gre { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x1, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x6558): parse_nvgre; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x86dd): parse_gre_ipv6; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x22eb): parse_erspan_t3; + default: accept; + } + } + @name(".parse_gre_ipv4") state parse_gre_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv4; + } + @name(".parse_gre_ipv6") state parse_gre_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv6; + } + @name(".parse_gre_v6") state parse_gre_v6 { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + default: accept; + } + } + @name(".parse_icmp") state parse_icmp { + packet.extract(hdr.icmp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.icmp.typeCode; + transition select(hdr.icmp.typeCode) { + 16w0x8200 &&& 16w0xfe00: parse_set_prio_med; + 16w0x8400 &&& 16w0xfc00: parse_set_prio_med; + 16w0x8800 &&& 16w0xff00: parse_set_prio_med; + default: accept; + } + } + @name(".parse_inner_ethernet") state parse_inner_ethernet { + packet.extract(hdr.inner_ethernet); + meta.l2_metadata.lkp_mac_sa = hdr.inner_ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.inner_ethernet.dstAddr; + transition select(hdr.inner_ethernet.etherType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_inner_icmp") state parse_inner_icmp { + packet.extract(hdr.inner_icmp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_icmp.typeCode; + transition accept; + } + @name(".parse_inner_ipv4") state parse_inner_ipv4 { + packet.extract(hdr.inner_ipv4); + meta.ipv4_metadata.lkp_ipv4_sa = hdr.inner_ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.inner_ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.inner_ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = hdr.inner_ipv4.ttl; + transition select(hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ihl, hdr.inner_ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_inner_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_inner_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_ipv6") state parse_inner_ipv6 { + packet.extract(hdr.inner_ipv6); + meta.ipv6_metadata.lkp_ipv6_sa = hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.inner_ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = hdr.inner_ipv6.hopLimit; + transition select(hdr.inner_ipv6.nextHdr) { + 8w58: parse_inner_icmp; + 8w6: parse_inner_tcp; + 8w17: parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_sctp") state parse_inner_sctp { + packet.extract(hdr.inner_sctp); + transition accept; + } + @name(".parse_inner_tcp") state parse_inner_tcp { + packet.extract(hdr.inner_tcp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_tcp.srcPort; + meta.l3_metadata.lkp_l4_dport = hdr.inner_tcp.dstPort; + transition accept; + } + @name(".parse_inner_udp") state parse_inner_udp { + packet.extract(hdr.inner_udp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_udp.srcPort; + meta.l3_metadata.lkp_l4_dport = hdr.inner_udp.dstPort; + transition accept; + } + @name(".parse_int_header") state parse_int_header { + packet.extract(hdr.int_header); + meta.int_metadata.instruction_cnt = (bit<16>)hdr.int_header.ins_cnt; + transition select(hdr.int_header.rsvd1, hdr.int_header.total_hop_cnt) { + (5w0x0, 8w0x0): accept; + (5w0x0 &&& 5w0xf, 8w0x0 &&& 8w0x0): parse_int_val; + default: accept; + default: parse_all_int_meta_value_heders; + } + } + @name(".parse_int_val") state parse_int_val { + packet.extract(hdr.int_val.next); + transition select(hdr.int_val.last.bos) { + 1w0: parse_int_val; + 1w1: parse_inner_ethernet; + } + } + @name(".parse_ipv4") state parse_ipv4 { + packet.extract(hdr.ipv4); + transition select(hdr.ipv4.fragOffset, hdr.ipv4.ihl, hdr.ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_udp; + (13w0x0, 4w0x5, 8w0x2f): parse_gre; + (13w0x0, 4w0x5, 8w0x4): parse_ipv4_in_ip; + (13w0x0, 4w0x5, 8w0x29): parse_ipv6_in_ip; + (13w0, 4w0, 8w2): parse_set_prio_med; + (13w0, 4w0, 8w88): parse_set_prio_med; + (13w0, 4w0, 8w89): parse_set_prio_med; + (13w0, 4w0, 8w103): parse_set_prio_med; + (13w0, 4w0, 8w112): parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv4_in_ip") state parse_ipv4_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv4; + } + @name(".parse_ipv6") state parse_ipv6 { + packet.extract(hdr.ipv6); + transition select(hdr.ipv6.nextHdr) { + 8w58: parse_icmp; + 8w6: parse_tcp; + 8w4: parse_ipv4_in_ip; + 8w17: parse_udp; + 8w47: parse_gre; + 8w41: parse_ipv6_in_ip; + 8w88: parse_set_prio_med; + 8w89: parse_set_prio_med; + 8w103: parse_set_prio_med; + 8w112: parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv6_in_ip") state parse_ipv6_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv6; + } + @name(".parse_lisp") state parse_lisp { + packet.extract(hdr.lisp); + transition select(packet.lookahead>()) { + 4w0x4: parse_inner_ipv4; + 4w0x6: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_llc_header") state parse_llc_header { + packet.extract(hdr.llc_header); + transition select(hdr.llc_header.dsap, hdr.llc_header.ssap) { + (8w0xaa, 8w0xaa): parse_snap_header; + (8w0xfe, 8w0xfe): parse_set_prio_med; + default: accept; + } + } + @name(".parse_mpls") state parse_mpls { + packet.extract(hdr.mpls.next); + transition select(hdr.mpls.last.bos) { + 1w0: parse_mpls; + 1w1: parse_mpls_bos; + default: accept; + } + } + @name(".parse_mpls_bos") state parse_mpls_bos { + transition select(packet.lookahead>()) { + 4w0x4: parse_mpls_inner_ipv4; + 4w0x6: parse_mpls_inner_ipv6; + default: parse_eompls; + } + } + @name(".parse_mpls_inner_ipv4") state parse_mpls_inner_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv4; + } + @name(".parse_mpls_inner_ipv6") state parse_mpls_inner_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv6; + } + @name(".parse_nsh") state parse_nsh { + packet.extract(hdr.nsh); + packet.extract(hdr.nsh_context); + transition select(hdr.nsh.protoType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + 16w0x6558: parse_inner_ethernet; + default: accept; + } + } + @name(".parse_nvgre") state parse_nvgre { + packet.extract(hdr.nvgre); + meta.tunnel_metadata.ingress_tunnel_type = 5w5; + meta.tunnel_metadata.tunnel_vni = hdr.nvgre.tni; + transition parse_inner_ethernet; + } + @name(".parse_pw") state parse_pw { + transition accept; + } + @name(".parse_qinq") state parse_qinq { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8100: parse_qinq_vlan; + default: accept; + } + } + @name(".parse_qinq_vlan") state parse_qinq_vlan { + packet.extract(hdr.vlan_tag_[1]); + transition select(hdr.vlan_tag_[1].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_roce") state parse_roce { + packet.extract(hdr.roce); + transition accept; + } + @name(".parse_roce_v2") state parse_roce_v2 { + packet.extract(hdr.roce_v2); + transition accept; + } + @name(".parse_sctp") state parse_sctp { + packet.extract(hdr.sctp); + transition accept; + } + @name(".parse_set_prio_high") state parse_set_prio_high { + standard_metadata.priority = 3w5; + transition accept; + } + @name(".parse_set_prio_max") state parse_set_prio_max { + standard_metadata.priority = 3w7; + transition accept; + } + @name(".parse_set_prio_med") state parse_set_prio_med { + standard_metadata.priority = 3w3; + transition accept; + } + @name(".parse_sflow") state parse_sflow { + packet.extract(hdr.sflow); + transition accept; + } + @name(".parse_snap_header") state parse_snap_header { + packet.extract(hdr.snap_header); + transition select(hdr.snap_header.type_) { + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_tcp") state parse_tcp { + packet.extract(hdr.tcp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.tcp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = hdr.tcp.dstPort; + transition select(hdr.tcp.dstPort) { + 16w179: parse_set_prio_med; + 16w639: parse_set_prio_med; + default: accept; + } + } + @name(".parse_trill") state parse_trill { + packet.extract(hdr.trill); + transition parse_inner_ethernet; + } + @name(".parse_udp") state parse_udp { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w4789: parse_vxlan; + 16w6081: parse_geneve; + 16w4790: parse_vxlan_gpe; + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + 16w6343: parse_sflow; + default: accept; + } + } + @name(".parse_udp_v6") state parse_udp_v6 { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + default: accept; + } + } + @name(".parse_vlan") state parse_vlan { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_vntag") state parse_vntag { + packet.extract(hdr.vntag); + transition parse_inner_ethernet; + } + @name(".parse_vpls") state parse_vpls { + transition accept; + } + @name(".parse_vxlan") state parse_vxlan { + packet.extract(hdr.vxlan); + meta.tunnel_metadata.ingress_tunnel_type = 5w1; + meta.tunnel_metadata.tunnel_vni = hdr.vxlan.vni; + transition parse_inner_ethernet; + } + @name(".parse_vxlan_gpe") state parse_vxlan_gpe { + packet.extract(hdr.vxlan_gpe); + meta.tunnel_metadata.ingress_tunnel_type = 5w12; + meta.tunnel_metadata.tunnel_vni = hdr.vxlan_gpe.vni; + transition select(hdr.vxlan_gpe.flags, hdr.vxlan_gpe.next_proto) { + (8w0x8 &&& 8w0x8, 8w0x5): parse_gpe_int_header; + default: parse_inner_ethernet; + } + } + @name(".start") state start { + transition parse_ethernet; + } +} + +@name(".bd_action_profile") action_profile(32w1024) bd_action_profile; +@name(".ecmp_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w10) ecmp_action_profile; +@name(".fabric_lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) fabric_lag_action_profile; +@name(".lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) lag_action_profile; +control process_replication(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_replication.nop") action nop() { + } + @name(".process_replication.set_replica_copy_bridged") action set_replica_copy_bridged() { + meta.egress_metadata.routed = 1w0; + } + @name(".process_replication.outer_replica_from_rid") action outer_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w0; + meta.egress_metadata.routed = meta.l3_metadata.outer_routed; + meta.egress_metadata.same_bd_check = bd ^ meta.ingress_metadata.outer_bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".process_replication.inner_replica_from_rid") action inner_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w1; + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.same_bd_check = bd ^ meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".replica_type") table replica_type { + actions = { + nop(); + set_replica_copy_bridged(); + @defaultonly NoAction(); + } + key = { + meta.multicast_metadata.replica : exact @name("multicast_metadata.replica"); + meta.egress_metadata.same_bd_check: ternary @name("egress_metadata.same_bd_check"); + } + size = 512; + default_action = NoAction(); + } + @name(".rid") table rid { + actions = { + nop(); + outer_replica_from_rid(); + inner_replica_from_rid(); + @defaultonly NoAction(); + } + key = { + standard_metadata.egress_rid: exact @name("standard_metadata.egress_rid"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (standard_metadata.egress_rid != 16w0) { + rid.apply(); + replica_type.apply(); + } + } +} + +control process_vlan_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_decap.nop") action nop() { + } + @name(".process_vlan_decap.remove_vlan_single_tagged") action remove_vlan_single_tagged() { + hdr.ethernet.etherType = hdr.vlan_tag_[0].etherType; + hdr.vlan_tag_[0].setInvalid(); + } + @name(".process_vlan_decap.remove_vlan_double_tagged") action remove_vlan_double_tagged() { + hdr.ethernet.etherType = hdr.vlan_tag_[1].etherType; + hdr.vlan_tag_[0].setInvalid(); + hdr.vlan_tag_[1].setInvalid(); + } + @name(".vlan_decap") table vlan_decap { + actions = { + nop(); + remove_vlan_single_tagged(); + remove_vlan_double_tagged(); + @defaultonly NoAction(); + } + key = { + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 1024; + default_action = NoAction(); + } + apply { + vlan_decap.apply(); + } +} + +control process_tunnel_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_decap.decap_inner_udp") action decap_inner_udp() { + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_tcp") action decap_inner_tcp() { + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_icmp") action decap_inner_icmp() { + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_unknown") action decap_inner_unknown() { + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv4") action decap_vxlan_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.vxlan.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv6") action decap_vxlan_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_non_ip") action decap_vxlan_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv4") action decap_genv_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.genv.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv6") action decap_genv_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_non_ip") action decap_genv_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv4") action decap_nvgre_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv6") action decap_nvgre_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_non_ip") action decap_nvgre_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_gre_inner_ipv4") action decap_gre_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_gre_inner_ipv6") action decap_gre_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_gre_inner_non_ip") action decap_gre_inner_non_ip() { + hdr.ethernet.etherType = hdr.gre.proto; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_ip_inner_ipv4") action decap_ip_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_ip_inner_ipv6") action decap_ip_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop1") action decap_mpls_inner_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop1") action decap_mpls_inner_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1") action decap_mpls_inner_ethernet_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1") action decap_mpls_inner_ethernet_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1") action decap_mpls_inner_ethernet_non_ip_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop2") action decap_mpls_inner_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop2") action decap_mpls_inner_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2") action decap_mpls_inner_ethernet_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2") action decap_mpls_inner_ethernet_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2") action decap_mpls_inner_ethernet_non_ip_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop3") action decap_mpls_inner_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop3") action decap_mpls_inner_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3") action decap_mpls_inner_ethernet_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3") action decap_mpls_inner_ethernet_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3") action decap_mpls_inner_ethernet_non_ip_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".tunnel_decap_process_inner") table tunnel_decap_process_inner { + actions = { + decap_inner_udp(); + decap_inner_tcp(); + decap_inner_icmp(); + decap_inner_unknown(); + @defaultonly NoAction(); + } + key = { + hdr.inner_tcp.isValid() : exact @name("inner_tcp.$valid$"); + hdr.inner_udp.isValid() : exact @name("inner_udp.$valid$"); + hdr.inner_icmp.isValid(): exact @name("inner_icmp.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_decap_process_outer") table tunnel_decap_process_outer { + actions = { + decap_vxlan_inner_ipv4(); + decap_vxlan_inner_ipv6(); + decap_vxlan_inner_non_ip(); + decap_genv_inner_ipv4(); + decap_genv_inner_ipv6(); + decap_genv_inner_non_ip(); + decap_nvgre_inner_ipv4(); + decap_nvgre_inner_ipv6(); + decap_nvgre_inner_non_ip(); + decap_gre_inner_ipv4(); + decap_gre_inner_ipv6(); + decap_gre_inner_non_ip(); + decap_ip_inner_ipv4(); + decap_ip_inner_ipv6(); + decap_mpls_inner_ipv4_pop1(); + decap_mpls_inner_ipv6_pop1(); + decap_mpls_inner_ethernet_ipv4_pop1(); + decap_mpls_inner_ethernet_ipv6_pop1(); + decap_mpls_inner_ethernet_non_ip_pop1(); + decap_mpls_inner_ipv4_pop2(); + decap_mpls_inner_ipv6_pop2(); + decap_mpls_inner_ethernet_ipv4_pop2(); + decap_mpls_inner_ethernet_ipv6_pop2(); + decap_mpls_inner_ethernet_non_ip_pop2(); + decap_mpls_inner_ipv4_pop3(); + decap_mpls_inner_ipv6_pop3(); + decap_mpls_inner_ethernet_ipv4_pop3(); + decap_mpls_inner_ethernet_ipv6_pop3(); + decap_mpls_inner_ethernet_non_ip_pop3(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w1) { + if (meta.multicast_metadata.inner_replica == 1w1 || meta.multicast_metadata.replica == 1w0) { + tunnel_decap_process_outer.apply(); + tunnel_decap_process_inner.apply(); + } + } + } +} + +control process_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_rewrite.nop") action nop() { + } + @name(".process_rewrite.set_l2_rewrite") action set_l2_rewrite() { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = meta.ingress_metadata.bd; + } + @name(".process_rewrite.set_l2_rewrite_with_tunnel") action set_l2_rewrite_with_tunnel(bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_l3_rewrite") action set_l3_rewrite(bit<16> bd, bit<8> mtu_index, bit<48> dmac) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = bd; + meta.l3_metadata.mtu_index = mtu_index; + } + @name(".process_rewrite.set_l3_rewrite_with_tunnel") action set_l3_rewrite_with_tunnel(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l2") action set_mpls_swap_push_rewrite_l2(bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + hdr.mpls[0].label = label; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_push_rewrite_l2") action set_mpls_push_rewrite_l2(bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l3") action set_mpls_swap_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + hdr.mpls[0].label = label; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.set_mpls_push_rewrite_l3") action set_mpls_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.rewrite_ipv4_multicast") action rewrite_ipv4_multicast() { + hdr.ethernet.dstAddr[22:0] = hdr.ipv4.dstAddr[22:0]; + } + @name(".process_rewrite.rewrite_ipv6_multicast") action rewrite_ipv6_multicast() { + } + @name(".rewrite") table rewrite { + actions = { + nop(); + set_l2_rewrite(); + set_l2_rewrite_with_tunnel(); + set_l3_rewrite(); + set_l3_rewrite_with_tunnel(); + set_mpls_swap_push_rewrite_l2(); + set_mpls_push_rewrite_l2(); + set_mpls_swap_push_rewrite_l3(); + set_mpls_push_rewrite_l3(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".rewrite_multicast") table rewrite_multicast { + actions = { + nop(); + rewrite_ipv4_multicast(); + rewrite_ipv6_multicast(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction(); + } + apply { + if (meta.egress_metadata.routed == 1w0 || meta.l3_metadata.nexthop_index != 16w0) { + rewrite.apply(); + } else { + rewrite_multicast.apply(); + } + } +} + +control process_egress_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_bd.nop") action nop() { + } + @name(".process_egress_bd.set_egress_bd_properties") action set_egress_bd_properties(bit<9> smac_idx) { + meta.egress_metadata.smac_idx = smac_idx; + } + @name(".egress_bd_map") table egress_bd_map { + actions = { + nop(); + set_egress_bd_properties(); + @defaultonly NoAction(); + } + key = { + meta.egress_metadata.bd: exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction(); + } + apply { + egress_bd_map.apply(); + } +} + +control process_mac_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_rewrite.nop") action nop() { + } + @name(".process_mac_rewrite.ipv4_unicast_rewrite") action ipv4_unicast_rewrite() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv4_multicast_rewrite") action ipv4_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x1005e000000; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv6_unicast_rewrite") action ipv6_unicast_rewrite() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.ipv6_multicast_rewrite") action ipv6_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x333300000000; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.mpls_rewrite") action mpls_rewrite() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.mpls[0].ttl = hdr.mpls[0].ttl + 8w255; + } + @name(".process_mac_rewrite.rewrite_smac") action rewrite_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".l3_rewrite") table l3_rewrite { + actions = { + nop(); + ipv4_unicast_rewrite(); + ipv4_multicast_rewrite(); + ipv6_unicast_rewrite(); + ipv6_multicast_rewrite(); + mpls_rewrite(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.mpls[0].isValid() : exact @name("mpls[0].$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction(); + } + @name(".smac_rewrite") table smac_rewrite { + actions = { + rewrite_smac(); + @defaultonly NoAction(); + } + key = { + meta.egress_metadata.smac_idx: exact @name("egress_metadata.smac_idx"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.egress_metadata.routed == 1w1) { + l3_rewrite.apply(); + smac_rewrite.apply(); + } + } +} + +control process_mtu(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mtu.mtu_miss") action mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_mtu.ipv4_mtu_check") action ipv4_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| hdr.ipv4.totalLen; + } + @name(".process_mtu.ipv6_mtu_check") action ipv6_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| hdr.ipv6.payloadLen; + } + @name(".mtu") table mtu { + actions = { + mtu_miss(); + ipv4_mtu_check(); + ipv6_mtu_check(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.mtu_index: exact @name("l3_metadata.mtu_index"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + apply { + mtu.apply(); + } +} + +control process_int_insertion(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_insertion.int_set_header_0_bos") action int_set_header_0_bos() { + hdr.int_switch_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_1_bos") action int_set_header_1_bos() { + hdr.int_ingress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_2_bos") action int_set_header_2_bos() { + hdr.int_hop_latency_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_3_bos") action int_set_header_3_bos() { + hdr.int_q_occupancy_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_4_bos") action int_set_header_4_bos() { + hdr.int_ingress_tstamp_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_5_bos") action int_set_header_5_bos() { + hdr.int_egress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_6_bos") action int_set_header_6_bos() { + hdr.int_q_congestion_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_7_bos") action int_set_header_7_bos() { + hdr.int_egress_port_tx_utilization_header.bos = 1w1; + } + @name(".process_int_insertion.nop") action nop() { + } + @name(".process_int_insertion.int_transit") action int_transit(bit<32> switch_id) { + meta.int_metadata.insert_cnt = hdr.int_header.max_hop_cnt - hdr.int_header.total_hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = meta.int_metadata.instruction_cnt << 2; + meta.int_metadata.gpe_int_hdr_len8 = (bit<8>)hdr.int_header.ins_cnt; + } + @name(".process_int_insertion.int_src") action int_src(bit<32> switch_id, bit<8> hop_cnt, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407, bit<16> ins_byte_cnt, bit<8> total_words) { + meta.int_metadata.insert_cnt = hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = ins_byte_cnt; + meta.int_metadata.gpe_int_hdr_len8 = total_words; + hdr.int_header.setValid(); + hdr.int_header.ver = 2w0; + hdr.int_header.rep = 2w0; + hdr.int_header.c = 1w0; + hdr.int_header.e = 1w0; + hdr.int_header.rsvd1 = 5w0; + hdr.int_header.ins_cnt = ins_cnt; + hdr.int_header.max_hop_cnt = hop_cnt; + hdr.int_header.total_hop_cnt = 8w0; + hdr.int_header.instruction_mask_0003 = ins_mask0003; + hdr.int_header.instruction_mask_0407 = ins_mask0407; + hdr.int_header.instruction_mask_0811 = 4w0; + hdr.int_header.instruction_mask_1215 = 4w0; + hdr.int_header.rsvd2 = 16w0; + } + @name(".process_int_insertion.int_reset") action int_reset() { + meta.int_metadata.switch_id = 32w0; + meta.int_metadata.insert_byte_cnt = 16w0; + meta.int_metadata.insert_cnt = 8w0; + meta.int_metadata.gpe_int_hdr_len8 = 8w0; + meta.int_metadata.gpe_int_hdr_len = 16w0; + meta.int_metadata.instruction_cnt = 16w0; + } + @name(".process_int_insertion.int_set_header_0003_i0") action int_set_header_0003_i0() { + } + @name(".process_int_insertion.int_set_header_3") action int_set_header_3() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + } + @name(".process_int_insertion.int_set_header_0003_i1") action int_set_header_0003_i1() { + int_set_header_3(); + } + @name(".process_int_insertion.int_set_header_2") action int_set_header_2() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i2") action int_set_header_0003_i2() { + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_0003_i3") action int_set_header_0003_i3() { + int_set_header_3(); + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_1") action int_set_header_1() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i4") action int_set_header_0003_i4() { + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i5") action int_set_header_0003_i5() { + int_set_header_3(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i6") action int_set_header_0003_i6() { + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i7") action int_set_header_0003_i7() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0") action int_set_header_0() { + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i8") action int_set_header_0003_i8() { + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i9") action int_set_header_0003_i9() { + int_set_header_3(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i10") action int_set_header_0003_i10() { + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i11") action int_set_header_0003_i11() { + int_set_header_3(); + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i12") action int_set_header_0003_i12() { + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i13") action int_set_header_0003_i13() { + int_set_header_3(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i14") action int_set_header_0003_i14() { + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i15") action int_set_header_0003_i15() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0407_i0") action int_set_header_0407_i0() { + } + @name(".process_int_insertion.int_set_header_7") action int_set_header_7() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i1") action int_set_header_0407_i1() { + int_set_header_7(); + } + @name(".process_int_insertion.int_set_header_6") action int_set_header_6() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i2") action int_set_header_0407_i2() { + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_0407_i3") action int_set_header_0407_i3() { + int_set_header_7(); + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_5") action int_set_header_5() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i4") action int_set_header_0407_i4() { + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i5") action int_set_header_0407_i5() { + int_set_header_7(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i6") action int_set_header_0407_i6() { + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i7") action int_set_header_0407_i7() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_4") action int_set_header_4() { + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i8") action int_set_header_0407_i8() { + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i9") action int_set_header_0407_i9() { + int_set_header_7(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i10") action int_set_header_0407_i10() { + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i11") action int_set_header_0407_i11() { + int_set_header_7(); + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i12") action int_set_header_0407_i12() { + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i13") action int_set_header_0407_i13() { + int_set_header_7(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i14") action int_set_header_0407_i14() { + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i15") action int_set_header_0407_i15() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_e_bit") action int_set_e_bit() { + hdr.int_header.e = 1w1; + } + @name(".process_int_insertion.int_update_total_hop_cnt") action int_update_total_hop_cnt() { + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 8w1; + } + @name(".int_bos") table int_bos { + actions = { + int_set_header_0_bos(); + int_set_header_1_bos(); + int_set_header_2_bos(); + int_set_header_3_bos(); + int_set_header_4_bos(); + int_set_header_5_bos(); + int_set_header_6_bos(); + int_set_header_7_bos(); + nop(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.total_hop_cnt : ternary @name("int_header.total_hop_cnt"); + hdr.int_header.instruction_mask_0003: ternary @name("int_header.instruction_mask_0003"); + hdr.int_header.instruction_mask_0407: ternary @name("int_header.instruction_mask_0407"); + hdr.int_header.instruction_mask_0811: ternary @name("int_header.instruction_mask_0811"); + hdr.int_header.instruction_mask_1215: ternary @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction(); + } + @name(".int_insert") table int_insert { + actions = { + int_transit(); + int_src(); + int_reset(); + @defaultonly NoAction(); + } + key = { + meta.int_metadata_i2e.source: ternary @name("int_metadata_i2e.source"); + meta.int_metadata_i2e.sink : ternary @name("int_metadata_i2e.sink"); + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + } + size = 3; + default_action = NoAction(); + } + @name(".int_inst_0003") table int_inst_0003 { + actions = { + int_set_header_0003_i0(); + int_set_header_0003_i1(); + int_set_header_0003_i2(); + int_set_header_0003_i3(); + int_set_header_0003_i4(); + int_set_header_0003_i5(); + int_set_header_0003_i6(); + int_set_header_0003_i7(); + int_set_header_0003_i8(); + int_set_header_0003_i9(); + int_set_header_0003_i10(); + int_set_header_0003_i11(); + int_set_header_0003_i12(); + int_set_header_0003_i13(); + int_set_header_0003_i14(); + int_set_header_0003_i15(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.instruction_mask_0003: exact @name("int_header.instruction_mask_0003"); + } + size = 17; + default_action = NoAction(); + } + @name(".int_inst_0407") table int_inst_0407 { + actions = { + int_set_header_0407_i0(); + int_set_header_0407_i1(); + int_set_header_0407_i2(); + int_set_header_0407_i3(); + int_set_header_0407_i4(); + int_set_header_0407_i5(); + int_set_header_0407_i6(); + int_set_header_0407_i7(); + int_set_header_0407_i8(); + int_set_header_0407_i9(); + int_set_header_0407_i10(); + int_set_header_0407_i11(); + int_set_header_0407_i12(); + int_set_header_0407_i13(); + int_set_header_0407_i14(); + int_set_header_0407_i15(); + nop(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.instruction_mask_0407: exact @name("int_header.instruction_mask_0407"); + } + size = 17; + default_action = NoAction(); + } + @name(".int_inst_0811") table int_inst_0811 { + actions = { + nop(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.instruction_mask_0811: exact @name("int_header.instruction_mask_0811"); + } + size = 16; + default_action = NoAction(); + } + @name(".int_inst_1215") table int_inst_1215 { + actions = { + nop(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.instruction_mask_1215: exact @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction(); + } + @name(".int_meta_header_update") table int_meta_header_update { + actions = { + int_set_e_bit(); + int_update_total_hop_cnt(); + @defaultonly NoAction(); + } + key = { + meta.int_metadata.insert_cnt: ternary @name("int_metadata.insert_cnt"); + } + size = 2; + default_action = NoAction(); + } + apply { + switch (int_insert.apply().action_run) { + int_transit: { + if (meta.int_metadata.insert_cnt != 8w0) { + int_inst_0003.apply(); + int_inst_0407.apply(); + int_inst_0811.apply(); + int_inst_1215.apply(); + int_bos.apply(); + } + int_meta_header_update.apply(); + } + default: { + } + } + } +} + +control process_egress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress_bd_stats") @min_width(32) direct_counter(CounterType.packets_and_bytes) egress_bd_stats; + @name(".process_egress_bd_stats.nop") action nop() { + } + @name(".process_egress_bd_stats.nop_0") action nop_0() { + egress_bd_stats.count(); + } + @name(".egress_bd_stats") table egress_bd_stats_0 { + actions = { + nop_0(); + @defaultonly NoAction(); + } + key = { + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + meta.l2_metadata.lkp_pkt_type: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + counters = egress_bd_stats; + default_action = NoAction(); + } + apply { + egress_bd_stats_0.apply(); + } +} + +control process_tunnel_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_encap.nop") action nop() { + } + @name(".process_tunnel_encap.set_egress_tunnel_vni") action set_egress_tunnel_vni(bit<24> vnid) { + meta.tunnel_metadata.vnid = vnid; + } + @name(".process_tunnel_encap.rewrite_tunnel_dmac") action rewrite_tunnel_dmac(bit<48> dmac) { + hdr.ethernet.dstAddr = dmac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_dst") action rewrite_tunnel_ipv4_dst(bit<32> ip) { + hdr.ipv4.dstAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_dst") action rewrite_tunnel_ipv6_dst(bit<128> ip) { + hdr.ipv6.dstAddr = ip; + } + @name(".process_tunnel_encap.inner_ipv4_udp_rewrite") action inner_ipv4_udp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.udp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_tcp_rewrite") action inner_ipv4_tcp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.tcp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_icmp_rewrite") action inner_ipv4_icmp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.icmp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_unknown_rewrite") action inner_ipv4_unknown_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv6_udp_rewrite") action inner_ipv6_udp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_tcp_rewrite") action inner_ipv6_tcp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.tcp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_icmp_rewrite") action inner_ipv6_icmp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.icmp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_unknown_rewrite") action inner_ipv6_unknown_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_non_ip_rewrite") action inner_non_ip_rewrite() { + meta.egress_metadata.payload_length = (bit<16>)standard_metadata.packet_length + 16w65522; + } + @name(".process_tunnel_encap.f_insert_vxlan_header") action f_insert_vxlan_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = meta.tunnel_metadata.vnid; + hdr.vxlan.reserved2 = 8w0; + } + @name(".process_tunnel_encap.f_insert_ipv4_header") action f_insert_ipv4_header(bit<8> proto) { + hdr.ipv4.setValid(); + hdr.ipv4.protocol = proto; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + } + @name(".process_tunnel_encap.ipv4_vxlan_rewrite") action ipv4_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_genv_header") action f_insert_genv_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = meta.tunnel_metadata.vnid; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + } + @name(".process_tunnel_encap.ipv4_genv_rewrite") action ipv4_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_nvgre_header") action f_insert_nvgre_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = meta.tunnel_metadata.vnid; + hdr.nvgre.flow_id = meta.hash_metadata.entropy_hash[7:0]; + } + @name(".process_tunnel_encap.ipv4_nvgre_rewrite") action ipv4_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w42; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_gre_header") action f_insert_gre_header() { + hdr.gre.setValid(); + } + @name(".process_tunnel_encap.ipv4_gre_rewrite") action ipv4_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = hdr.ethernet.etherType; + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w24; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_ip_rewrite") action ipv4_ip_rewrite() { + f_insert_ipv4_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w20; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_erspan_t3_header") action f_insert_erspan_t3_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = meta.i2e_metadata.ingress_tstamp; + hdr.erspan_t3_header.span_id = (bit<10>)meta.i2e_metadata.mirror_session_id; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + } + @name(".process_tunnel_encap.ipv4_erspan_t3_rewrite") action ipv4_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + } + @name(".process_tunnel_encap.f_insert_ipv6_header") action f_insert_ipv6_header(bit<8> proto) { + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = proto; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + } + @name(".process_tunnel_encap.ipv6_gre_rewrite") action ipv6_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = hdr.ethernet.etherType; + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w4; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_ip_rewrite") action ipv6_ip_rewrite() { + f_insert_ipv6_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_nvgre_rewrite") action ipv6_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w22; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_vxlan_rewrite") action ipv6_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_genv_rewrite") action ipv6_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_erspan_t3_rewrite") action ipv6_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w26; + } + @name(".process_tunnel_encap.mpls_ethernet_push1_rewrite") action mpls_ethernet_push1_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push1_rewrite") action mpls_ip_push1_rewrite() { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push2_rewrite") action mpls_ethernet_push2_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push2_rewrite") action mpls_ip_push2_rewrite() { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push3_rewrite") action mpls_ethernet_push3_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push3_rewrite") action mpls_ip_push3_rewrite() { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.fabric_rewrite") action fabric_rewrite(bit<14> tunnel_index) { + meta.tunnel_metadata.tunnel_index = tunnel_index; + } + @name(".process_tunnel_encap.tunnel_mtu_check") action tunnel_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| meta.egress_metadata.payload_length; + } + @name(".process_tunnel_encap.tunnel_mtu_miss") action tunnel_mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_tunnel_encap.set_tunnel_rewrite_details") action set_tunnel_rewrite_details(bit<16> outer_bd, bit<9> smac_idx, bit<14> dmac_idx, bit<9> sip_index, bit<14> dip_index) { + meta.egress_metadata.outer_bd = outer_bd; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + meta.tunnel_metadata.tunnel_src_index = sip_index; + meta.tunnel_metadata.tunnel_dst_index = dip_index; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push1") action set_mpls_rewrite_push1(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].bos = 1w0x1; + hdr.mpls[0].ttl = ttl1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push2") action set_mpls_rewrite_push2(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push3") action set_mpls_rewrite_push3(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<20> label3, bit<3> exp3, bit<8> ttl3, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x0; + hdr.mpls[2].label = label3; + hdr.mpls[2].exp = exp3; + hdr.mpls[2].ttl = ttl3; + hdr.mpls[2].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.cpu_rx_rewrite") action cpu_rx_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w5; + hdr.fabric_header_cpu.setValid(); + hdr.fabric_header_cpu.ingressPort = (bit<16>)meta.ingress_metadata.ingress_port; + hdr.fabric_header_cpu.ingressIfindex = meta.ingress_metadata.ifindex; + hdr.fabric_header_cpu.ingressBd = meta.ingress_metadata.bd; + hdr.fabric_header_cpu.reasonCode = meta.fabric_metadata.reason_code; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_unicast_rewrite") action fabric_unicast_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w1; + hdr.fabric_header.dstDevice = meta.fabric_metadata.dst_device; + hdr.fabric_header.dstPortOrGroup = meta.fabric_metadata.dst_port; + hdr.fabric_header_unicast.setValid(); + hdr.fabric_header_unicast.tunnelTerminate = meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_unicast.routed = meta.l3_metadata.routed; + hdr.fabric_header_unicast.outerRouted = meta.l3_metadata.outer_routed; + hdr.fabric_header_unicast.ingressTunnelType = meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_unicast.nexthopIndex = meta.l3_metadata.nexthop_index; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_multicast_rewrite") action fabric_multicast_rewrite(bit<16> fabric_mgid) { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w2; + hdr.fabric_header.dstDevice = 8w127; + hdr.fabric_header.dstPortOrGroup = fabric_mgid; + hdr.fabric_header_multicast.ingressIfindex = meta.ingress_metadata.ifindex; + hdr.fabric_header_multicast.ingressBd = meta.ingress_metadata.bd; + hdr.fabric_header_multicast.setValid(); + hdr.fabric_header_multicast.tunnelTerminate = meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_multicast.routed = meta.l3_metadata.routed; + hdr.fabric_header_multicast.outerRouted = meta.l3_metadata.outer_routed; + hdr.fabric_header_multicast.ingressTunnelType = meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_multicast.mcastGrp = meta.multicast_metadata.mcast_grp; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.rewrite_tunnel_smac") action rewrite_tunnel_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_src") action rewrite_tunnel_ipv4_src(bit<32> ip) { + hdr.ipv4.srcAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_src") action rewrite_tunnel_ipv6_src(bit<128> ip) { + hdr.ipv6.srcAddr = ip; + } + @name(".egress_vni") table egress_vni { + actions = { + nop(); + set_egress_tunnel_vni(); + @defaultonly NoAction(); + } + key = { + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + meta.tunnel_metadata.egress_tunnel_type: exact @name("tunnel_metadata.egress_tunnel_type"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_dmac_rewrite") table tunnel_dmac_rewrite { + actions = { + nop(); + rewrite_tunnel_dmac(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_dmac_index: exact @name("tunnel_metadata.tunnel_dmac_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_dst_rewrite") table tunnel_dst_rewrite { + actions = { + nop(); + rewrite_tunnel_ipv4_dst(); + rewrite_tunnel_ipv6_dst(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_dst_index: exact @name("tunnel_metadata.tunnel_dst_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_encap_process_inner") table tunnel_encap_process_inner { + actions = { + inner_ipv4_udp_rewrite(); + inner_ipv4_tcp_rewrite(); + inner_ipv4_icmp_rewrite(); + inner_ipv4_unknown_rewrite(); + inner_ipv6_udp_rewrite(); + inner_ipv6_tcp_rewrite(); + inner_ipv6_icmp_rewrite(); + inner_ipv6_unknown_rewrite(); + inner_non_ip_rewrite(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + hdr.tcp.isValid() : exact @name("tcp.$valid$"); + hdr.udp.isValid() : exact @name("udp.$valid$"); + hdr.icmp.isValid(): exact @name("icmp.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_encap_process_outer") table tunnel_encap_process_outer { + actions = { + nop(); + ipv4_vxlan_rewrite(); + ipv4_genv_rewrite(); + ipv4_nvgre_rewrite(); + ipv4_gre_rewrite(); + ipv4_ip_rewrite(); + ipv4_erspan_t3_rewrite(); + ipv6_gre_rewrite(); + ipv6_ip_rewrite(); + ipv6_nvgre_rewrite(); + ipv6_vxlan_rewrite(); + ipv6_genv_rewrite(); + ipv6_erspan_t3_rewrite(); + mpls_ethernet_push1_rewrite(); + mpls_ip_push1_rewrite(); + mpls_ethernet_push2_rewrite(); + mpls_ip_push2_rewrite(); + mpls_ethernet_push3_rewrite(); + mpls_ip_push3_rewrite(); + fabric_rewrite(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.egress_tunnel_type : exact @name("tunnel_metadata.egress_tunnel_type"); + meta.tunnel_metadata.egress_header_count: exact @name("tunnel_metadata.egress_header_count"); + meta.multicast_metadata.replica : exact @name("multicast_metadata.replica"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_mtu") table tunnel_mtu { + actions = { + tunnel_mtu_check(); + tunnel_mtu_miss(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_index: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_rewrite") table tunnel_rewrite { + actions = { + nop(); + set_tunnel_rewrite_details(); + set_mpls_rewrite_push1(); + set_mpls_rewrite_push2(); + set_mpls_rewrite_push3(); + cpu_rx_rewrite(); + fabric_unicast_rewrite(); + fabric_multicast_rewrite(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_index: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_smac_rewrite") table tunnel_smac_rewrite { + actions = { + nop(); + rewrite_tunnel_smac(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_smac_index: exact @name("tunnel_metadata.tunnel_smac_index"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_src_rewrite") table tunnel_src_rewrite { + actions = { + nop(); + rewrite_tunnel_ipv4_src(); + rewrite_tunnel_ipv6_src(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_src_index: exact @name("tunnel_metadata.tunnel_src_index"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.fabric_metadata.fabric_header_present == 1w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0) { + egress_vni.apply(); + if (meta.tunnel_metadata.egress_tunnel_type != 5w15 && meta.tunnel_metadata.egress_tunnel_type != 5w16) { + tunnel_encap_process_inner.apply(); + } + tunnel_encap_process_outer.apply(); + tunnel_rewrite.apply(); + tunnel_mtu.apply(); + tunnel_src_rewrite.apply(); + tunnel_dst_rewrite.apply(); + tunnel_smac_rewrite.apply(); + tunnel_dmac_rewrite.apply(); + } + } +} + +control process_int_outer_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_outer_encap.int_update_vxlan_gpe_ipv4") action int_update_vxlan_gpe_ipv4() { + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + meta.int_metadata.insert_byte_cnt; + hdr.vxlan_gpe_int_header.len = hdr.vxlan_gpe_int_header.len + meta.int_metadata.gpe_int_hdr_len8; + } + @name(".process_int_outer_encap.int_add_update_vxlan_gpe_ipv4") action int_add_update_vxlan_gpe_ipv4() { + hdr.vxlan_gpe_int_header.setValid(); + hdr.vxlan_gpe_int_header.int_type = 8w0x1; + hdr.vxlan_gpe_int_header.next_proto = 8w3; + hdr.vxlan_gpe.next_proto = 8w5; + hdr.vxlan_gpe_int_header.len = meta.int_metadata.gpe_int_hdr_len8; + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_outer_encap.nop") action nop() { + } + @name(".int_outer_encap") table int_outer_encap { + actions = { + int_update_vxlan_gpe_ipv4(); + int_add_update_vxlan_gpe_ipv4(); + nop(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.vxlan_gpe.isValid() : exact @name("vxlan_gpe.$valid$"); + meta.int_metadata_i2e.source : exact @name("int_metadata_i2e.source"); + meta.tunnel_metadata.egress_tunnel_type: ternary @name("tunnel_metadata.egress_tunnel_type"); + } + size = 8; + default_action = NoAction(); + } + apply { + if (meta.int_metadata.insert_cnt != 8w0) { + int_outer_encap.apply(); + } + } +} + +control process_vlan_xlate(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_xlate.set_egress_packet_vlan_untagged") action set_egress_packet_vlan_untagged() { + } + @name(".process_vlan_xlate.set_egress_packet_vlan_tagged") action set_egress_packet_vlan_tagged(bit<12> vlan_id) { + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[0].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[0].vid = vlan_id; + hdr.ethernet.etherType = 16w0x8100; + } + @name(".process_vlan_xlate.set_egress_packet_vlan_double_tagged") action set_egress_packet_vlan_double_tagged(bit<12> s_tag, bit<12> c_tag) { + hdr.vlan_tag_[1].setValid(); + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[1].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[1].vid = c_tag; + hdr.vlan_tag_[0].etherType = 16w0x8100; + hdr.vlan_tag_[0].vid = s_tag; + hdr.ethernet.etherType = 16w0x9100; + } + @name(".egress_vlan_xlate") table egress_vlan_xlate { + actions = { + set_egress_packet_vlan_untagged(); + set_egress_packet_vlan_tagged(); + set_egress_packet_vlan_double_tagged(); + @defaultonly NoAction(); + } + key = { + meta.egress_metadata.ifindex: exact @name("egress_metadata.ifindex"); + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction(); + } + apply { + egress_vlan_xlate.apply(); + } +} + +control process_egress_filter(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_filter.egress_filter_check") action egress_filter_check() { + meta.egress_filter_metadata.ifindex_check = meta.ingress_metadata.ifindex ^ meta.egress_metadata.ifindex; + meta.egress_filter_metadata.bd = meta.ingress_metadata.outer_bd ^ meta.egress_metadata.outer_bd; + meta.egress_filter_metadata.inner_bd = meta.ingress_metadata.bd ^ meta.egress_metadata.bd; + } + @name(".process_egress_filter.set_egress_filter_drop") action set_egress_filter_drop() { + mark_to_drop(standard_metadata); + } + @name(".egress_filter") table egress_filter { + actions = { + egress_filter_check(); + @defaultonly NoAction(); + } + default_action = NoAction(); + } + @name(".egress_filter_drop") table egress_filter_drop { + actions = { + set_egress_filter_drop(); + @defaultonly NoAction(); + } + default_action = NoAction(); + } + apply { + egress_filter.apply(); + if (meta.multicast_metadata.inner_replica == 1w1) { + if (meta.tunnel_metadata.ingress_tunnel_type == 5w0 && meta.tunnel_metadata.egress_tunnel_type == 5w0 && meta.egress_filter_metadata.bd == 16w0 && meta.egress_filter_metadata.ifindex_check == 16w0 || meta.tunnel_metadata.ingress_tunnel_type != 5w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0 && meta.egress_filter_metadata.inner_bd == 16w0) { + egress_filter_drop.apply(); + } + } + } +} + +control process_egress_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_acl.nop") action nop() { + } + @name(".process_egress_acl.egress_mirror") action egress_mirror(bit<32> session_id) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + clone_preserving_field_list(CloneType.E2E, session_id, 8w3); + } + @name(".process_egress_acl.egress_mirror_drop") action egress_mirror_drop(bit<32> session_id) { + egress_mirror(session_id); + mark_to_drop(standard_metadata); + } + @name(".process_egress_acl.egress_copy_to_cpu") action egress_copy_to_cpu(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.E2E, 32w250, 8w2); + } + @name(".process_egress_acl.egress_redirect_to_cpu") action egress_redirect_to_cpu(bit<16> reason_code) { + egress_copy_to_cpu(reason_code); + mark_to_drop(standard_metadata); + } + @name(".egress_acl") table egress_acl { + actions = { + nop(); + egress_mirror(); + egress_mirror_drop(); + egress_redirect_to_cpu(); + @defaultonly NoAction(); + } + key = { + standard_metadata.egress_port: ternary @name("standard_metadata.egress_port"); + meta.l3_metadata.l3_mtu_check: ternary @name("l3_metadata.l3_mtu_check"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.egress_metadata.bypass == 1w0) { + egress_acl.apply(); + } + } +} + +control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress.egress_port_type_normal") action egress_port_type_normal(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w0; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_fabric") action egress_port_type_fabric(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w1; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w15; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_cpu") action egress_port_type_cpu(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w2; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w16; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.nop") action nop() { + } + @name(".egress.set_mirror_nhop") action set_mirror_nhop(bit<16> nhop_idx) { + meta.l3_metadata.nexthop_index = nhop_idx; + } + @name(".egress.set_mirror_bd") action set_mirror_bd(bit<16> bd) { + meta.egress_metadata.bd = bd; + } + @name(".egress.sflow_pkt_to_cpu") action sflow_pkt_to_cpu() { + hdr.fabric_header_sflow.setValid(); + hdr.fabric_header_sflow.sflow_session_id = meta.sflow_metadata.sflow_session_id; + } + @name(".egress_port_mapping") table egress_port_mapping { + actions = { + egress_port_type_normal(); + egress_port_type_fabric(); + egress_port_type_cpu(); + @defaultonly NoAction(); + } + key = { + standard_metadata.egress_port: exact @name("standard_metadata.egress_port"); + } + size = 288; + default_action = NoAction(); + } + @name(".mirror") table mirror { + actions = { + nop(); + set_mirror_nhop(); + set_mirror_bd(); + sflow_pkt_to_cpu(); + @defaultonly NoAction(); + } + key = { + meta.i2e_metadata.mirror_session_id: exact @name("i2e_metadata.mirror_session_id"); + } + size = 1024; + default_action = NoAction(); + } + @name(".process_replication") process_replication() process_replication_0; + @name(".process_vlan_decap") process_vlan_decap() process_vlan_decap_0; + @name(".process_tunnel_decap") process_tunnel_decap() process_tunnel_decap_0; + @name(".process_rewrite") process_rewrite() process_rewrite_0; + @name(".process_egress_bd") process_egress_bd() process_egress_bd_0; + @name(".process_mac_rewrite") process_mac_rewrite() process_mac_rewrite_0; + @name(".process_mtu") process_mtu() process_mtu_0; + @name(".process_int_insertion") process_int_insertion() process_int_insertion_0; + @name(".process_egress_bd_stats") process_egress_bd_stats() process_egress_bd_stats_0; + @name(".process_tunnel_encap") process_tunnel_encap() process_tunnel_encap_0; + @name(".process_int_outer_encap") process_int_outer_encap() process_int_outer_encap_0; + @name(".process_vlan_xlate") process_vlan_xlate() process_vlan_xlate_0; + @name(".process_egress_filter") process_egress_filter() process_egress_filter_0; + @name(".process_egress_acl") process_egress_acl() process_egress_acl_0; + apply { + if (meta.egress_metadata.bypass == 1w0) { + if (standard_metadata.instance_type != 32w0 && standard_metadata.instance_type != 32w5) { + mirror.apply(); + } else { + process_replication_0.apply(hdr, meta, standard_metadata); + } + switch (egress_port_mapping.apply().action_run) { + egress_port_type_normal: { + if (standard_metadata.instance_type == 32w0 || standard_metadata.instance_type == 32w5) { + process_vlan_decap_0.apply(hdr, meta, standard_metadata); + } + process_tunnel_decap_0.apply(hdr, meta, standard_metadata); + process_rewrite_0.apply(hdr, meta, standard_metadata); + process_egress_bd_0.apply(hdr, meta, standard_metadata); + process_mac_rewrite_0.apply(hdr, meta, standard_metadata); + process_mtu_0.apply(hdr, meta, standard_metadata); + process_int_insertion_0.apply(hdr, meta, standard_metadata); + process_egress_bd_stats_0.apply(hdr, meta, standard_metadata); + } + default: { + } + } + process_tunnel_encap_0.apply(hdr, meta, standard_metadata); + process_int_outer_encap_0.apply(hdr, meta, standard_metadata); + if (meta.egress_metadata.port_type == 2w0) { + process_vlan_xlate_0.apply(hdr, meta, standard_metadata); + } + process_egress_filter_0.apply(hdr, meta, standard_metadata); + } + process_egress_acl_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ingress_port_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_port_mapping.set_ifindex") action set_ifindex(bit<16> ifindex, bit<2> port_type) { + meta.ingress_metadata.ifindex = ifindex; + meta.ingress_metadata.port_type = port_type; + } + @name(".process_ingress_port_mapping.set_ingress_port_properties") action set_ingress_port_properties(bit<16> if_label) { + meta.acl_metadata.if_label = if_label; + } + @name(".ingress_port_mapping") table ingress_port_mapping { + actions = { + set_ifindex(); + @defaultonly NoAction(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction(); + } + @name(".ingress_port_properties") table ingress_port_properties { + actions = { + set_ingress_port_properties(); + @defaultonly NoAction(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction(); + } + apply { + ingress_port_mapping.apply(); + ingress_port_properties.apply(); + } +} + +control validate_outer_ipv4_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv4_header.set_valid_outer_ipv4_packet") action set_valid_outer_ipv4_packet() { + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_tc = hdr.ipv4.diffserv; + meta.l3_metadata.lkp_ip_version = hdr.ipv4.version; + } + @name(".validate_outer_ipv4_header.set_malformed_outer_ipv4_packet") action set_malformed_outer_ipv4_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv4_packet") table validate_outer_ipv4_packet { + actions = { + set_valid_outer_ipv4_packet(); + set_malformed_outer_ipv4_packet(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.version : ternary @name("ipv4.version"); + hdr.ipv4.ttl : ternary @name("ipv4.ttl"); + hdr.ipv4.srcAddr[31:24]: ternary @name("ipv4.srcAddr"); + } + size = 512; + default_action = NoAction(); + } + apply { + validate_outer_ipv4_packet.apply(); + } +} + +control validate_outer_ipv6_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv6_header.set_valid_outer_ipv6_packet") action set_valid_outer_ipv6_packet() { + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l3_metadata.lkp_ip_tc = hdr.ipv6.trafficClass; + meta.l3_metadata.lkp_ip_version = hdr.ipv6.version; + } + @name(".validate_outer_ipv6_header.set_malformed_outer_ipv6_packet") action set_malformed_outer_ipv6_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv6_packet") table validate_outer_ipv6_packet { + actions = { + set_valid_outer_ipv6_packet(); + set_malformed_outer_ipv6_packet(); + @defaultonly NoAction(); + } + key = { + hdr.ipv6.version : ternary @name("ipv6.version"); + hdr.ipv6.hopLimit : ternary @name("ipv6.hopLimit"); + hdr.ipv6.srcAddr[127:112]: ternary @name("ipv6.srcAddr"); + } + size = 512; + default_action = NoAction(); + } + apply { + validate_outer_ipv6_packet.apply(); + } +} + +control validate_mpls_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_mpls_header.set_valid_mpls_label1") action set_valid_mpls_label1() { + meta.tunnel_metadata.mpls_label = hdr.mpls[0].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[0].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label2") action set_valid_mpls_label2() { + meta.tunnel_metadata.mpls_label = hdr.mpls[1].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[1].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label3") action set_valid_mpls_label3() { + meta.tunnel_metadata.mpls_label = hdr.mpls[2].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[2].exp; + } + @name(".validate_mpls_packet") table validate_mpls_packet { + actions = { + set_valid_mpls_label1(); + set_valid_mpls_label2(); + set_valid_mpls_label3(); + @defaultonly NoAction(); + } + key = { + hdr.mpls[0].label : ternary @name("mpls[0].label"); + hdr.mpls[0].bos : ternary @name("mpls[0].bos"); + hdr.mpls[0].isValid(): exact @name("mpls[0].$valid$"); + hdr.mpls[1].label : ternary @name("mpls[1].label"); + hdr.mpls[1].bos : ternary @name("mpls[1].bos"); + hdr.mpls[1].isValid(): exact @name("mpls[1].$valid$"); + hdr.mpls[2].label : ternary @name("mpls[2].label"); + hdr.mpls[2].bos : ternary @name("mpls[2].bos"); + hdr.mpls[2].isValid(): exact @name("mpls[2].$valid$"); + } + size = 512; + default_action = NoAction(); + } + apply { + validate_mpls_packet.apply(); + } +} + +control process_validate_outer_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_outer_header.malformed_outer_ethernet_packet") action malformed_outer_ethernet_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_untagged") action set_valid_outer_unicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged") action set_valid_outer_unicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged") action set_valid_outer_unicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged") action set_valid_outer_unicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_untagged") action set_valid_outer_multicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged") action set_valid_outer_multicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged") action set_valid_outer_multicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged") action set_valid_outer_multicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_untagged") action set_valid_outer_broadcast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged") action set_valid_outer_broadcast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged") action set_valid_outer_broadcast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged") action set_valid_outer_broadcast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".validate_outer_ethernet") table validate_outer_ethernet { + actions = { + malformed_outer_ethernet_packet(); + set_valid_outer_unicast_packet_untagged(); + set_valid_outer_unicast_packet_single_tagged(); + set_valid_outer_unicast_packet_double_tagged(); + set_valid_outer_unicast_packet_qinq_tagged(); + set_valid_outer_multicast_packet_untagged(); + set_valid_outer_multicast_packet_single_tagged(); + set_valid_outer_multicast_packet_double_tagged(); + set_valid_outer_multicast_packet_qinq_tagged(); + set_valid_outer_broadcast_packet_untagged(); + set_valid_outer_broadcast_packet_single_tagged(); + set_valid_outer_broadcast_packet_double_tagged(); + set_valid_outer_broadcast_packet_qinq_tagged(); + @defaultonly NoAction(); + } + key = { + hdr.ethernet.srcAddr : ternary @name("ethernet.srcAddr"); + hdr.ethernet.dstAddr : ternary @name("ethernet.dstAddr"); + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 512; + default_action = NoAction(); + } + @name(".validate_outer_ipv4_header") validate_outer_ipv4_header() validate_outer_ipv4_header_0; + @name(".validate_outer_ipv6_header") validate_outer_ipv6_header() validate_outer_ipv6_header_0; + @name(".validate_mpls_header") validate_mpls_header() validate_mpls_header_0; + apply { + switch (validate_outer_ethernet.apply().action_run) { + malformed_outer_ethernet_packet: { + } + default: { + if (hdr.ipv4.isValid()) { + validate_outer_ipv4_header_0.apply(hdr, meta, standard_metadata); + } else if (hdr.ipv6.isValid()) { + validate_outer_ipv6_header_0.apply(hdr, meta, standard_metadata); + } else if (hdr.mpls[0].isValid()) { + validate_mpls_header_0.apply(hdr, meta, standard_metadata); + } + } + } + } +} + +control process_global_params(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_global_params.deflect_on_drop") action deflect_on_drop(bit<8> enable_dod) { + } + @name(".process_global_params.set_config_parameters") action set_config_parameters(bit<8> enable_dod) { + deflect_on_drop(enable_dod); + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + meta.ingress_metadata.ingress_port = standard_metadata.ingress_port; + meta.l2_metadata.same_if_check = meta.ingress_metadata.ifindex; + standard_metadata.egress_spec = 9w511; + random>(meta.ingress_metadata.sflow_take_sample, 32w0, 32w0x7fffffff); + } + @name(".switch_config_params") table switch_config_params { + actions = { + set_config_parameters(); + @defaultonly NoAction(); + } + size = 1; + default_action = NoAction(); + } + apply { + switch_config_params.apply(); + } +} + +control process_port_vlan_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_port_vlan_mapping.set_bd_properties") action set_bd_properties(bit<16> bd, bit<16> vrf, bit<10> stp_group, bit<1> learning_enabled, bit<16> bd_label, bit<16> stats_idx, bit<10> rmac_group, bit<1> ipv4_unicast_enabled, bit<1> ipv6_unicast_enabled, bit<2> ipv4_urpf_mode, bit<2> ipv6_urpf_mode, bit<1> igmp_snooping_enabled, bit<1> mld_snooping_enabled, bit<1> ipv4_multicast_enabled, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group, bit<16> ipv4_mcast_key, bit<1> ipv4_mcast_key_type, bit<16> ipv6_mcast_key, bit<1> ipv6_mcast_key_type) { + meta.ingress_metadata.bd = bd; + meta.ingress_metadata.outer_bd = bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.stp_group = stp_group; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l2_metadata.learning_enabled = learning_enabled; + meta.l3_metadata.vrf = vrf; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_mcast_key_type = ipv4_mcast_key_type; + meta.multicast_metadata.ipv4_mcast_key = ipv4_mcast_key; + meta.multicast_metadata.ipv6_mcast_key_type = ipv6_mcast_key_type; + meta.multicast_metadata.ipv6_mcast_key = ipv6_mcast_key; + } + @name(".process_port_vlan_mapping.port_vlan_mapping_miss") action port_vlan_mapping_miss() { + meta.l2_metadata.port_vlan_mapping_miss = 1w1; + } + @name(".port_vlan_mapping") table port_vlan_mapping { + actions = { + set_bd_properties(); + port_vlan_mapping_miss(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.ifindex: exact @name("ingress_metadata.ifindex"); + hdr.vlan_tag_[0].isValid() : exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[0].vid : exact @name("vlan_tag_[0].vid"); + hdr.vlan_tag_[1].isValid() : exact @name("vlan_tag_[1].$valid$"); + hdr.vlan_tag_[1].vid : exact @name("vlan_tag_[1].vid"); + } + size = 4096; + implementation = bd_action_profile; + default_action = NoAction(); + } + apply { + port_vlan_mapping.apply(); + } +} + +control process_spanning_tree(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_spanning_tree.set_stp_state") action set_stp_state(bit<3> stp_state) { + meta.l2_metadata.stp_state = stp_state; + } + @name(".spanning_tree") table spanning_tree { + actions = { + set_stp_state(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.ifindex: exact @name("ingress_metadata.ifindex"); + meta.l2_metadata.stp_group : exact @name("l2_metadata.stp_group"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.l2_metadata.stp_group != 10w0) { + spanning_tree.apply(); + } + } +} + +control process_ip_sourceguard(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_sourceguard.on_miss") action on_miss() { + } + @name(".process_ip_sourceguard.ipsg_miss") action ipsg_miss() { + meta.security_metadata.ipsg_check_fail = 1w1; + } + @name(".ipsg") table ipsg { + actions = { + on_miss(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.ifindex : exact @name("ingress_metadata.ifindex"); + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_sa : exact @name("l2_metadata.lkp_mac_sa"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipsg_permit_special") table ipsg_permit_special { + actions = { + ipsg_miss(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.security_metadata.ipsg_enabled == 1w1) { + switch (ipsg.apply().action_run) { + on_miss: { + ipsg_permit_special.apply(); + } + default: { + } + } + } + } +} + +control process_int_endpoint(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_endpoint.int_sink_update_vxlan_gpe_v4") action int_sink_update_vxlan_gpe_v4() { + hdr.vxlan_gpe.next_proto = hdr.vxlan_gpe_int_header.next_proto; + hdr.vxlan_gpe_int_header.setInvalid(); + hdr.ipv4.totalLen = hdr.ipv4.totalLen - meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ - meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_endpoint.nop") action nop() { + } + @name(".process_int_endpoint.int_set_src") action int_set_src() { + meta.int_metadata_i2e.source = 1w1; + } + @name(".process_int_endpoint.int_set_no_src") action int_set_no_src() { + meta.int_metadata_i2e.source = 1w0; + } + @name(".process_int_endpoint.int_sink") action int_sink(bit<32> mirror_id) { + meta.int_metadata_i2e.sink = 1w1; + meta.i2e_metadata.mirror_session_id = (bit<16>)mirror_id; + clone_preserving_field_list(CloneType.I2E, mirror_id, 8w4); + hdr.int_header.setInvalid(); + hdr.int_val[0].setInvalid(); + hdr.int_val[1].setInvalid(); + hdr.int_val[2].setInvalid(); + hdr.int_val[3].setInvalid(); + hdr.int_val[4].setInvalid(); + hdr.int_val[5].setInvalid(); + hdr.int_val[6].setInvalid(); + hdr.int_val[7].setInvalid(); + hdr.int_val[8].setInvalid(); + hdr.int_val[9].setInvalid(); + hdr.int_val[10].setInvalid(); + hdr.int_val[11].setInvalid(); + hdr.int_val[12].setInvalid(); + hdr.int_val[13].setInvalid(); + hdr.int_val[14].setInvalid(); + hdr.int_val[15].setInvalid(); + hdr.int_val[16].setInvalid(); + hdr.int_val[17].setInvalid(); + hdr.int_val[18].setInvalid(); + hdr.int_val[19].setInvalid(); + hdr.int_val[20].setInvalid(); + hdr.int_val[21].setInvalid(); + hdr.int_val[22].setInvalid(); + hdr.int_val[23].setInvalid(); + } + @name(".process_int_endpoint.int_sink_gpe") action int_sink_gpe(bit<32> mirror_id) { + meta.int_metadata.insert_byte_cnt = meta.int_metadata.gpe_int_hdr_len << 2; + int_sink(mirror_id); + } + @name(".process_int_endpoint.int_no_sink") action int_no_sink() { + meta.int_metadata_i2e.sink = 1w0; + } + @name(".int_sink_update_outer") table int_sink_update_outer { + actions = { + int_sink_update_vxlan_gpe_v4(); + nop(); + @defaultonly NoAction(); + } + key = { + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.int_metadata_i2e.sink : exact @name("int_metadata_i2e.sink"); + } + size = 2; + default_action = NoAction(); + } + @name(".int_source") table int_source { + actions = { + int_set_src(); + int_set_no_src(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + hdr.inner_ipv4.srcAddr : ternary @name("inner_ipv4.srcAddr"); + } + size = 256; + default_action = NoAction(); + } + @name(".int_terminate") table int_terminate { + actions = { + int_sink_gpe(); + int_no_sink(); + @defaultonly NoAction(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.ipv4_metadata.lkp_ipv4_da : ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + } + size = 256; + default_action = NoAction(); + } + apply { + if (hdr.int_header.isValid()) { + int_terminate.apply(); + int_sink_update_outer.apply(); + } else { + int_source.apply(); + } + } +} + +control process_ingress_fabric(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_fabric.nop") action nop() { + } + @name(".process_ingress_fabric.terminate_cpu_packet") action terminate_cpu_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.egress_metadata.bypass = hdr.fabric_header_cpu.txBypass; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_cpu.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_unicast_packet") action switch_fabric_unicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + meta.fabric_metadata.dst_device = hdr.fabric_header.dstDevice; + meta.fabric_metadata.dst_port = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_unicast_packet") action terminate_fabric_unicast_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.tunnel_metadata.tunnel_terminate = hdr.fabric_header_unicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = hdr.fabric_header_unicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = hdr.fabric_header_unicast.nexthopIndex; + meta.l3_metadata.routed = hdr.fabric_header_unicast.routed; + meta.l3_metadata.outer_routed = hdr.fabric_header_unicast.outerRouted; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_unicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_multicast_packet") action switch_fabric_multicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + standard_metadata.mcast_grp = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_multicast_packet") action terminate_fabric_multicast_packet() { + meta.tunnel_metadata.tunnel_terminate = hdr.fabric_header_multicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = hdr.fabric_header_multicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = 16w0; + meta.l3_metadata.routed = hdr.fabric_header_multicast.routed; + meta.l3_metadata.outer_routed = hdr.fabric_header_multicast.outerRouted; + standard_metadata.mcast_grp = hdr.fabric_header_multicast.mcastGrp; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_multicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.set_ingress_ifindex_properties") action set_ingress_ifindex_properties() { + } + @name(".process_ingress_fabric.non_ip_over_fabric") action non_ip_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_ingress_fabric.ipv4_over_fabric") action ipv4_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv4.protocol; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".process_ingress_fabric.ipv6_over_fabric") action ipv6_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".fabric_ingress_dst_lkp") table fabric_ingress_dst_lkp { + actions = { + nop(); + terminate_cpu_packet(); + switch_fabric_unicast_packet(); + terminate_fabric_unicast_packet(); + switch_fabric_multicast_packet(); + terminate_fabric_multicast_packet(); + @defaultonly NoAction(); + } + key = { + hdr.fabric_header.dstDevice: exact @name("fabric_header.dstDevice"); + } + default_action = NoAction(); + } + @name(".fabric_ingress_src_lkp") table fabric_ingress_src_lkp { + actions = { + nop(); + set_ingress_ifindex_properties(); + @defaultonly NoAction(); + } + key = { + hdr.fabric_header_multicast.ingressIfindex: exact @name("fabric_header_multicast.ingressIfindex"); + } + size = 1024; + default_action = NoAction(); + } + @name(".native_packet_over_fabric") table native_packet_over_fabric { + actions = { + non_ip_over_fabric(); + ipv4_over_fabric(); + ipv6_over_fabric(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.port_type != 2w0) { + fabric_ingress_dst_lkp.apply(); + if (meta.ingress_metadata.port_type == 2w1) { + if (hdr.fabric_header_multicast.isValid()) { + fabric_ingress_src_lkp.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w0) { + native_packet_over_fabric.apply(); + } + } + } + } +} + +control process_outer_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast.nop") action nop() { + } + @name(".process_outer_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv4_multicast") table outer_ipv4_multicast { + actions = { + nop(); + on_miss(); + outer_multicast_route_s_g_hit(); + outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta.multicast_metadata.ipv4_mcast_key : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + } + size = 1024; + default_action = NoAction(); + } + @name(".outer_ipv4_multicast_star_g") table outer_ipv4_multicast_star_g { + actions = { + nop(); + outer_multicast_route_sm_star_g_hit(); + outer_multicast_route_bidir_star_g_hit(); + outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta.multicast_metadata.ipv4_mcast_key : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.dstAddr : ternary @name("ipv4.dstAddr"); + } + size = 512; + default_action = NoAction(); + } + apply { + switch (outer_ipv4_multicast.apply().action_run) { + on_miss: { + outer_ipv4_multicast_star_g.apply(); + } + default: { + } + } + } +} + +control process_outer_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv6_multicast.nop") action nop() { + } + @name(".process_outer_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv6_multicast") table outer_ipv6_multicast { + actions = { + nop(); + on_miss(); + outer_multicast_route_s_g_hit(); + outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta.multicast_metadata.ipv6_mcast_key : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + } + size = 1024; + default_action = NoAction(); + } + @name(".outer_ipv6_multicast_star_g") table outer_ipv6_multicast_star_g { + actions = { + nop(); + outer_multicast_route_sm_star_g_hit(); + outer_multicast_route_bidir_star_g_hit(); + outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta.multicast_metadata.ipv6_mcast_key : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.dstAddr : ternary @name("ipv6.dstAddr"); + } + size = 512; + default_action = NoAction(); + } + apply { + switch (outer_ipv6_multicast.apply().action_run) { + on_miss: { + outer_ipv6_multicast_star_g.apply(); + } + default: { + } + } + } +} + +control process_outer_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_outer_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast") process_outer_ipv4_multicast() process_outer_ipv4_multicast_0; + @name(".process_outer_ipv6_multicast") process_outer_ipv6_multicast() process_outer_ipv6_multicast_0; + @name(".process_outer_multicast_rpf") process_outer_multicast_rpf() process_outer_multicast_rpf_0; + apply { + if (hdr.ipv4.isValid()) { + process_outer_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else if (hdr.ipv6.isValid()) { + process_outer_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + process_outer_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_vtep.nop") action nop() { + } + @name(".process_ipv4_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.on_miss") action on_miss() { + } + @name(".process_ipv4_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv4_dest_vtep") table ipv4_dest_vtep { + actions = { + nop(); + set_tunnel_termination_flag(); + set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv4_src_vtep") table ipv4_src_vtep { + actions = { + on_miss(); + src_vtep_hit(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction(); + } + apply { + switch (ipv4_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv4_dest_vtep.apply(); + } + default: { + } + } + } +} + +control process_ipv6_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_vtep.nop") action nop() { + } + @name(".process_ipv6_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.on_miss") action on_miss() { + } + @name(".process_ipv6_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv6_dest_vtep") table ipv6_dest_vtep { + actions = { + nop(); + set_tunnel_termination_flag(); + set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv6_src_vtep") table ipv6_src_vtep { + actions = { + on_miss(); + src_vtep_hit(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction(); + } + apply { + switch (ipv6_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv6_dest_vtep.apply(); + } + default: { + } + } + } +} + +control process_mpls(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mpls.terminate_eompls") action terminate_eompls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_vpls") action terminate_vpls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_ipv4_over_mpls") action terminate_ipv4_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + } + @name(".process_mpls.terminate_ipv6_over_mpls") action terminate_ipv6_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + } + @name(".process_mpls.terminate_pw") action terminate_pw(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + } + @name(".process_mpls.forward_mpls") action forward_mpls(bit<16> nexthop_index) { + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + meta.l3_metadata.fib_hit = 1w1; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + } + @name(".mpls") table mpls_0 { + actions = { + terminate_eompls(); + terminate_vpls(); + terminate_ipv4_over_mpls(); + terminate_ipv6_over_mpls(); + terminate_pw(); + forward_mpls(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.mpls_label: exact @name("tunnel_metadata.mpls_label"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + apply { + mpls_0.apply(); + } +} + +control process_tunnel(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel.on_miss") action on_miss() { + } + @name(".process_tunnel.outer_rmac_hit") action outer_rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".process_tunnel.nop") action nop() { + } + @name(".process_tunnel.tunnel_lookup_miss") action tunnel_lookup_miss() { + } + @name(".process_tunnel.terminate_tunnel_inner_non_ip") action terminate_tunnel_inner_non_ip(bit<16> bd, bit<16> bd_label, bit<16> stats_idx) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w0; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv4") action terminate_tunnel_inner_ethernet_ipv4(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv4_unicast_enabled, bit<2> ipv4_urpf_mode, bit<1> igmp_snooping_enabled, bit<16> stats_idx, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv4") action terminate_tunnel_inner_ipv4(bit<16> vrf, bit<10> rmac_group, bit<2> ipv4_urpf_mode, bit<1> ipv4_unicast_enabled, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv6") action terminate_tunnel_inner_ethernet_ipv6(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> mld_snooping_enabled, bit<16> stats_idx, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv6") action terminate_tunnel_inner_ipv6(bit<16> vrf, bit<10> rmac_group, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action non_ip_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action ipv4_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv4.ttl; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action ipv6_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv6.hopLimit; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".outer_rmac") table outer_rmac { + actions = { + on_miss(); + outer_rmac_hit(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.rmac_group: exact @name("l3_metadata.rmac_group"); + hdr.ethernet.dstAddr : exact @name("ethernet.dstAddr"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel") table tunnel { + actions = { + nop(); + tunnel_lookup_miss(); + terminate_tunnel_inner_non_ip(); + terminate_tunnel_inner_ethernet_ipv4(); + terminate_tunnel_inner_ipv4(); + terminate_tunnel_inner_ethernet_ipv6(); + terminate_tunnel_inner_ipv6(); + @defaultonly NoAction(); + } + key = { + meta.tunnel_metadata.tunnel_vni : exact @name("tunnel_metadata.tunnel_vni"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction(); + } + @name(".tunnel_lookup_miss") table tunnel_lookup_miss_0 { + actions = { + non_ip_tunnel_lookup_miss(); + ipv4_tunnel_lookup_miss(); + ipv6_tunnel_lookup_miss(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction(); + } + @name(".tunnel_miss") table tunnel_miss { + actions = { + non_ip_tunnel_lookup_miss(); + ipv4_tunnel_lookup_miss(); + ipv6_tunnel_lookup_miss(); + @defaultonly NoAction(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction(); + } + @name(".process_ingress_fabric") process_ingress_fabric() process_ingress_fabric_0; + @name(".process_outer_multicast") process_outer_multicast() process_outer_multicast_0; + @name(".process_ipv4_vtep") process_ipv4_vtep() process_ipv4_vtep_0; + @name(".process_ipv6_vtep") process_ipv6_vtep() process_ipv6_vtep_0; + @name(".process_mpls") process_mpls() process_mpls_0; + apply { + process_ingress_fabric_0.apply(hdr, meta, standard_metadata); + if (meta.tunnel_metadata.ingress_tunnel_type != 5w0) { + switch (outer_rmac.apply().action_run) { + on_miss: { + process_outer_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (hdr.ipv4.isValid()) { + process_ipv4_vtep_0.apply(hdr, meta, standard_metadata); + } else if (hdr.ipv6.isValid()) { + process_ipv6_vtep_0.apply(hdr, meta, standard_metadata); + } else if (hdr.mpls[0].isValid()) { + process_mpls_0.apply(hdr, meta, standard_metadata); + } + } + } + } + if (meta.tunnel_metadata.tunnel_terminate == 1w1 || meta.multicast_metadata.outer_mcast_route_hit == 1w1 && (meta.multicast_metadata.outer_mcast_mode == 2w1 && meta.multicast_metadata.mcast_rpf_group == 16w0 || meta.multicast_metadata.outer_mcast_mode == 2w2 && meta.multicast_metadata.mcast_rpf_group != 16w0)) { + switch (tunnel.apply().action_run) { + tunnel_lookup_miss: { + tunnel_lookup_miss_0.apply(); + } + default: { + } + } + } else { + tunnel_miss.apply(); + } + } +} + +control process_ingress_sflow(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".sflow_ingress_session_pkt_counter") direct_counter(CounterType.packets) sflow_ingress_session_pkt_counter; + @name(".process_ingress_sflow.nop") action nop() { + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu") action sflow_ing_pkt_to_cpu(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, sflow_i2e_mirror_id, 8w6); + } + @name(".process_ingress_sflow.sflow_ing_session_enable") action sflow_ing_session_enable(bit<32> rate_thr, bit<16> session_id) { + meta.ingress_metadata.sflow_take_sample = rate_thr |+| meta.ingress_metadata.sflow_take_sample; + meta.sflow_metadata.sflow_session_id = session_id; + } + @name(".process_ingress_sflow.nop_1") action nop_1() { + sflow_ingress_session_pkt_counter.count(); + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu_0") action sflow_ing_pkt_to_cpu_0(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + sflow_ingress_session_pkt_counter.count(); + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, sflow_i2e_mirror_id, 8w6); + } + @name(".sflow_ing_take_sample") table sflow_ing_take_sample { + actions = { + nop_1(); + sflow_ing_pkt_to_cpu_0(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.sflow_take_sample: ternary @name("ingress_metadata.sflow_take_sample"); + meta.sflow_metadata.sflow_session_id : exact @name("sflow_metadata.sflow_session_id"); + } + counters = sflow_ingress_session_pkt_counter; + default_action = NoAction(); + } + @name(".sflow_ingress") table sflow_ingress { + actions = { + nop(); + sflow_ing_session_enable(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.ifindex : ternary @name("ingress_metadata.ifindex"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.sflow.isValid() : exact @name("sflow.$valid$"); + } + size = 512; + default_action = NoAction(); + } + apply { + sflow_ingress.apply(); + sflow_ing_take_sample.apply(); + } +} + +@name(".storm_control_meter") meter>(32w1024, MeterType.bytes) storm_control_meter; +control process_storm_control(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_storm_control.nop") action nop() { + } + @name(".process_storm_control.set_storm_control_meter") action set_storm_control_meter(bit<16> meter_idx) { + storm_control_meter.execute_meter>((bit<10>)meter_idx, meta.meter_metadata.meter_color); + meta.meter_metadata.meter_index = meter_idx; + } + @name(".storm_control") table storm_control { + actions = { + nop(); + set_storm_control_meter(); + @defaultonly NoAction(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + meta.l2_metadata.lkp_pkt_type : ternary @name("l2_metadata.lkp_pkt_type"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + storm_control.apply(); + } + } +} + +control process_validate_packet(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_packet.nop") action nop() { + } + @name(".process_validate_packet.set_unicast") action set_unicast() { + meta.l2_metadata.lkp_pkt_type = 3w1; + } + @name(".process_validate_packet.set_unicast_and_ipv6_src_is_link_local") action set_unicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + } + @name(".process_validate_packet.set_multicast") action set_multicast() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_multicast_and_ipv6_src_is_link_local") action set_multicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_broadcast") action set_broadcast() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w2; + } + @name(".process_validate_packet.set_malformed_packet") action set_malformed_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_packet") table validate_packet { + actions = { + nop(); + set_unicast(); + set_unicast_and_ipv6_src_is_link_local(); + set_multicast(); + set_multicast_and_ipv6_src_is_link_local(); + set_broadcast(); + set_malformed_packet(); + @defaultonly NoAction(); + } + key = { + meta.l2_metadata.lkp_mac_sa[40:40] : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l3_metadata.lkp_ip_type : ternary @name("l3_metadata.lkp_ip_type"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + meta.l3_metadata.lkp_ip_version : ternary @name("l3_metadata.lkp_ip_version"); + meta.ipv4_metadata.lkp_ipv4_sa[31:24] : ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv6_metadata.lkp_ipv6_sa[127:112]: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.drop_flag == 1w0) { + validate_packet.apply(); + } + } +} + +control process_mac(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac.nop") action nop() { + } + @name(".process_mac.dmac_hit") action dmac_hit(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex; + } + @name(".process_mac.dmac_multicast_hit") action dmac_multicast_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_miss") action dmac_miss() { + meta.ingress_metadata.egress_ifindex = 16w65535; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_redirect_nexthop") action dmac_redirect_nexthop(bit<16> nexthop_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = nexthop_index; + meta.l2_metadata.l2_nexthop_type = 1w0; + } + @name(".process_mac.dmac_redirect_ecmp") action dmac_redirect_ecmp(bit<16> ecmp_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = ecmp_index; + meta.l2_metadata.l2_nexthop_type = 1w1; + } + @name(".process_mac.dmac_drop") action dmac_drop() { + mark_to_drop(standard_metadata); + } + @name(".process_mac.smac_miss") action smac_miss() { + meta.l2_metadata.l2_src_miss = 1w1; + } + @name(".process_mac.smac_hit") action smac_hit(bit<16> ifindex) { + meta.l2_metadata.l2_src_move = meta.ingress_metadata.ifindex ^ ifindex; + } + @name(".dmac") table dmac { + support_timeout = true; + actions = { + nop(); + dmac_hit(); + dmac_multicast_hit(); + dmac_miss(); + dmac_redirect_nexthop(); + dmac_redirect_ecmp(); + dmac_drop(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_da: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".smac") table smac { + actions = { + nop(); + smac_miss(); + smac_hit(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_sa: exact @name("l2_metadata.lkp_mac_sa"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + smac.apply(); + } + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + dmac.apply(); + } + } +} + +control process_mac_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_acl.nop") action nop() { + } + @name(".process_mac_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id, 8w1); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_mac_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".mac_acl") table mac_acl { + actions = { + nop(); + acl_deny(); + acl_permit(); + acl_mirror(); + acl_redirect_nexthop(); + acl_redirect_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.l2_metadata.lkp_mac_sa : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l2_metadata.lkp_mac_type: ternary @name("l2_metadata.lkp_mac_type"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + mac_acl.apply(); + } + } +} + +control process_ip_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_acl.nop") action nop() { + } + @name(".process_ip_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id, 8w1); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_ip_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ip_acl") table ip_acl { + actions = { + nop(); + acl_deny(); + acl_permit(); + acl_mirror(); + acl_redirect_nexthop(); + acl_redirect_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction(); + } + @name(".ipv6_acl") table ipv6_acl { + actions = { + nop(); + acl_deny(); + acl_permit(); + acl_mirror(); + acl_redirect_nexthop(); + acl_redirect_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv6_metadata.lkp_ipv6_sa: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + ip_acl.apply(); + } else if (meta.l3_metadata.lkp_ip_type == 2w2) { + ipv6_acl.apply(); + } + } + } +} + +control process_qos(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_qos.nop") action nop() { + } + @name(".process_qos.apply_cos_marking") action apply_cos_marking(bit<3> cos) { + meta.qos_metadata.marked_cos = cos; + } + @name(".process_qos.apply_dscp_marking") action apply_dscp_marking(bit<8> dscp) { + meta.qos_metadata.marked_dscp = dscp; + } + @name(".process_qos.apply_tc_marking") action apply_tc_marking(bit<3> tc) { + meta.qos_metadata.marked_exp = tc; + } + @name(".qos") table qos { + actions = { + nop(); + apply_cos_marking(); + apply_dscp_marking(); + apply_tc_marking(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_ip_tc : ternary @name("l3_metadata.lkp_ip_tc"); + meta.tunnel_metadata.mpls_exp : ternary @name("tunnel_metadata.mpls_exp"); + meta.qos_metadata.outer_dscp : ternary @name("qos_metadata.outer_dscp"); + } + size = 512; + default_action = NoAction(); + } + apply { + qos.apply(); + } +} + +control process_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv4_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_s_g_stats; + @name(".ipv4_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_star_g_stats; + @name(".process_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_ipv4_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.nop") action nop() { + } + @name(".process_ipv4_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_bridge") table ipv4_multicast_bridge { + actions = { + on_miss(); + multicast_bridge_s_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv4_multicast_bridge_star_g") table ipv4_multicast_bridge_star_g { + actions = { + nop(); + multicast_bridge_star_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".process_ipv4_multicast.on_miss_0") action on_miss_0() { + ipv4_multicast_route_s_g_stats.count(); + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit_0") action multicast_route_s_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route") table ipv4_multicast_route { + actions = { + on_miss_0(); + multicast_route_s_g_hit_0(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = ipv4_multicast_route_s_g_stats; + default_action = NoAction(); + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss_0") action multicast_route_star_g_miss_0() { + ipv4_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit_0") action multicast_route_sm_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit_0") action multicast_route_bidir_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route_star_g") table ipv4_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_0(); + multicast_route_sm_star_g_hit_0(); + multicast_route_bidir_star_g_hit_0(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = ipv4_multicast_route_star_g_stats; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv4_multicast_bridge.apply().action_run) { + on_miss: { + ipv4_multicast_bridge_star_g.apply(); + } + default: { + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv4_multicast_enabled == 1w1) { + switch (ipv4_multicast_route.apply().action_run) { + on_miss_0: { + ipv4_multicast_route_star_g.apply(); + } + default: { + } + } + } + } +} + +control process_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv6_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_s_g_stats; + @name(".ipv6_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_star_g_stats; + @name(".process_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_ipv6_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.nop") action nop() { + } + @name(".process_ipv6_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_bridge") table ipv6_multicast_bridge { + actions = { + on_miss(); + multicast_bridge_s_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv6_multicast_bridge_star_g") table ipv6_multicast_bridge_star_g { + actions = { + nop(); + multicast_bridge_star_g_hit(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".process_ipv6_multicast.on_miss_1") action on_miss_1() { + ipv6_multicast_route_s_g_stats.count(); + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit_1") action multicast_route_s_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route") table ipv6_multicast_route { + actions = { + on_miss_1(); + multicast_route_s_g_hit_1(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = ipv6_multicast_route_s_g_stats; + default_action = NoAction(); + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss_1") action multicast_route_star_g_miss_1() { + ipv6_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit_1") action multicast_route_sm_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit_1") action multicast_route_bidir_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route_star_g") table ipv6_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_1(); + multicast_route_sm_star_g_hit_1(); + multicast_route_bidir_star_g_hit_1(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = ipv6_multicast_route_star_g_stats; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv6_multicast_bridge.apply().action_run) { + on_miss: { + ipv6_multicast_bridge_star_g.apply(); + } + default: { + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv6_multicast_enabled == 1w1) { + switch (ipv6_multicast_route.apply().action_run) { + on_miss_1: { + ipv6_multicast_route_star_g.apply(); + } + default: { + } + } + } + } +} + +control process_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_multicast") process_ipv4_multicast() process_ipv4_multicast_0; + @name(".process_ipv6_multicast") process_ipv6_multicast() process_ipv6_multicast_0; + @name(".process_multicast_rpf") process_multicast_rpf() process_multicast_rpf_0; + apply { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + process_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else if (meta.l3_metadata.lkp_ip_type == 2w2) { + process_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + process_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_racl.nop") action nop() { + } + @name(".process_ipv4_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv4_racl") table ipv4_racl { + actions = { + nop(); + racl_deny(); + racl_permit(); + racl_redirect_nexthop(); + racl_redirect_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction(); + } + apply { + ipv4_racl.apply(); + } +} + +control process_ipv4_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_urpf.on_miss") action on_miss() { + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action ipv4_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = meta.ipv4_metadata.ipv4_urpf_mode; + } + @name(".process_ipv4_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv4_urpf") table ipv4_urpf { + actions = { + on_miss(); + ipv4_urpf_hit(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv4_urpf_lpm") table ipv4_urpf_lpm { + actions = { + ipv4_urpf_hit(); + urpf_miss(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: lpm @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ipv4_metadata.ipv4_urpf_mode != 2w0) { + switch (ipv4_urpf.apply().action_run) { + on_miss: { + ipv4_urpf_lpm.apply(); + } + default: { + } + } + } + } +} + +control process_ipv4_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_fib.on_miss") action on_miss() { + } + @name(".process_ipv4_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv4_fib") table ipv4_fib { + actions = { + on_miss(); + fib_hit_nexthop(); + fib_hit_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv4_fib_lpm") table ipv4_fib_lpm { + actions = { + on_miss(); + fib_hit_nexthop(); + fib_hit_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: lpm @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction(); + } + apply { + switch (ipv4_fib.apply().action_run) { + on_miss: { + ipv4_fib_lpm.apply(); + } + default: { + } + } + } +} + +control process_ipv6_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_racl.nop") action nop() { + } + @name(".process_ipv6_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv6_racl") table ipv6_racl { + actions = { + nop(); + racl_deny(); + racl_permit(); + racl_redirect_nexthop(); + racl_redirect_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv6_metadata.lkp_ipv6_sa: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction(); + } + apply { + ipv6_racl.apply(); + } +} + +control process_ipv6_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_urpf.on_miss") action on_miss() { + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action ipv6_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = meta.ipv6_metadata.ipv6_urpf_mode; + } + @name(".process_ipv6_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv6_urpf") table ipv6_urpf { + actions = { + on_miss(); + ipv6_urpf_hit(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv6_urpf_lpm") table ipv6_urpf_lpm { + actions = { + ipv6_urpf_hit(); + urpf_miss(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: lpm @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ipv6_metadata.ipv6_urpf_mode != 2w0) { + switch (ipv6_urpf.apply().action_run) { + on_miss: { + ipv6_urpf_lpm.apply(); + } + default: { + } + } + } + } +} + +control process_ipv6_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_fib.on_miss") action on_miss() { + } + @name(".process_ipv6_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv6_fib") table ipv6_fib { + actions = { + on_miss(); + fib_hit_nexthop(); + fib_hit_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".ipv6_fib_lpm") table ipv6_fib_lpm { + actions = { + on_miss(); + fib_hit_nexthop(); + fib_hit_ecmp(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: lpm @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 512; + default_action = NoAction(); + } + apply { + switch (ipv6_fib.apply().action_run) { + on_miss: { + ipv6_fib_lpm.apply(); + } + default: { + } + } + } +} + +control process_urpf_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_urpf_bd.nop") action nop() { + } + @name(".process_urpf_bd.urpf_bd_miss") action urpf_bd_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".urpf_bd") table urpf_bd { + actions = { + nop(); + urpf_bd_miss(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.urpf_bd_group: exact @name("l3_metadata.urpf_bd_group"); + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.l3_metadata.urpf_mode == 2w2 && meta.l3_metadata.urpf_hit == 1w1) { + urpf_bd.apply(); + } + } +} + +control process_meter_index(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_index") direct_meter>(MeterType.bytes) meter_index; + @name(".process_meter_index.nop") action nop() { + } + @name(".process_meter_index.nop_2") action nop_2() { + meter_index.read(meta.meter_metadata.meter_color); + } + @name(".meter_index") table meter_index_0 { + actions = { + nop_2(); + @defaultonly NoAction(); + } + key = { + meta.meter_metadata.meter_index: exact @name("meter_metadata.meter_index"); + } + size = 1024; + meters = meter_index; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_index_0.apply(); + } + } +} + +control process_hashes(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_hashes.compute_lkp_ipv4_hash") action compute_lkp_ipv4_hash() { + hash, bit<16>, tuple, bit<32>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash1, HashAlgorithm.crc16, 16w0, { meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + hash, bit<16>, tuple, bit<48>, bit<32>, bit<32>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + } + @name(".process_hashes.compute_lkp_ipv6_hash") action compute_lkp_ipv6_hash() { + hash, bit<16>, tuple, bit<128>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash1, HashAlgorithm.crc16, 16w0, { meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + hash, bit<16>, tuple, bit<48>, bit<128>, bit<128>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + } + @name(".process_hashes.compute_lkp_non_ip_hash") action compute_lkp_non_ip_hash() { + hash, bit<16>, tuple, bit<48>, bit<48>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.ingress_metadata.ifindex, meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.l2_metadata.lkp_mac_type }, 32w65536); + } + @name(".process_hashes.computed_two_hashes") action computed_two_hashes() { + meta.hash_metadata.entropy_hash = meta.hash_metadata.hash2; + } + @name(".process_hashes.computed_one_hash") action computed_one_hash() { + meta.hash_metadata.hash1 = meta.hash_metadata.hash2; + meta.hash_metadata.entropy_hash = meta.hash_metadata.hash2; + } + @name(".compute_ipv4_hashes") table compute_ipv4_hashes { + actions = { + compute_lkp_ipv4_hash(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction(); + } + @name(".compute_ipv6_hashes") table compute_ipv6_hashes { + actions = { + compute_lkp_ipv6_hash(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction(); + } + @name(".compute_non_ip_hashes") table compute_non_ip_hashes { + actions = { + compute_lkp_non_ip_hash(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction(); + } + @name(".compute_other_hashes") table compute_other_hashes { + actions = { + computed_two_hashes(); + computed_one_hash(); + @defaultonly NoAction(); + } + key = { + meta.hash_metadata.hash1: exact @name("hash_metadata.hash1"); + } + default_action = NoAction(); + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv4.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv4.isValid()) { + compute_ipv4_hashes.apply(); + } else if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv6.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv6.isValid()) { + compute_ipv6_hashes.apply(); + } else { + compute_non_ip_hashes.apply(); + } + compute_other_hashes.apply(); + } +} + +control process_meter_action(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_stats") direct_counter(CounterType.packets) meter_stats; + @name(".process_meter_action.meter_permit") action meter_permit() { + } + @name(".process_meter_action.meter_deny") action meter_deny() { + mark_to_drop(standard_metadata); + } + @name(".process_meter_action.meter_permit_0") action meter_permit_0() { + meter_stats.count(); + } + @name(".process_meter_action.meter_deny_0") action meter_deny_0() { + meter_stats.count(); + mark_to_drop(standard_metadata); + } + @name(".meter_action") table meter_action { + actions = { + meter_permit_0(); + meter_deny_0(); + @defaultonly NoAction(); + } + key = { + meta.meter_metadata.meter_color: exact @name("meter_metadata.meter_color"); + meta.meter_metadata.meter_index: exact @name("meter_metadata.meter_index"); + } + size = 1024; + counters = meter_stats; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_action.apply(); + } + } +} + +@name(".ingress_bd_stats_count") @min_width(32) counter>(32w1024, CounterType.packets_and_bytes) ingress_bd_stats_count; +control process_ingress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_bd_stats.update_ingress_bd_stats") action update_ingress_bd_stats() { + ingress_bd_stats_count.count((bit<10>)meta.l2_metadata.bd_stats_idx); + } + @name(".ingress_bd_stats") table ingress_bd_stats { + actions = { + update_ingress_bd_stats(); + @defaultonly NoAction(); + } + size = 1024; + default_action = NoAction(); + } + apply { + ingress_bd_stats.apply(); + } +} + +@name(".acl_stats_count") @min_width(16) counter>(32w1024, CounterType.packets_and_bytes) acl_stats_count; +control process_ingress_acl_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_acl_stats.acl_stats_update") action acl_stats_update() { + acl_stats_count.count((bit<10>)meta.acl_metadata.acl_stats_index); + } + @name(".acl_stats") table acl_stats { + actions = { + acl_stats_update(); + @defaultonly NoAction(); + } + size = 1024; + default_action = NoAction(); + } + apply { + acl_stats.apply(); + } +} + +control process_storm_control_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".storm_control_stats") direct_counter(CounterType.packets) storm_control_stats; + @name(".process_storm_control_stats.nop") action nop() { + } + @name(".process_storm_control_stats.nop_3") action nop_3() { + storm_control_stats.count(); + } + @name(".storm_control_stats") table storm_control_stats_0 { + actions = { + nop_3(); + @defaultonly NoAction(); + } + key = { + meta.meter_metadata.meter_color: exact @name("meter_metadata.meter_color"); + standard_metadata.ingress_port : exact @name("standard_metadata.ingress_port"); + } + size = 1024; + counters = storm_control_stats; + default_action = NoAction(); + } + apply { + storm_control_stats_0.apply(); + } +} + +control process_fwd_results(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fwd_results.nop") action nop() { + } + @name(".process_fwd_results.set_l2_redirect_action") action set_l2_redirect_action() { + meta.l3_metadata.nexthop_index = meta.l2_metadata.l2_nexthop; + meta.nexthop_metadata.nexthop_type = meta.l2_metadata.l2_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_fib_redirect_action") action set_fib_redirect_action() { + meta.l3_metadata.nexthop_index = meta.l3_metadata.fib_nexthop; + meta.nexthop_metadata.nexthop_type = meta.l3_metadata.fib_nexthop_type; + meta.l3_metadata.routed = 1w1; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.reason_code = 16w0x217; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_cpu_redirect_action") action set_cpu_redirect_action() { + meta.l3_metadata.routed = 1w0; + standard_metadata.mcast_grp = 16w0; + standard_metadata.egress_spec = 9w64; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_acl_redirect_action") action set_acl_redirect_action() { + meta.l3_metadata.nexthop_index = meta.acl_metadata.acl_nexthop; + meta.nexthop_metadata.nexthop_type = meta.acl_metadata.acl_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_racl_redirect_action") action set_racl_redirect_action() { + meta.l3_metadata.nexthop_index = meta.acl_metadata.racl_nexthop; + meta.nexthop_metadata.nexthop_type = meta.acl_metadata.racl_nexthop_type; + meta.l3_metadata.routed = 1w1; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_multicast_route_action") action set_multicast_route_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = meta.multicast_metadata.multicast_route_mc_index; + meta.l3_metadata.routed = 1w1; + meta.l3_metadata.same_bd_check = 16w0xffff; + } + @name(".process_fwd_results.set_multicast_bridge_action") action set_multicast_bridge_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = meta.multicast_metadata.multicast_bridge_mc_index; + } + @name(".process_fwd_results.set_multicast_flood") action set_multicast_flood() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w65535; + } + @name(".process_fwd_results.set_multicast_drop") action set_multicast_drop() { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = 8w44; + } + @name(".fwd_result") table fwd_result { + actions = { + nop(); + set_l2_redirect_action(); + set_fib_redirect_action(); + set_cpu_redirect_action(); + set_acl_redirect_action(); + set_racl_redirect_action(); + set_multicast_route_action(); + set_multicast_bridge_action(); + set_multicast_flood(); + set_multicast_drop(); + @defaultonly NoAction(); + } + key = { + meta.l2_metadata.l2_redirect : ternary @name("l2_metadata.l2_redirect"); + meta.acl_metadata.acl_redirect : ternary @name("acl_metadata.acl_redirect"); + meta.acl_metadata.racl_redirect : ternary @name("acl_metadata.racl_redirect"); + meta.l3_metadata.rmac_hit : ternary @name("l3_metadata.rmac_hit"); + meta.l3_metadata.fib_hit : ternary @name("l3_metadata.fib_hit"); + meta.l2_metadata.lkp_pkt_type : ternary @name("l2_metadata.lkp_pkt_type"); + meta.l3_metadata.lkp_ip_type : ternary @name("l3_metadata.lkp_ip_type"); + meta.multicast_metadata.igmp_snooping_enabled: ternary @name("multicast_metadata.igmp_snooping_enabled"); + meta.multicast_metadata.mld_snooping_enabled : ternary @name("multicast_metadata.mld_snooping_enabled"); + meta.multicast_metadata.mcast_route_hit : ternary @name("multicast_metadata.mcast_route_hit"); + meta.multicast_metadata.mcast_bridge_hit : ternary @name("multicast_metadata.mcast_bridge_hit"); + meta.multicast_metadata.mcast_rpf_group : ternary @name("multicast_metadata.mcast_rpf_group"); + meta.multicast_metadata.mcast_mode : ternary @name("multicast_metadata.mcast_mode"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups != 16w0xffff) { + fwd_result.apply(); + } + } +} + +control process_nexthop(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_nexthop.nop") action nop() { + } + @name(".process_nexthop.set_ecmp_nexthop_details") action set_ecmp_nexthop_details(bit<16> ifindex, bit<16> bd, bit<16> nhop_index, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.nexthop_index = nhop_index; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex; + meta.tunnel_metadata.tunnel_if_check = meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood") action set_ecmp_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index, bit<16> nhop_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.l3_metadata.nexthop_index = nhop_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_nexthop.set_nexthop_details") action set_nexthop_details(bit<16> ifindex, bit<16> bd, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex; + meta.tunnel_metadata.tunnel_if_check = meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_nexthop_details_for_post_routed_flood") action set_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".ecmp_group") table ecmp_group { + actions = { + nop(); + set_ecmp_nexthop_details(); + set_ecmp_nexthop_details_for_post_routed_flood(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + meta.hash_metadata.hash1 : selector @name("hash_metadata.hash1"); + } + size = 1024; + implementation = ecmp_action_profile; + default_action = NoAction(); + } + @name(".nexthop") table nexthop { + actions = { + nop(); + set_nexthop_details(); + set_nexthop_details_for_post_routed_flood(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction(); + } + apply { + if (meta.nexthop_metadata.nexthop_type == 1w1) { + ecmp_group.apply(); + } else { + nexthop.apply(); + } + } +} + +control process_multicast_flooding(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_multicast_flooding.nop") action nop() { + } + @name(".process_multicast_flooding.set_bd_flood_mc_index") action set_bd_flood_mc_index(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + } + @name(".bd_flood") table bd_flood { + actions = { + nop(); + set_bd_flood_mc_index(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_pkt_type: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + default_action = NoAction(); + } + apply { + bd_flood.apply(); + } +} + +control process_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_lag.set_lag_miss") action set_lag_miss() { + } + @name(".process_lag.set_lag_port") action set_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_lag.set_lag_remote_port") action set_lag_remote_port(bit<8> device, bit<16> port) { + meta.fabric_metadata.dst_device = device; + meta.fabric_metadata.dst_port = port; + } + @name(".lag_group") table lag_group { + actions = { + set_lag_miss(); + set_lag_port(); + set_lag_remote_port(); + @defaultonly NoAction(); + } + key = { + meta.ingress_metadata.egress_ifindex: exact @name("ingress_metadata.egress_ifindex"); + meta.hash_metadata.hash2 : selector @name("hash_metadata.hash2"); + } + size = 1024; + implementation = lag_action_profile; + default_action = NoAction(); + } + apply { + lag_group.apply(); + } +} + +@name("mac_learn_digest") struct mac_learn_digest { + bit<16> bd; + bit<48> lkp_mac_sa; + bit<16> ifindex; +} + +control process_mac_learning(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_learning.nop") action nop() { + } + @name(".process_mac_learning.generate_learn_notify") action generate_learn_notify() { + digest(32w1024, (mac_learn_digest){bd = meta.ingress_metadata.bd,lkp_mac_sa = meta.l2_metadata.lkp_mac_sa,ifindex = meta.ingress_metadata.ifindex}); + } + @name(".learn_notify") table learn_notify { + actions = { + nop(); + generate_learn_notify(); + @defaultonly NoAction(); + } + key = { + meta.l2_metadata.l2_src_miss: ternary @name("l2_metadata.l2_src_miss"); + meta.l2_metadata.l2_src_move: ternary @name("l2_metadata.l2_src_move"); + meta.l2_metadata.stp_state : ternary @name("l2_metadata.stp_state"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.l2_metadata.learning_enabled == 1w1) { + learn_notify.apply(); + } + } +} + +control process_fabric_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fabric_lag.nop") action nop() { + } + @name(".process_fabric_lag.set_fabric_lag_port") action set_fabric_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_fabric_lag.set_fabric_multicast") action set_fabric_multicast(bit<8> fabric_mgid) { + meta.multicast_metadata.mcast_grp = standard_metadata.mcast_grp; + } + @name(".fabric_lag") table fabric_lag { + actions = { + nop(); + set_fabric_lag_port(); + set_fabric_multicast(); + @defaultonly NoAction(); + } + key = { + meta.fabric_metadata.dst_device: exact @name("fabric_metadata.dst_device"); + meta.hash_metadata.hash2 : selector @name("hash_metadata.hash2"); + } + implementation = fabric_lag_action_profile; + default_action = NoAction(); + } + apply { + fabric_lag.apply(); + } +} + +@name(".drop_stats") counter>(32w1024, CounterType.packets) drop_stats; +@name(".drop_stats_2") counter>(32w1024, CounterType.packets) drop_stats_2; +control process_system_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_system_acl.drop_stats_update") action drop_stats_update() { + drop_stats_2.count((bit<10>)meta.ingress_metadata.drop_reason); + } + @name(".process_system_acl.nop") action nop() { + } + @name(".process_system_acl.copy_to_cpu_with_reason") action copy_to_cpu_with_reason(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.redirect_to_cpu") action redirect_to_cpu(bit<16> reason_code) { + copy_to_cpu_with_reason(reason_code); + mark_to_drop(standard_metadata); + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_system_acl.copy_to_cpu") action copy_to_cpu() { + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.drop_packet") action drop_packet() { + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.drop_packet_with_reason") action drop_packet_with_reason(bit<10> drop_reason) { + drop_stats.count(drop_reason); + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.negative_mirror") action negative_mirror(bit<32> session_id) { + clone_preserving_field_list(CloneType.I2E, session_id, 8w5); + mark_to_drop(standard_metadata); + } + @name(".drop_stats") table drop_stats_0 { + actions = { + drop_stats_update(); + @defaultonly NoAction(); + } + size = 1024; + default_action = NoAction(); + } + @name(".system_acl") table system_acl { + actions = { + nop(); + redirect_to_cpu(); + copy_to_cpu_with_reason(); + copy_to_cpu(); + drop_packet(); + drop_packet_with_reason(); + negative_mirror(); + @defaultonly NoAction(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.l2_metadata.lkp_mac_sa : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l2_metadata.lkp_mac_type : ternary @name("l2_metadata.lkp_mac_type"); + meta.ingress_metadata.ifindex : ternary @name("ingress_metadata.ifindex"); + meta.l2_metadata.port_vlan_mapping_miss : ternary @name("l2_metadata.port_vlan_mapping_miss"); + meta.security_metadata.ipsg_check_fail : ternary @name("security_metadata.ipsg_check_fail"); + meta.security_metadata.storm_control_color: ternary @name("security_metadata.storm_control_color"); + meta.acl_metadata.acl_deny : ternary @name("acl_metadata.acl_deny"); + meta.acl_metadata.racl_deny : ternary @name("acl_metadata.racl_deny"); + meta.l3_metadata.urpf_check_fail : ternary @name("l3_metadata.urpf_check_fail"); + meta.ingress_metadata.drop_flag : ternary @name("ingress_metadata.drop_flag"); + meta.acl_metadata.acl_copy : ternary @name("acl_metadata.acl_copy"); + meta.l3_metadata.l3_copy : ternary @name("l3_metadata.l3_copy"); + meta.l3_metadata.rmac_hit : ternary @name("l3_metadata.rmac_hit"); + meta.l3_metadata.routed : ternary @name("l3_metadata.routed"); + meta.ipv6_metadata.ipv6_src_is_link_local : ternary @name("ipv6_metadata.ipv6_src_is_link_local"); + meta.l2_metadata.same_if_check : ternary @name("l2_metadata.same_if_check"); + meta.tunnel_metadata.tunnel_if_check : ternary @name("tunnel_metadata.tunnel_if_check"); + meta.l3_metadata.same_bd_check : ternary @name("l3_metadata.same_bd_check"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + meta.l2_metadata.stp_state : ternary @name("l2_metadata.stp_state"); + meta.ingress_metadata.control_frame : ternary @name("ingress_metadata.control_frame"); + meta.ipv4_metadata.ipv4_unicast_enabled : ternary @name("ipv4_metadata.ipv4_unicast_enabled"); + meta.ipv6_metadata.ipv6_unicast_enabled : ternary @name("ipv6_metadata.ipv6_unicast_enabled"); + meta.ingress_metadata.egress_ifindex : ternary @name("ingress_metadata.egress_ifindex"); + } + size = 512; + default_action = NoAction(); + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x20 == 16w0) { + system_acl.apply(); + if (meta.ingress_metadata.drop_flag == 1w1) { + drop_stats_0.apply(); + } + } + } +} + +control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ingress.rmac_hit") action rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".ingress.rmac_miss") action rmac_miss() { + meta.l3_metadata.rmac_hit = 1w0; + } + @name(".rmac") table rmac { + actions = { + rmac_hit(); + rmac_miss(); + @defaultonly NoAction(); + } + key = { + meta.l3_metadata.rmac_group: exact @name("l3_metadata.rmac_group"); + meta.l2_metadata.lkp_mac_da: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction(); + } + @name(".process_ingress_port_mapping") process_ingress_port_mapping() process_ingress_port_mapping_0; + @name(".process_validate_outer_header") process_validate_outer_header() process_validate_outer_header_0; + @name(".process_global_params") process_global_params() process_global_params_0; + @name(".process_port_vlan_mapping") process_port_vlan_mapping() process_port_vlan_mapping_0; + @name(".process_spanning_tree") process_spanning_tree() process_spanning_tree_0; + @name(".process_ip_sourceguard") process_ip_sourceguard() process_ip_sourceguard_0; + @name(".process_int_endpoint") process_int_endpoint() process_int_endpoint_0; + @name(".process_tunnel") process_tunnel() process_tunnel_0; + @name(".process_ingress_sflow") process_ingress_sflow() process_ingress_sflow_0; + @name(".process_storm_control") process_storm_control() process_storm_control_0; + @name(".process_validate_packet") process_validate_packet() process_validate_packet_0; + @name(".process_mac") process_mac() process_mac_0; + @name(".process_mac_acl") process_mac_acl() process_mac_acl_0; + @name(".process_ip_acl") process_ip_acl() process_ip_acl_0; + @name(".process_qos") process_qos() process_qos_0; + @name(".process_multicast") process_multicast() process_multicast_0; + @name(".process_ipv4_racl") process_ipv4_racl() process_ipv4_racl_0; + @name(".process_ipv4_urpf") process_ipv4_urpf() process_ipv4_urpf_0; + @name(".process_ipv4_fib") process_ipv4_fib() process_ipv4_fib_0; + @name(".process_ipv6_racl") process_ipv6_racl() process_ipv6_racl_0; + @name(".process_ipv6_urpf") process_ipv6_urpf() process_ipv6_urpf_0; + @name(".process_ipv6_fib") process_ipv6_fib() process_ipv6_fib_0; + @name(".process_urpf_bd") process_urpf_bd() process_urpf_bd_0; + @name(".process_meter_index") process_meter_index() process_meter_index_0; + @name(".process_hashes") process_hashes() process_hashes_0; + @name(".process_meter_action") process_meter_action() process_meter_action_0; + @name(".process_ingress_bd_stats") process_ingress_bd_stats() process_ingress_bd_stats_0; + @name(".process_ingress_acl_stats") process_ingress_acl_stats() process_ingress_acl_stats_0; + @name(".process_storm_control_stats") process_storm_control_stats() process_storm_control_stats_0; + @name(".process_fwd_results") process_fwd_results() process_fwd_results_0; + @name(".process_nexthop") process_nexthop() process_nexthop_0; + @name(".process_multicast_flooding") process_multicast_flooding() process_multicast_flooding_0; + @name(".process_lag") process_lag() process_lag_0; + @name(".process_mac_learning") process_mac_learning() process_mac_learning_0; + @name(".process_fabric_lag") process_fabric_lag() process_fabric_lag_0; + @name(".process_system_acl") process_system_acl() process_system_acl_0; + apply { + process_ingress_port_mapping_0.apply(hdr, meta, standard_metadata); + process_validate_outer_header_0.apply(hdr, meta, standard_metadata); + process_global_params_0.apply(hdr, meta, standard_metadata); + process_port_vlan_mapping_0.apply(hdr, meta, standard_metadata); + process_spanning_tree_0.apply(hdr, meta, standard_metadata); + process_ip_sourceguard_0.apply(hdr, meta, standard_metadata); + process_int_endpoint_0.apply(hdr, meta, standard_metadata); + process_tunnel_0.apply(hdr, meta, standard_metadata); + process_ingress_sflow_0.apply(hdr, meta, standard_metadata); + process_storm_control_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + if (hdr.mpls[0].isValid() && meta.l3_metadata.fib_hit == 1w1) { + ; + } else { + process_validate_packet_0.apply(hdr, meta, standard_metadata); + process_mac_0.apply(hdr, meta, standard_metadata); + if (meta.l3_metadata.lkp_ip_type == 2w0) { + process_mac_acl_0.apply(hdr, meta, standard_metadata); + } else { + process_ip_acl_0.apply(hdr, meta, standard_metadata); + } + process_qos_0.apply(hdr, meta, standard_metadata); + switch (rmac.apply().action_run) { + rmac_miss: { + process_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1 && meta.ipv4_metadata.ipv4_unicast_enabled == 1w1) { + process_ipv4_racl_0.apply(hdr, meta, standard_metadata); + process_ipv4_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv4_fib_0.apply(hdr, meta, standard_metadata); + } else if (meta.l3_metadata.lkp_ip_type == 2w2 && meta.ipv6_metadata.ipv6_unicast_enabled == 1w1) { + process_ipv6_racl_0.apply(hdr, meta, standard_metadata); + process_ipv6_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv6_fib_0.apply(hdr, meta, standard_metadata); + } + process_urpf_bd_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + process_meter_index_0.apply(hdr, meta, standard_metadata); + process_hashes_0.apply(hdr, meta, standard_metadata); + process_meter_action_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_ingress_bd_stats_0.apply(hdr, meta, standard_metadata); + process_ingress_acl_stats_0.apply(hdr, meta, standard_metadata); + process_storm_control_stats_0.apply(hdr, meta, standard_metadata); + process_fwd_results_0.apply(hdr, meta, standard_metadata); + process_nexthop_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.egress_ifindex == 16w65535) { + process_multicast_flooding_0.apply(hdr, meta, standard_metadata); + } else { + process_lag_0.apply(hdr, meta, standard_metadata); + } + process_mac_learning_0.apply(hdr, meta, standard_metadata); + } + process_fabric_lag_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_system_acl_0.apply(hdr, meta, standard_metadata); + } + } +} + +control DeparserImpl(packet_out packet, in headers hdr) { + apply { + packet.emit(hdr.ethernet); + packet.emit(hdr.fabric_header); + packet.emit(hdr.fabric_header_cpu); + packet.emit(hdr.fabric_header_sflow); + packet.emit(hdr.fabric_header_mirror); + packet.emit(hdr.fabric_header_multicast); + packet.emit(hdr.fabric_header_unicast); + packet.emit(hdr.fabric_payload_header); + packet.emit(hdr.llc_header); + packet.emit(hdr.snap_header); + packet.emit(hdr.vlan_tag_[0]); + packet.emit(hdr.vlan_tag_[1]); + packet.emit(hdr.arp_rarp); + packet.emit(hdr.arp_rarp_ipv4); + packet.emit(hdr.ipv6); + packet.emit(hdr.ipv4); + packet.emit(hdr.gre); + packet.emit(hdr.erspan_t3_header); + packet.emit(hdr.nvgre); + packet.emit(hdr.udp); + packet.emit(hdr.sflow); + packet.emit(hdr.vxlan_gpe); + packet.emit(hdr.vxlan_gpe_int_header); + packet.emit(hdr.int_header); + packet.emit(hdr.int_switch_id_header); + packet.emit(hdr.int_ingress_port_id_header); + packet.emit(hdr.int_hop_latency_header); + packet.emit(hdr.int_q_occupancy_header); + packet.emit(hdr.int_ingress_tstamp_header); + packet.emit(hdr.int_egress_port_id_header); + packet.emit(hdr.int_q_congestion_header); + packet.emit(hdr.int_egress_port_tx_utilization_header); + packet.emit(hdr.int_val); + packet.emit(hdr.genv); + packet.emit(hdr.vxlan); + packet.emit(hdr.tcp); + packet.emit(hdr.icmp); + packet.emit(hdr.mpls); + packet.emit(hdr.inner_ethernet); + packet.emit(hdr.inner_ipv6); + packet.emit(hdr.inner_ipv4); + packet.emit(hdr.inner_udp); + packet.emit(hdr.inner_tcp); + packet.emit(hdr.inner_icmp); + } +} + +control verifyChecksum(inout headers hdr, inout metadata meta) { + apply { + verify_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + verify_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +control computeChecksum(inout headers hdr, inout metadata meta) { + apply { + update_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + update_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +V1Switch(ParserImpl(), verifyChecksum(), ingress(), egress(), computeChecksum(), DeparserImpl()) main; diff --git a/testdata/p4_16_samples_outputs/switch_p4_16-frontend.p4 b/testdata/p4_16_samples_outputs/switch_p4_16-frontend.p4 new file mode 100644 index 00000000000..8720bdd67f2 --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16-frontend.p4 @@ -0,0 +1,6003 @@ +#include +#define V1MODEL_VERSION 20200408 +#include + +enum bit<8> FieldLists { + none = 8w0, + i2e_mirror_info = 8w1, + cpu_info = 8w2, + e2e_mirror_info = 8w3, + int_i2e_mirror_info = 8w4, + mirror_info = 8w5, + sflow_cpu_info = 8w6 +} + +struct acl_metadata_t { + bit<1> acl_deny; + bit<1> acl_copy; + bit<1> racl_deny; + bit<16> acl_nexthop; + bit<16> racl_nexthop; + bit<1> acl_nexthop_type; + bit<1> racl_nexthop_type; + bit<1> acl_redirect; + bit<1> racl_redirect; + bit<16> if_label; + bit<16> bd_label; + bit<14> acl_stats_index; +} + +struct egress_filter_metadata_t { + bit<16> ifindex_check; + bit<16> bd; + bit<16> inner_bd; +} + +struct egress_metadata_t { + bit<1> bypass; + bit<2> port_type; + bit<16> payload_length; + bit<9> smac_idx; + bit<16> bd; + bit<16> outer_bd; + bit<48> mac_da; + bit<1> routed; + bit<16> same_bd_check; + bit<8> drop_reason; + bit<16> ifindex; +} + +struct fabric_metadata_t { + bit<3> packetType; + bit<1> fabric_header_present; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> reason_code; + bit<8> dst_device; + bit<16> dst_port; +} + +struct global_config_metadata_t { + bit<1> enable_dod; +} + +struct hash_metadata_t { + bit<16> hash1; + bit<16> hash2; + bit<16> entropy_hash; +} + +struct i2e_metadata_t { + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info) + bit<32> ingress_tstamp; + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info, FieldLists.int_i2e_mirror_info) + bit<16> mirror_session_id; +} + +struct ingress_metadata_t { + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<9> ingress_port; + @field_list(FieldLists.cpu_info, FieldLists.mirror_info, FieldLists.sflow_cpu_info) + bit<16> ifindex; + bit<16> egress_ifindex; + bit<2> port_type; + bit<16> outer_bd; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> bd; + bit<1> drop_flag; + @field_list(FieldLists.mirror_info) + bit<8> drop_reason; + bit<1> control_frame; + bit<16> bypass_lookups; + @saturating + bit<32> sflow_take_sample; +} + +struct int_metadata_t { + bit<32> switch_id; + bit<8> insert_cnt; + bit<16> insert_byte_cnt; + bit<16> gpe_int_hdr_len; + bit<8> gpe_int_hdr_len8; + bit<16> instruction_cnt; +} + +struct int_metadata_i2e_t { + @field_list(FieldLists.int_i2e_mirror_info) + bit<1> sink; + bit<1> source; +} + +struct ingress_intrinsic_metadata_t { + bit<48> ingress_global_timestamp; + bit<16> mcast_grp; + bit<16> egress_rid; + bit<3> priority; +} + +struct ipv4_metadata_t { + bit<32> lkp_ipv4_sa; + bit<32> lkp_ipv4_da; + bit<1> ipv4_unicast_enabled; + bit<2> ipv4_urpf_mode; +} + +struct ipv6_metadata_t { + bit<128> lkp_ipv6_sa; + bit<128> lkp_ipv6_da; + bit<1> ipv6_unicast_enabled; + bit<1> ipv6_src_is_link_local; + bit<2> ipv6_urpf_mode; +} + +struct l2_metadata_t { + bit<48> lkp_mac_sa; + bit<48> lkp_mac_da; + bit<3> lkp_pkt_type; + bit<16> lkp_mac_type; + bit<16> l2_nexthop; + bit<1> l2_nexthop_type; + bit<1> l2_redirect; + bit<1> l2_src_miss; + bit<16> l2_src_move; + bit<10> stp_group; + bit<3> stp_state; + bit<16> bd_stats_idx; + bit<1> learning_enabled; + bit<1> port_vlan_mapping_miss; + bit<16> same_if_check; +} + +struct l3_metadata_t { + bit<2> lkp_ip_type; + bit<4> lkp_ip_version; + bit<8> lkp_ip_proto; + bit<8> lkp_ip_tc; + bit<8> lkp_ip_ttl; + bit<16> lkp_l4_sport; + bit<16> lkp_l4_dport; + bit<16> lkp_outer_l4_sport; + bit<16> lkp_outer_l4_dport; + bit<16> vrf; + bit<10> rmac_group; + bit<1> rmac_hit; + bit<2> urpf_mode; + bit<1> urpf_hit; + bit<1> urpf_check_fail; + bit<16> urpf_bd_group; + bit<1> fib_hit; + bit<16> fib_nexthop; + bit<1> fib_nexthop_type; + bit<16> same_bd_check; + bit<16> nexthop_index; + bit<1> routed; + bit<1> outer_routed; + bit<8> mtu_index; + bit<1> l3_copy; + @saturating + bit<16> l3_mtu_check; +} + +struct meter_metadata_t { + bit<2> meter_color; + bit<16> meter_index; +} + +struct multicast_metadata_t { + bit<1> ipv4_mcast_key_type; + bit<16> ipv4_mcast_key; + bit<1> ipv6_mcast_key_type; + bit<16> ipv6_mcast_key; + bit<1> outer_mcast_route_hit; + bit<2> outer_mcast_mode; + bit<1> mcast_route_hit; + bit<1> mcast_bridge_hit; + bit<1> ipv4_multicast_enabled; + bit<1> ipv6_multicast_enabled; + bit<1> igmp_snooping_enabled; + bit<1> mld_snooping_enabled; + bit<16> bd_mrpf_group; + bit<16> mcast_rpf_group; + bit<2> mcast_mode; + bit<16> multicast_route_mc_index; + bit<16> multicast_bridge_mc_index; + bit<1> inner_replica; + bit<1> replica; + bit<16> mcast_grp; +} + +struct nexthop_metadata_t { + bit<1> nexthop_type; +} + +struct qos_metadata_t { + bit<8> outer_dscp; + bit<3> marked_cos; + bit<8> marked_dscp; + bit<3> marked_exp; +} + +struct queueing_metadata_t { + bit<48> enq_timestamp; + bit<16> enq_qdepth; + bit<32> deq_timedelta; + bit<16> deq_qdepth; +} + +struct security_metadata_t { + bit<1> storm_control_color; + bit<1> ipsg_enabled; + bit<1> ipsg_check_fail; +} + +struct sflow_meta_t { + bit<16> sflow_session_id; +} + +struct tunnel_metadata_t { + bit<5> ingress_tunnel_type; + bit<24> tunnel_vni; + bit<1> mpls_enabled; + bit<20> mpls_label; + bit<3> mpls_exp; + bit<8> mpls_ttl; + bit<5> egress_tunnel_type; + bit<14> tunnel_index; + bit<9> tunnel_src_index; + bit<9> tunnel_smac_index; + bit<14> tunnel_dst_index; + bit<14> tunnel_dmac_index; + bit<24> vnid; + bit<1> tunnel_terminate; + bit<1> tunnel_if_check; + bit<4> egress_header_count; + bit<8> inner_ip_proto; +} + +header arp_rarp_t { + bit<16> hwType; + bit<16> protoType; + bit<8> hwAddrLen; + bit<8> protoAddrLen; + bit<16> opcode; +} + +header arp_rarp_ipv4_t { + bit<48> srcHwAddr; + bit<32> srcProtoAddr; + bit<48> dstHwAddr; + bit<32> dstProtoAddr; +} + +header bfd_t { + bit<3> version; + bit<5> diag; + bit<2> state; + bit<1> p; + bit<1> f; + bit<1> c; + bit<1> a; + bit<1> d; + bit<1> m; + bit<8> detectMult; + bit<8> len; + bit<32> myDiscriminator; + bit<32> yourDiscriminator; + bit<32> desiredMinTxInterval; + bit<32> requiredMinRxInterval; + bit<32> requiredMinEchoRxInterval; +} + +header eompls_t { + bit<4> zero; + bit<12> reserved; + bit<16> seqNo; +} + +@name("erspan_header_t3_t") header erspan_header_t3_t_0 { + bit<4> version; + bit<12> vlan; + bit<6> priority; + bit<10> span_id; + bit<32> timestamp; + bit<32> sgt_other; +} + +header ethernet_t { + bit<48> dstAddr; + bit<48> srcAddr; + bit<16> etherType; +} + +header fabric_header_t { + bit<3> packetType; + bit<2> headerVersion; + bit<2> packetVersion; + bit<1> pad1; + bit<3> fabricColor; + bit<5> fabricQos; + bit<8> dstDevice; + bit<16> dstPortOrGroup; +} + +header fabric_header_cpu_t { + bit<5> egressQueue; + bit<1> txBypass; + bit<2> reserved; + bit<16> ingressPort; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> reasonCode; +} + +header fabric_header_mirror_t { + bit<16> rewriteIndex; + bit<10> egressPort; + bit<5> egressQueue; + bit<1> pad; +} + +header fabric_header_multicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> mcastGrp; +} + +header fabric_header_sflow_t { + bit<16> sflow_session_id; +} + +header fabric_header_unicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> nexthopIndex; +} + +header fabric_payload_header_t { + bit<16> etherType; +} + +header fcoe_header_t { + bit<4> version; + bit<4> type_; + bit<8> sof; + bit<32> rsvd1; + bit<32> ts_upper; + bit<32> ts_lower; + bit<32> size_; + bit<8> eof; + bit<24> rsvd2; +} + +header genv_t { + bit<2> ver; + bit<6> optLen; + bit<1> oam; + bit<1> critical; + bit<6> reserved; + bit<16> protoType; + bit<24> vni; + bit<8> reserved2; +} + +header gre_t { + bit<1> C; + bit<1> R; + bit<1> K; + bit<1> S; + bit<1> s; + bit<3> recurse; + bit<5> flags; + bit<3> ver; + bit<16> proto; +} + +header icmp_t { + bit<16> typeCode; + bit<16> hdrChecksum; +} + +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; + bit<32> srcAddr; + bit<32> dstAddr; +} + +header ipv6_t { + bit<4> version; + bit<8> trafficClass; + bit<20> flowLabel; + bit<16> payloadLen; + bit<8> nextHdr; + bit<8> hopLimit; + bit<128> srcAddr; + bit<128> dstAddr; +} + +header sctp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> verifTag; + bit<32> checksum; +} + +header tcp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> seqNo; + bit<32> ackNo; + bit<4> dataOffset; + bit<4> res; + bit<8> flags; + bit<16> window; + bit<16> checksum; + bit<16> urgentPtr; +} + +header udp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<16> length_; + bit<16> checksum; +} + +header int_egress_port_id_header_t { + bit<1> bos; + bit<31> egress_port_id; +} + +header int_egress_port_tx_utilization_header_t { + bit<1> bos; + bit<31> egress_port_tx_utilization; +} + +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +header int_hop_latency_header_t { + bit<1> bos; + bit<31> hop_latency; +} + +header int_ingress_port_id_header_t { + bit<1> bos; + bit<15> ingress_port_id_1; + bit<16> ingress_port_id_0; +} + +header int_ingress_tstamp_header_t { + bit<1> bos; + bit<31> ingress_tstamp; +} + +header int_q_congestion_header_t { + bit<1> bos; + bit<31> q_congestion; +} + +header int_q_occupancy_header_t { + bit<1> bos; + bit<7> q_occupancy1; + bit<24> q_occupancy0; +} + +header int_switch_id_header_t { + bit<1> bos; + bit<31> switch_id; +} + +header lisp_t { + bit<8> flags; + bit<24> nonce; + bit<32> lsbsInstanceId; +} + +header llc_header_t { + bit<8> dsap; + bit<8> ssap; + bit<8> control_; +} + +header nsh_t { + bit<1> oam; + bit<1> context; + bit<6> flags; + bit<8> reserved; + bit<16> protoType; + bit<24> spath; + bit<8> sindex; +} + +header nsh_context_t { + bit<32> network_platform; + bit<32> network_shared; + bit<32> service_platform; + bit<32> service_shared; +} + +header nvgre_t { + bit<24> tni; + bit<8> flow_id; +} + +header roce_header_t { + bit<320> ib_grh; + bit<96> ib_bth; +} + +header roce_v2_header_t { + bit<96> ib_bth; +} + +header sflow_hdr_t { + bit<32> version; + bit<32> addrType; + bit<32> ipAddress; + bit<32> subAgentId; + bit<32> seqNumber; + bit<32> uptime; + bit<32> numSamples; +} + +header sflow_raw_hdr_record_t { + bit<20> enterprise; + bit<12> format; + bit<32> flowDataLength; + bit<32> headerProtocol; + bit<32> frameLength; + bit<32> bytesRemoved; + bit<32> headerSize; +} + +header sflow_sample_t { + bit<20> enterprise; + bit<12> format; + bit<32> sampleLength; + bit<32> seqNumer; + bit<8> srcIdType; + bit<24> srcIdIndex; + bit<32> samplingRate; + bit<32> samplePool; + bit<32> numDrops; + bit<32> inputIfindex; + bit<32> outputIfindex; + bit<32> numFlowRecords; +} + +header snap_header_t { + bit<24> oui; + bit<16> type_; +} + +header trill_t { + bit<2> version; + bit<2> reserved; + bit<1> multiDestination; + bit<5> optLength; + bit<6> hopCount; + bit<16> egressRbridge; + bit<16> ingressRbridge; +} + +header vntag_t { + bit<1> direction; + bit<1> pointer; + bit<14> destVif; + bit<1> looped; + bit<1> reserved; + bit<2> version; + bit<12> srcVif; +} + +header vxlan_t { + bit<8> flags; + bit<24> reserved; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_t { + bit<8> flags; + bit<16> reserved; + bit<8> next_proto; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_int_header_t { + bit<8> int_type; + bit<8> rsvd; + bit<8> len; + bit<8> next_proto; +} + +header int_value_t { + bit<1> bos; + bit<31> val; +} + +header mpls_t { + bit<20> label; + bit<3> exp; + bit<1> bos; + bit<8> ttl; +} + +header vlan_tag_t { + bit<3> pcp; + bit<1> cfi; + bit<12> vid; + bit<16> etherType; +} + +struct metadata { + @name(".acl_metadata") + acl_metadata_t acl_metadata; + @name(".egress_filter_metadata") + egress_filter_metadata_t egress_filter_metadata; + @name(".egress_metadata") + egress_metadata_t egress_metadata; + @name(".fabric_metadata") + fabric_metadata_t fabric_metadata; + @name(".global_config_metadata") + global_config_metadata_t global_config_metadata; + @name(".hash_metadata") + hash_metadata_t hash_metadata; + @name(".i2e_metadata") + i2e_metadata_t i2e_metadata; + @name(".ingress_metadata") + ingress_metadata_t ingress_metadata; + @name(".int_metadata") + int_metadata_t int_metadata; + @name(".int_metadata_i2e") + int_metadata_i2e_t int_metadata_i2e; + @name(".ipv4_metadata") + ipv4_metadata_t ipv4_metadata; + @name(".ipv6_metadata") + ipv6_metadata_t ipv6_metadata; + @name(".l2_metadata") + l2_metadata_t l2_metadata; + @name(".l3_metadata") + l3_metadata_t l3_metadata; + @name(".meter_metadata") + meter_metadata_t meter_metadata; + @name(".multicast_metadata") + multicast_metadata_t multicast_metadata; + @name(".nexthop_metadata") + nexthop_metadata_t nexthop_metadata; + @name(".qos_metadata") + qos_metadata_t qos_metadata; + @name(".security_metadata") + security_metadata_t security_metadata; + @name(".sflow_metadata") + sflow_meta_t sflow_metadata; + @name(".tunnel_metadata") + tunnel_metadata_t tunnel_metadata; +} + +struct headers { + @name(".arp_rarp") + arp_rarp_t arp_rarp; + @name(".arp_rarp_ipv4") + arp_rarp_ipv4_t arp_rarp_ipv4; + @name(".bfd") + bfd_t bfd; + @name(".eompls") + eompls_t eompls; + @name(".erspan_t3_header") + erspan_header_t3_t_0 erspan_t3_header; + @name(".ethernet") + ethernet_t ethernet; + @name(".fabric_header") + fabric_header_t fabric_header; + @name(".fabric_header_cpu") + fabric_header_cpu_t fabric_header_cpu; + @name(".fabric_header_mirror") + fabric_header_mirror_t fabric_header_mirror; + @name(".fabric_header_multicast") + fabric_header_multicast_t fabric_header_multicast; + @name(".fabric_header_sflow") + fabric_header_sflow_t fabric_header_sflow; + @name(".fabric_header_unicast") + fabric_header_unicast_t fabric_header_unicast; + @name(".fabric_payload_header") + fabric_payload_header_t fabric_payload_header; + @name(".fcoe") + fcoe_header_t fcoe; + @name(".genv") + genv_t genv; + @name(".gre") + gre_t gre; + @name(".icmp") + icmp_t icmp; + @name(".inner_ethernet") + ethernet_t inner_ethernet; + @name(".inner_icmp") + icmp_t inner_icmp; + @name(".inner_ipv4") + ipv4_t inner_ipv4; + @name(".inner_ipv6") + ipv6_t inner_ipv6; + @name(".inner_sctp") + sctp_t inner_sctp; + @name(".inner_tcp") + tcp_t inner_tcp; + @name(".inner_udp") + udp_t inner_udp; + @name(".int_egress_port_id_header") + int_egress_port_id_header_t int_egress_port_id_header; + @name(".int_egress_port_tx_utilization_header") + int_egress_port_tx_utilization_header_t int_egress_port_tx_utilization_header; + @name(".int_header") + int_header_t int_header; + @name(".int_hop_latency_header") + int_hop_latency_header_t int_hop_latency_header; + @name(".int_ingress_port_id_header") + int_ingress_port_id_header_t int_ingress_port_id_header; + @name(".int_ingress_tstamp_header") + int_ingress_tstamp_header_t int_ingress_tstamp_header; + @name(".int_q_congestion_header") + int_q_congestion_header_t int_q_congestion_header; + @name(".int_q_occupancy_header") + int_q_occupancy_header_t int_q_occupancy_header; + @name(".int_switch_id_header") + int_switch_id_header_t int_switch_id_header; + @name(".ipv4") + ipv4_t ipv4; + @name(".ipv6") + ipv6_t ipv6; + @name(".lisp") + lisp_t lisp; + @name(".llc_header") + llc_header_t llc_header; + @name(".nsh") + nsh_t nsh; + @name(".nsh_context") + nsh_context_t nsh_context; + @name(".nvgre") + nvgre_t nvgre; + @name(".outer_udp") + udp_t outer_udp; + @name(".roce") + roce_header_t roce; + @name(".roce_v2") + roce_v2_header_t roce_v2; + @name(".sctp") + sctp_t sctp; + @name(".sflow") + sflow_hdr_t sflow; + @name(".sflow_raw_hdr_record") + sflow_raw_hdr_record_t sflow_raw_hdr_record; + @name(".sflow_sample") + sflow_sample_t sflow_sample; + @name(".snap_header") + snap_header_t snap_header; + @name(".tcp") + tcp_t tcp; + @name(".trill") + trill_t trill; + @name(".udp") + udp_t udp; + @name(".vntag") + vntag_t vntag; + @name(".vxlan") + vxlan_t vxlan; + @name(".vxlan_gpe") + vxlan_gpe_t vxlan_gpe; + @name(".vxlan_gpe_int_header") + vxlan_gpe_int_header_t vxlan_gpe_int_header; + @name(".int_val") + int_value_t[24] int_val; + @name(".mpls") + mpls_t[3] mpls; + @name(".vlan_tag_") + vlan_tag_t[2] vlan_tag_; +} + +parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name("ParserImpl.tmp") bit<4> tmp; + @name("ParserImpl.tmp_0") bit<4> tmp_0; + @name(".parse_all_int_meta_value_heders") state parse_all_int_meta_value_heders { + packet.extract(hdr.int_switch_id_header); + packet.extract(hdr.int_ingress_port_id_header); + packet.extract(hdr.int_hop_latency_header); + packet.extract(hdr.int_q_occupancy_header); + packet.extract(hdr.int_ingress_tstamp_header); + packet.extract(hdr.int_egress_port_id_header); + packet.extract(hdr.int_q_congestion_header); + packet.extract(hdr.int_egress_port_tx_utilization_header); + transition parse_int_val; + } + @name(".parse_arp_rarp") state parse_arp_rarp { + packet.extract(hdr.arp_rarp); + transition select(hdr.arp_rarp.protoType) { + 16w0x800: parse_arp_rarp_ipv4; + default: accept; + } + } + @name(".parse_arp_rarp_ipv4") state parse_arp_rarp_ipv4 { + packet.extract(hdr.arp_rarp_ipv4); + transition parse_set_prio_med; + } + @name(".parse_eompls") state parse_eompls { + meta.tunnel_metadata.ingress_tunnel_type = 5w6; + transition parse_inner_ethernet; + } + @name(".parse_erspan_t3") state parse_erspan_t3 { + packet.extract(hdr.erspan_t3_header); + transition parse_inner_ethernet; + } + @name(".parse_ethernet") state parse_ethernet { + packet.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x9000: parse_fabric_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_header") state parse_fabric_header { + packet.extract(hdr.fabric_header); + transition select(hdr.fabric_header.packetType) { + 3w1: parse_fabric_header_unicast; + 3w2: parse_fabric_header_multicast; + 3w3: parse_fabric_header_mirror; + 3w5: parse_fabric_header_cpu; + default: accept; + } + } + @name(".parse_fabric_header_cpu") state parse_fabric_header_cpu { + packet.extract(hdr.fabric_header_cpu); + meta.ingress_metadata.bypass_lookups = hdr.fabric_header_cpu.reasonCode; + transition select(hdr.fabric_header_cpu.reasonCode) { + 16w0x4: parse_fabric_sflow_header; + default: parse_fabric_payload_header; + } + } + @name(".parse_fabric_header_mirror") state parse_fabric_header_mirror { + packet.extract(hdr.fabric_header_mirror); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_multicast") state parse_fabric_header_multicast { + packet.extract(hdr.fabric_header_multicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_unicast") state parse_fabric_header_unicast { + packet.extract(hdr.fabric_header_unicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_payload_header") state parse_fabric_payload_header { + packet.extract(hdr.fabric_payload_header); + transition select(hdr.fabric_payload_header.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_sflow_header") state parse_fabric_sflow_header { + packet.extract(hdr.fabric_header_sflow); + transition parse_fabric_payload_header; + } + @name(".parse_geneve") state parse_geneve { + packet.extract(hdr.genv); + meta.tunnel_metadata.tunnel_vni = hdr.genv.vni; + meta.tunnel_metadata.ingress_tunnel_type = 5w4; + transition select(hdr.genv.ver, hdr.genv.optLen, hdr.genv.protoType) { + (2w0x0, 6w0x0, 16w0x6558): parse_inner_ethernet; + (2w0x0, 6w0x0, 16w0x800): parse_inner_ipv4; + (2w0x0, 6w0x0, 16w0x86dd): parse_inner_ipv6; + default: accept; + } + } + @name(".parse_gpe_int_header") state parse_gpe_int_header { + packet.extract(hdr.vxlan_gpe_int_header); + meta.int_metadata.gpe_int_hdr_len = (bit<16>)hdr.vxlan_gpe_int_header.len; + transition parse_int_header; + } + @name(".parse_gre") state parse_gre { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x1, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x6558): parse_nvgre; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x86dd): parse_gre_ipv6; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x22eb): parse_erspan_t3; + default: accept; + } + } + @name(".parse_gre_ipv4") state parse_gre_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv4; + } + @name(".parse_gre_ipv6") state parse_gre_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv6; + } + @name(".parse_icmp") state parse_icmp { + packet.extract(hdr.icmp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.icmp.typeCode; + transition select(hdr.icmp.typeCode) { + 16w0x8200 &&& 16w0xfe00: parse_set_prio_med; + 16w0x8400 &&& 16w0xfc00: parse_set_prio_med; + 16w0x8800 &&& 16w0xff00: parse_set_prio_med; + default: accept; + } + } + @name(".parse_inner_ethernet") state parse_inner_ethernet { + packet.extract(hdr.inner_ethernet); + meta.l2_metadata.lkp_mac_sa = hdr.inner_ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.inner_ethernet.dstAddr; + transition select(hdr.inner_ethernet.etherType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_inner_icmp") state parse_inner_icmp { + packet.extract(hdr.inner_icmp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_icmp.typeCode; + transition accept; + } + @name(".parse_inner_ipv4") state parse_inner_ipv4 { + packet.extract(hdr.inner_ipv4); + meta.ipv4_metadata.lkp_ipv4_sa = hdr.inner_ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.inner_ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.inner_ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = hdr.inner_ipv4.ttl; + transition select(hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ihl, hdr.inner_ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_inner_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_inner_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_ipv6") state parse_inner_ipv6 { + packet.extract(hdr.inner_ipv6); + meta.ipv6_metadata.lkp_ipv6_sa = hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.inner_ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = hdr.inner_ipv6.hopLimit; + transition select(hdr.inner_ipv6.nextHdr) { + 8w58: parse_inner_icmp; + 8w6: parse_inner_tcp; + 8w17: parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_tcp") state parse_inner_tcp { + packet.extract(hdr.inner_tcp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_tcp.srcPort; + meta.l3_metadata.lkp_l4_dport = hdr.inner_tcp.dstPort; + transition accept; + } + @name(".parse_inner_udp") state parse_inner_udp { + packet.extract(hdr.inner_udp); + meta.l3_metadata.lkp_l4_sport = hdr.inner_udp.srcPort; + meta.l3_metadata.lkp_l4_dport = hdr.inner_udp.dstPort; + transition accept; + } + @name(".parse_int_header") state parse_int_header { + packet.extract(hdr.int_header); + meta.int_metadata.instruction_cnt = (bit<16>)hdr.int_header.ins_cnt; + transition select(hdr.int_header.rsvd1, hdr.int_header.total_hop_cnt) { + (5w0x0, 8w0x0): accept; + (5w0x0 &&& 5w0xf, 8w0x0 &&& 8w0x0): parse_int_val; + default: accept; + default: parse_all_int_meta_value_heders; + } + } + @name(".parse_int_val") state parse_int_val { + packet.extract(hdr.int_val.next); + transition select(hdr.int_val.last.bos) { + 1w0: parse_int_val; + 1w1: parse_inner_ethernet; + } + } + @name(".parse_ipv4") state parse_ipv4 { + packet.extract(hdr.ipv4); + transition select(hdr.ipv4.fragOffset, hdr.ipv4.ihl, hdr.ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_udp; + (13w0x0, 4w0x5, 8w0x2f): parse_gre; + (13w0x0, 4w0x5, 8w0x4): parse_ipv4_in_ip; + (13w0x0, 4w0x5, 8w0x29): parse_ipv6_in_ip; + (13w0, 4w0, 8w2): parse_set_prio_med; + (13w0, 4w0, 8w88): parse_set_prio_med; + (13w0, 4w0, 8w89): parse_set_prio_med; + (13w0, 4w0, 8w103): parse_set_prio_med; + (13w0, 4w0, 8w112): parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv4_in_ip") state parse_ipv4_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv4; + } + @name(".parse_ipv6") state parse_ipv6 { + packet.extract(hdr.ipv6); + transition select(hdr.ipv6.nextHdr) { + 8w58: parse_icmp; + 8w6: parse_tcp; + 8w4: parse_ipv4_in_ip; + 8w17: parse_udp; + 8w47: parse_gre; + 8w41: parse_ipv6_in_ip; + 8w88: parse_set_prio_med; + 8w89: parse_set_prio_med; + 8w103: parse_set_prio_med; + 8w112: parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv6_in_ip") state parse_ipv6_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv6; + } + @name(".parse_llc_header") state parse_llc_header { + packet.extract(hdr.llc_header); + transition select(hdr.llc_header.dsap, hdr.llc_header.ssap) { + (8w0xaa, 8w0xaa): parse_snap_header; + (8w0xfe, 8w0xfe): parse_set_prio_med; + default: accept; + } + } + @name(".parse_mpls") state parse_mpls { + packet.extract(hdr.mpls.next); + transition select(hdr.mpls.last.bos) { + 1w0: parse_mpls; + 1w1: parse_mpls_bos; + default: accept; + } + } + @name(".parse_mpls_bos") state parse_mpls_bos { + tmp_0 = packet.lookahead>(); + tmp = tmp_0; + transition select(tmp) { + 4w0x4: parse_mpls_inner_ipv4; + 4w0x6: parse_mpls_inner_ipv6; + default: parse_eompls; + } + } + @name(".parse_mpls_inner_ipv4") state parse_mpls_inner_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv4; + } + @name(".parse_mpls_inner_ipv6") state parse_mpls_inner_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv6; + } + @name(".parse_nvgre") state parse_nvgre { + packet.extract(hdr.nvgre); + meta.tunnel_metadata.ingress_tunnel_type = 5w5; + meta.tunnel_metadata.tunnel_vni = hdr.nvgre.tni; + transition parse_inner_ethernet; + } + @name(".parse_qinq") state parse_qinq { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8100: parse_qinq_vlan; + default: accept; + } + } + @name(".parse_qinq_vlan") state parse_qinq_vlan { + packet.extract(hdr.vlan_tag_[1]); + transition select(hdr.vlan_tag_[1].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_set_prio_high") state parse_set_prio_high { + standard_metadata.priority = 3w5; + transition accept; + } + @name(".parse_set_prio_med") state parse_set_prio_med { + standard_metadata.priority = 3w3; + transition accept; + } + @name(".parse_sflow") state parse_sflow { + packet.extract(hdr.sflow); + transition accept; + } + @name(".parse_snap_header") state parse_snap_header { + packet.extract(hdr.snap_header); + transition select(hdr.snap_header.type_) { + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_tcp") state parse_tcp { + packet.extract(hdr.tcp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.tcp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = hdr.tcp.dstPort; + transition select(hdr.tcp.dstPort) { + 16w179: parse_set_prio_med; + 16w639: parse_set_prio_med; + default: accept; + } + } + @name(".parse_udp") state parse_udp { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w4789: parse_vxlan; + 16w6081: parse_geneve; + 16w4790: parse_vxlan_gpe; + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + 16w6343: parse_sflow; + default: accept; + } + } + @name(".parse_vlan") state parse_vlan { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_vxlan") state parse_vxlan { + packet.extract(hdr.vxlan); + meta.tunnel_metadata.ingress_tunnel_type = 5w1; + meta.tunnel_metadata.tunnel_vni = hdr.vxlan.vni; + transition parse_inner_ethernet; + } + @name(".parse_vxlan_gpe") state parse_vxlan_gpe { + packet.extract(hdr.vxlan_gpe); + meta.tunnel_metadata.ingress_tunnel_type = 5w12; + meta.tunnel_metadata.tunnel_vni = hdr.vxlan_gpe.vni; + transition select(hdr.vxlan_gpe.flags, hdr.vxlan_gpe.next_proto) { + (8w0x8 &&& 8w0x8, 8w0x5): parse_gpe_int_header; + default: parse_inner_ethernet; + } + } + @name(".start") state start { + transition parse_ethernet; + } +} + +@name(".bd_action_profile") action_profile(32w1024) bd_action_profile; +@name(".ecmp_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w10) ecmp_action_profile; +@name(".fabric_lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) fabric_lag_action_profile; +@name(".lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) lag_action_profile; +control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @noWarn("unused") @name(".NoAction") action NoAction_2() { + } + @noWarn("unused") @name(".NoAction") action NoAction_3() { + } + @noWarn("unused") @name(".NoAction") action NoAction_4() { + } + @noWarn("unused") @name(".NoAction") action NoAction_5() { + } + @noWarn("unused") @name(".NoAction") action NoAction_6() { + } + @noWarn("unused") @name(".NoAction") action NoAction_7() { + } + @noWarn("unused") @name(".NoAction") action NoAction_8() { + } + @noWarn("unused") @name(".NoAction") action NoAction_9() { + } + @noWarn("unused") @name(".NoAction") action NoAction_10() { + } + @noWarn("unused") @name(".NoAction") action NoAction_11() { + } + @noWarn("unused") @name(".NoAction") action NoAction_12() { + } + @noWarn("unused") @name(".NoAction") action NoAction_13() { + } + @noWarn("unused") @name(".NoAction") action NoAction_14() { + } + @noWarn("unused") @name(".NoAction") action NoAction_15() { + } + @noWarn("unused") @name(".NoAction") action NoAction_16() { + } + @noWarn("unused") @name(".NoAction") action NoAction_17() { + } + @noWarn("unused") @name(".NoAction") action NoAction_18() { + } + @noWarn("unused") @name(".NoAction") action NoAction_19() { + } + @noWarn("unused") @name(".NoAction") action NoAction_20() { + } + @noWarn("unused") @name(".NoAction") action NoAction_21() { + } + @noWarn("unused") @name(".NoAction") action NoAction_22() { + } + @noWarn("unused") @name(".NoAction") action NoAction_23() { + } + @noWarn("unused") @name(".NoAction") action NoAction_24() { + } + @noWarn("unused") @name(".NoAction") action NoAction_25() { + } + @noWarn("unused") @name(".NoAction") action NoAction_26() { + } + @noWarn("unused") @name(".NoAction") action NoAction_27() { + } + @noWarn("unused") @name(".NoAction") action NoAction_28() { + } + @noWarn("unused") @name(".NoAction") action NoAction_29() { + } + @noWarn("unused") @name(".NoAction") action NoAction_30() { + } + @noWarn("unused") @name(".NoAction") action NoAction_31() { + } + @noWarn("unused") @name(".NoAction") action NoAction_32() { + } + @noWarn("unused") @name(".NoAction") action NoAction_33() { + } + @noWarn("unused") @name(".NoAction") action NoAction_34() { + } + @noWarn("unused") @name(".NoAction") action NoAction_35() { + } + @noWarn("unused") @name(".NoAction") action NoAction_36() { + } + @name(".egress.egress_port_type_normal") action egress_port_type_normal(@name("ifindex") bit<16> ifindex_11) { + meta.egress_metadata.port_type = 2w0; + meta.egress_metadata.ifindex = ifindex_11; + } + @name(".egress.egress_port_type_fabric") action egress_port_type_fabric(@name("ifindex") bit<16> ifindex_12) { + meta.egress_metadata.port_type = 2w1; + meta.tunnel_metadata.egress_tunnel_type = 5w15; + meta.egress_metadata.ifindex = ifindex_12; + } + @name(".egress.egress_port_type_cpu") action egress_port_type_cpu(@name("ifindex") bit<16> ifindex_13) { + meta.egress_metadata.port_type = 2w2; + meta.tunnel_metadata.egress_tunnel_type = 5w16; + meta.egress_metadata.ifindex = ifindex_13; + } + @name(".egress.nop") action nop() { + } + @name(".egress.set_mirror_nhop") action set_mirror_nhop(@name("nhop_idx") bit<16> nhop_idx) { + meta.l3_metadata.nexthop_index = nhop_idx; + } + @name(".egress.set_mirror_bd") action set_mirror_bd(@name("bd") bit<16> bd_17) { + meta.egress_metadata.bd = bd_17; + } + @name(".egress.sflow_pkt_to_cpu") action sflow_pkt_to_cpu() { + hdr.fabric_header_sflow.setValid(); + hdr.fabric_header_sflow.sflow_session_id = meta.sflow_metadata.sflow_session_id; + } + @name(".egress_port_mapping") table egress_port_mapping_0 { + actions = { + egress_port_type_normal(); + egress_port_type_fabric(); + egress_port_type_cpu(); + @defaultonly NoAction_2(); + } + key = { + standard_metadata.egress_port: exact @name("standard_metadata.egress_port"); + } + size = 288; + default_action = NoAction_2(); + } + @name(".mirror") table mirror_0 { + actions = { + nop(); + set_mirror_nhop(); + set_mirror_bd(); + sflow_pkt_to_cpu(); + @defaultonly NoAction_3(); + } + key = { + meta.i2e_metadata.mirror_session_id: exact @name("i2e_metadata.mirror_session_id"); + } + size = 1024; + default_action = NoAction_3(); + } + @name(".process_replication.nop") action _process_replication_nop_0() { + } + @name(".process_replication.nop") action _process_replication_nop_1() { + } + @name(".process_replication.set_replica_copy_bridged") action _process_replication_set_replica_copy_bridged_0() { + meta.egress_metadata.routed = 1w0; + } + @name(".process_replication.outer_replica_from_rid") action _process_replication_outer_replica_from_rid_0(@name("bd") bit<16> bd_18, @name("tunnel_index") bit<14> tunnel_index_9, @name("tunnel_type") bit<5> tunnel_type, @name("header_count") bit<4> header_count) { + meta.egress_metadata.bd = bd_18; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w0; + meta.egress_metadata.routed = meta.l3_metadata.outer_routed; + meta.egress_metadata.same_bd_check = bd_18 ^ meta.ingress_metadata.outer_bd; + meta.tunnel_metadata.tunnel_index = tunnel_index_9; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".process_replication.inner_replica_from_rid") action _process_replication_inner_replica_from_rid_0(@name("bd") bit<16> bd_19, @name("tunnel_index") bit<14> tunnel_index_10, @name("tunnel_type") bit<5> tunnel_type_8, @name("header_count") bit<4> header_count_6) { + meta.egress_metadata.bd = bd_19; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w1; + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.same_bd_check = bd_19 ^ meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index_10; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type_8; + meta.tunnel_metadata.egress_header_count = header_count_6; + } + @name(".replica_type") table _replica_type { + actions = { + _process_replication_nop_0(); + _process_replication_set_replica_copy_bridged_0(); + @defaultonly NoAction_4(); + } + key = { + meta.multicast_metadata.replica : exact @name("multicast_metadata.replica"); + meta.egress_metadata.same_bd_check: ternary @name("egress_metadata.same_bd_check"); + } + size = 512; + default_action = NoAction_4(); + } + @name(".rid") table _rid { + actions = { + _process_replication_nop_1(); + _process_replication_outer_replica_from_rid_0(); + _process_replication_inner_replica_from_rid_0(); + @defaultonly NoAction_5(); + } + key = { + standard_metadata.egress_rid: exact @name("standard_metadata.egress_rid"); + } + size = 1024; + default_action = NoAction_5(); + } + @name(".process_vlan_decap.nop") action _process_vlan_decap_nop_0() { + } + @name(".process_vlan_decap.remove_vlan_single_tagged") action _process_vlan_decap_remove_vlan_single_tagged_0() { + hdr.ethernet.etherType = hdr.vlan_tag_[0].etherType; + hdr.vlan_tag_[0].setInvalid(); + } + @name(".process_vlan_decap.remove_vlan_double_tagged") action _process_vlan_decap_remove_vlan_double_tagged_0() { + hdr.ethernet.etherType = hdr.vlan_tag_[1].etherType; + hdr.vlan_tag_[0].setInvalid(); + hdr.vlan_tag_[1].setInvalid(); + } + @name(".vlan_decap") table _vlan_decap { + actions = { + _process_vlan_decap_nop_0(); + _process_vlan_decap_remove_vlan_single_tagged_0(); + _process_vlan_decap_remove_vlan_double_tagged_0(); + @defaultonly NoAction_6(); + } + key = { + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 1024; + default_action = NoAction_6(); + } + @name(".process_tunnel_decap.decap_inner_udp") action _process_tunnel_decap_decap_inner_udp_0() { + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_tcp") action _process_tunnel_decap_decap_inner_tcp_0() { + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_icmp") action _process_tunnel_decap_decap_inner_icmp_0() { + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_unknown") action _process_tunnel_decap_decap_inner_unknown_0() { + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv4") action _process_tunnel_decap_decap_vxlan_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.vxlan.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv6") action _process_tunnel_decap_decap_vxlan_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_non_ip") action _process_tunnel_decap_decap_vxlan_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv4") action _process_tunnel_decap_decap_genv_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.genv.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv6") action _process_tunnel_decap_decap_genv_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_non_ip") action _process_tunnel_decap_decap_genv_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv4") action _process_tunnel_decap_decap_nvgre_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv6") action _process_tunnel_decap_decap_nvgre_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_non_ip") action _process_tunnel_decap_decap_nvgre_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_gre_inner_ipv4") action _process_tunnel_decap_decap_gre_inner_ipv4_0() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_gre_inner_ipv6") action _process_tunnel_decap_decap_gre_inner_ipv6_0() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_gre_inner_non_ip") action _process_tunnel_decap_decap_gre_inner_non_ip_0() { + hdr.ethernet.etherType = hdr.gre.proto; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_ip_inner_ipv4") action _process_tunnel_decap_decap_ip_inner_ipv4_0() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_ip_inner_ipv6") action _process_tunnel_decap_decap_ip_inner_ipv6_0() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop1") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop1") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop2") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop2") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop3") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop3") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".tunnel_decap_process_inner") table _tunnel_decap_process_inner { + actions = { + _process_tunnel_decap_decap_inner_udp_0(); + _process_tunnel_decap_decap_inner_tcp_0(); + _process_tunnel_decap_decap_inner_icmp_0(); + _process_tunnel_decap_decap_inner_unknown_0(); + @defaultonly NoAction_7(); + } + key = { + hdr.inner_tcp.isValid() : exact @name("inner_tcp.$valid$"); + hdr.inner_udp.isValid() : exact @name("inner_udp.$valid$"); + hdr.inner_icmp.isValid(): exact @name("inner_icmp.$valid$"); + } + size = 1024; + default_action = NoAction_7(); + } + @name(".tunnel_decap_process_outer") table _tunnel_decap_process_outer { + actions = { + _process_tunnel_decap_decap_vxlan_inner_ipv4_0(); + _process_tunnel_decap_decap_vxlan_inner_ipv6_0(); + _process_tunnel_decap_decap_vxlan_inner_non_ip_0(); + _process_tunnel_decap_decap_genv_inner_ipv4_0(); + _process_tunnel_decap_decap_genv_inner_ipv6_0(); + _process_tunnel_decap_decap_genv_inner_non_ip_0(); + _process_tunnel_decap_decap_nvgre_inner_ipv4_0(); + _process_tunnel_decap_decap_nvgre_inner_ipv6_0(); + _process_tunnel_decap_decap_nvgre_inner_non_ip_0(); + _process_tunnel_decap_decap_gre_inner_ipv4_0(); + _process_tunnel_decap_decap_gre_inner_ipv6_0(); + _process_tunnel_decap_decap_gre_inner_non_ip_0(); + _process_tunnel_decap_decap_ip_inner_ipv4_0(); + _process_tunnel_decap_decap_ip_inner_ipv6_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop3_0(); + @defaultonly NoAction_8(); + } + key = { + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_8(); + } + @name(".process_rewrite.nop") action _process_rewrite_nop_0() { + } + @name(".process_rewrite.nop") action _process_rewrite_nop_1() { + } + @name(".process_rewrite.set_l2_rewrite") action _process_rewrite_set_l2_rewrite_0() { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = meta.ingress_metadata.bd; + } + @name(".process_rewrite.set_l2_rewrite_with_tunnel") action _process_rewrite_set_l2_rewrite_with_tunnel_0(@name("tunnel_index") bit<14> tunnel_index_11, @name("tunnel_type") bit<5> tunnel_type_9) { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index_11; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type_9; + } + @name(".process_rewrite.set_l3_rewrite") action _process_rewrite_set_l3_rewrite_0(@name("bd") bit<16> bd_20, @name("mtu_index") bit<8> mtu_index_1, @name("dmac") bit<48> dmac) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd_20; + meta.egress_metadata.outer_bd = bd_20; + meta.l3_metadata.mtu_index = mtu_index_1; + } + @name(".process_rewrite.set_l3_rewrite_with_tunnel") action _process_rewrite_set_l3_rewrite_with_tunnel_0(@name("bd") bit<16> bd_21, @name("dmac") bit<48> dmac_0, @name("tunnel_index") bit<14> tunnel_index_12, @name("tunnel_type") bit<5> tunnel_type_10) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac_0; + meta.egress_metadata.bd = bd_21; + meta.egress_metadata.outer_bd = bd_21; + meta.tunnel_metadata.tunnel_index = tunnel_index_12; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type_10; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l2") action _process_rewrite_set_mpls_swap_push_rewrite_l2_0(@name("label") bit<20> label_2, @name("tunnel_index") bit<14> tunnel_index_13, @name("header_count") bit<4> header_count_7) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + hdr.mpls[0].label = label_2; + meta.tunnel_metadata.tunnel_index = tunnel_index_13; + meta.tunnel_metadata.egress_header_count = header_count_7; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_push_rewrite_l2") action _process_rewrite_set_mpls_push_rewrite_l2_0(@name("tunnel_index") bit<14> tunnel_index_14, @name("header_count") bit<4> header_count_8) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index_14; + meta.tunnel_metadata.egress_header_count = header_count_8; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l3") action _process_rewrite_set_mpls_swap_push_rewrite_l3_0(@name("bd") bit<16> bd_22, @name("dmac") bit<48> dmac_6, @name("label") bit<20> label_3, @name("tunnel_index") bit<14> tunnel_index_15, @name("header_count") bit<4> header_count_9) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = bd_22; + hdr.mpls[0].label = label_3; + meta.egress_metadata.mac_da = dmac_6; + meta.tunnel_metadata.tunnel_index = tunnel_index_15; + meta.tunnel_metadata.egress_header_count = header_count_9; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.set_mpls_push_rewrite_l3") action _process_rewrite_set_mpls_push_rewrite_l3_0(@name("bd") bit<16> bd_23, @name("dmac") bit<48> dmac_7, @name("tunnel_index") bit<14> tunnel_index_16, @name("header_count") bit<4> header_count_10) { + meta.egress_metadata.routed = meta.l3_metadata.routed; + meta.egress_metadata.bd = bd_23; + meta.egress_metadata.mac_da = dmac_7; + meta.tunnel_metadata.tunnel_index = tunnel_index_16; + meta.tunnel_metadata.egress_header_count = header_count_10; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.rewrite_ipv4_multicast") action _process_rewrite_rewrite_ipv4_multicast_0() { + hdr.ethernet.dstAddr[22:0] = hdr.ipv4.dstAddr[22:0]; + } + @name(".process_rewrite.rewrite_ipv6_multicast") action _process_rewrite_rewrite_ipv6_multicast_0() { + } + @name(".rewrite") table _rewrite { + actions = { + _process_rewrite_nop_0(); + _process_rewrite_set_l2_rewrite_0(); + _process_rewrite_set_l2_rewrite_with_tunnel_0(); + _process_rewrite_set_l3_rewrite_0(); + _process_rewrite_set_l3_rewrite_with_tunnel_0(); + _process_rewrite_set_mpls_swap_push_rewrite_l2_0(); + _process_rewrite_set_mpls_push_rewrite_l2_0(); + _process_rewrite_set_mpls_swap_push_rewrite_l3_0(); + _process_rewrite_set_mpls_push_rewrite_l3_0(); + @defaultonly NoAction_9(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction_9(); + } + @name(".rewrite_multicast") table _rewrite_multicast { + actions = { + _process_rewrite_nop_1(); + _process_rewrite_rewrite_ipv4_multicast_0(); + _process_rewrite_rewrite_ipv6_multicast_0(); + @defaultonly NoAction_10(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction_10(); + } + @name(".process_egress_bd.nop") action _process_egress_bd_nop_0() { + } + @name(".process_egress_bd.set_egress_bd_properties") action _process_egress_bd_set_egress_bd_properties_0(@name("smac_idx") bit<9> smac_idx_5) { + meta.egress_metadata.smac_idx = smac_idx_5; + } + @name(".egress_bd_map") table _egress_bd_map { + actions = { + _process_egress_bd_nop_0(); + _process_egress_bd_set_egress_bd_properties_0(); + @defaultonly NoAction_11(); + } + key = { + meta.egress_metadata.bd: exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction_11(); + } + @name(".process_mac_rewrite.nop") action _process_mac_rewrite_nop_0() { + } + @name(".process_mac_rewrite.ipv4_unicast_rewrite") action _process_mac_rewrite_ipv4_unicast_rewrite_0() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv4_multicast_rewrite") action _process_mac_rewrite_ipv4_multicast_rewrite_0() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x1005e000000; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv6_unicast_rewrite") action _process_mac_rewrite_ipv6_unicast_rewrite_0() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.ipv6_multicast_rewrite") action _process_mac_rewrite_ipv6_multicast_rewrite_0() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x333300000000; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.mpls_rewrite") action _process_mac_rewrite_mpls_rewrite_0() { + hdr.ethernet.dstAddr = meta.egress_metadata.mac_da; + hdr.mpls[0].ttl = hdr.mpls[0].ttl + 8w255; + } + @name(".process_mac_rewrite.rewrite_smac") action _process_mac_rewrite_rewrite_smac_0(@name("smac") bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".l3_rewrite") table _l3_rewrite { + actions = { + _process_mac_rewrite_nop_0(); + _process_mac_rewrite_ipv4_unicast_rewrite_0(); + _process_mac_rewrite_ipv4_multicast_rewrite_0(); + _process_mac_rewrite_ipv6_unicast_rewrite_0(); + _process_mac_rewrite_ipv6_multicast_rewrite_0(); + _process_mac_rewrite_mpls_rewrite_0(); + @defaultonly NoAction_12(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.mpls[0].isValid() : exact @name("mpls[0].$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction_12(); + } + @name(".smac_rewrite") table _smac_rewrite { + actions = { + _process_mac_rewrite_rewrite_smac_0(); + @defaultonly NoAction_13(); + } + key = { + meta.egress_metadata.smac_idx: exact @name("egress_metadata.smac_idx"); + } + size = 512; + default_action = NoAction_13(); + } + @name(".process_mtu.mtu_miss") action _process_mtu_mtu_miss_0() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_mtu.ipv4_mtu_check") action _process_mtu_ipv4_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| hdr.ipv4.totalLen; + } + @name(".process_mtu.ipv6_mtu_check") action _process_mtu_ipv6_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu_3) { + meta.l3_metadata.l3_mtu_check = l3_mtu_3 |-| hdr.ipv6.payloadLen; + } + @name(".mtu") table _mtu { + actions = { + _process_mtu_mtu_miss_0(); + _process_mtu_ipv4_mtu_check_0(); + _process_mtu_ipv6_mtu_check_0(); + @defaultonly NoAction_14(); + } + key = { + meta.l3_metadata.mtu_index: exact @name("l3_metadata.mtu_index"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_14(); + } + @name(".process_int_insertion.int_set_header_0_bos") action _process_int_insertion_int_set_header_0_bos_0() { + hdr.int_switch_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_1_bos") action _process_int_insertion_int_set_header_1_bos_0() { + hdr.int_ingress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_2_bos") action _process_int_insertion_int_set_header_2_bos_0() { + hdr.int_hop_latency_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_3_bos") action _process_int_insertion_int_set_header_3_bos_0() { + hdr.int_q_occupancy_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_4_bos") action _process_int_insertion_int_set_header_4_bos_0() { + hdr.int_ingress_tstamp_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_5_bos") action _process_int_insertion_int_set_header_5_bos_0() { + hdr.int_egress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_6_bos") action _process_int_insertion_int_set_header_6_bos_0() { + hdr.int_q_congestion_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_7_bos") action _process_int_insertion_int_set_header_7_bos_0() { + hdr.int_egress_port_tx_utilization_header.bos = 1w1; + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_0() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_1() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_2() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_3() { + } + @name(".process_int_insertion.int_transit") action _process_int_insertion_int_transit_0(@name("switch_id") bit<32> switch_id_2) { + meta.int_metadata.insert_cnt = hdr.int_header.max_hop_cnt - hdr.int_header.total_hop_cnt; + meta.int_metadata.switch_id = switch_id_2; + meta.int_metadata.insert_byte_cnt = meta.int_metadata.instruction_cnt << 2; + meta.int_metadata.gpe_int_hdr_len8 = (bit<8>)hdr.int_header.ins_cnt; + } + @name(".process_int_insertion.int_src") action _process_int_insertion_int_src_0(@name("switch_id") bit<32> switch_id_3, @name("hop_cnt") bit<8> hop_cnt, @name("ins_cnt") bit<5> ins_cnt_1, @name("ins_mask0003") bit<4> ins_mask0003, @name("ins_mask0407") bit<4> ins_mask0407, @name("ins_byte_cnt") bit<16> ins_byte_cnt, @name("total_words") bit<8> total_words) { + meta.int_metadata.insert_cnt = hop_cnt; + meta.int_metadata.switch_id = switch_id_3; + meta.int_metadata.insert_byte_cnt = ins_byte_cnt; + meta.int_metadata.gpe_int_hdr_len8 = total_words; + hdr.int_header.setValid(); + hdr.int_header.ver = 2w0; + hdr.int_header.rep = 2w0; + hdr.int_header.c = 1w0; + hdr.int_header.e = 1w0; + hdr.int_header.rsvd1 = 5w0; + hdr.int_header.ins_cnt = ins_cnt_1; + hdr.int_header.max_hop_cnt = hop_cnt; + hdr.int_header.total_hop_cnt = 8w0; + hdr.int_header.instruction_mask_0003 = ins_mask0003; + hdr.int_header.instruction_mask_0407 = ins_mask0407; + hdr.int_header.instruction_mask_0811 = 4w0; + hdr.int_header.instruction_mask_1215 = 4w0; + hdr.int_header.rsvd2 = 16w0; + } + @name(".process_int_insertion.int_reset") action _process_int_insertion_int_reset_0() { + meta.int_metadata.switch_id = 32w0; + meta.int_metadata.insert_byte_cnt = 16w0; + meta.int_metadata.insert_cnt = 8w0; + meta.int_metadata.gpe_int_hdr_len8 = 8w0; + meta.int_metadata.gpe_int_hdr_len = 16w0; + meta.int_metadata.instruction_cnt = 16w0; + } + @name(".process_int_insertion.int_set_header_0003_i0") action _process_int_insertion_int_set_header_0003_i0_0() { + } + @name(".process_int_insertion.int_set_header_0003_i1") action _process_int_insertion_int_set_header_0003_i1_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + } + @name(".process_int_insertion.int_set_header_0003_i2") action _process_int_insertion_int_set_header_0003_i2_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i3") action _process_int_insertion_int_set_header_0003_i3_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i4") action _process_int_insertion_int_set_header_0003_i4_0() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i5") action _process_int_insertion_int_set_header_0003_i5_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i6") action _process_int_insertion_int_set_header_0003_i6_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i7") action _process_int_insertion_int_set_header_0003_i7_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i8") action _process_int_insertion_int_set_header_0003_i8_0() { + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i9") action _process_int_insertion_int_set_header_0003_i9_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i10") action _process_int_insertion_int_set_header_0003_i10_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i11") action _process_int_insertion_int_set_header_0003_i11_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i12") action _process_int_insertion_int_set_header_0003_i12_0() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i13") action _process_int_insertion_int_set_header_0003_i13_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i14") action _process_int_insertion_int_set_header_0003_i14_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i15") action _process_int_insertion_int_set_header_0003_i15_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta.ingress_metadata.ifindex; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0407_i0") action _process_int_insertion_int_set_header_0407_i0_0() { + } + @name(".process_int_insertion.int_set_header_0407_i1") action _process_int_insertion_int_set_header_0407_i1_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i2") action _process_int_insertion_int_set_header_0407_i2_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i3") action _process_int_insertion_int_set_header_0407_i3_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i4") action _process_int_insertion_int_set_header_0407_i4_0() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i5") action _process_int_insertion_int_set_header_0407_i5_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i6") action _process_int_insertion_int_set_header_0407_i6_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i7") action _process_int_insertion_int_set_header_0407_i7_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i8") action _process_int_insertion_int_set_header_0407_i8_0() { + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i9") action _process_int_insertion_int_set_header_0407_i9_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i10") action _process_int_insertion_int_set_header_0407_i10_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i11") action _process_int_insertion_int_set_header_0407_i11_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i12") action _process_int_insertion_int_set_header_0407_i12_0() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i13") action _process_int_insertion_int_set_header_0407_i13_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i14") action _process_int_insertion_int_set_header_0407_i14_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i15") action _process_int_insertion_int_set_header_0407_i15_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_e_bit") action _process_int_insertion_int_set_e_bit_0() { + hdr.int_header.e = 1w1; + } + @name(".process_int_insertion.int_update_total_hop_cnt") action _process_int_insertion_int_update_total_hop_cnt_0() { + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 8w1; + } + @name(".int_bos") table _int_bos { + actions = { + _process_int_insertion_int_set_header_0_bos_0(); + _process_int_insertion_int_set_header_1_bos_0(); + _process_int_insertion_int_set_header_2_bos_0(); + _process_int_insertion_int_set_header_3_bos_0(); + _process_int_insertion_int_set_header_4_bos_0(); + _process_int_insertion_int_set_header_5_bos_0(); + _process_int_insertion_int_set_header_6_bos_0(); + _process_int_insertion_int_set_header_7_bos_0(); + _process_int_insertion_nop_0(); + @defaultonly NoAction_15(); + } + key = { + hdr.int_header.total_hop_cnt : ternary @name("int_header.total_hop_cnt"); + hdr.int_header.instruction_mask_0003: ternary @name("int_header.instruction_mask_0003"); + hdr.int_header.instruction_mask_0407: ternary @name("int_header.instruction_mask_0407"); + hdr.int_header.instruction_mask_0811: ternary @name("int_header.instruction_mask_0811"); + hdr.int_header.instruction_mask_1215: ternary @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction_15(); + } + @name(".int_insert") table _int_insert { + actions = { + _process_int_insertion_int_transit_0(); + _process_int_insertion_int_src_0(); + _process_int_insertion_int_reset_0(); + @defaultonly NoAction_16(); + } + key = { + meta.int_metadata_i2e.source: ternary @name("int_metadata_i2e.source"); + meta.int_metadata_i2e.sink : ternary @name("int_metadata_i2e.sink"); + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + } + size = 3; + default_action = NoAction_16(); + } + @name(".int_inst_0003") table _int_inst { + actions = { + _process_int_insertion_int_set_header_0003_i0_0(); + _process_int_insertion_int_set_header_0003_i1_0(); + _process_int_insertion_int_set_header_0003_i2_0(); + _process_int_insertion_int_set_header_0003_i3_0(); + _process_int_insertion_int_set_header_0003_i4_0(); + _process_int_insertion_int_set_header_0003_i5_0(); + _process_int_insertion_int_set_header_0003_i6_0(); + _process_int_insertion_int_set_header_0003_i7_0(); + _process_int_insertion_int_set_header_0003_i8_0(); + _process_int_insertion_int_set_header_0003_i9_0(); + _process_int_insertion_int_set_header_0003_i10_0(); + _process_int_insertion_int_set_header_0003_i11_0(); + _process_int_insertion_int_set_header_0003_i12_0(); + _process_int_insertion_int_set_header_0003_i13_0(); + _process_int_insertion_int_set_header_0003_i14_0(); + _process_int_insertion_int_set_header_0003_i15_0(); + @defaultonly NoAction_17(); + } + key = { + hdr.int_header.instruction_mask_0003: exact @name("int_header.instruction_mask_0003"); + } + size = 17; + default_action = NoAction_17(); + } + @name(".int_inst_0407") table _int_inst_0 { + actions = { + _process_int_insertion_int_set_header_0407_i0_0(); + _process_int_insertion_int_set_header_0407_i1_0(); + _process_int_insertion_int_set_header_0407_i2_0(); + _process_int_insertion_int_set_header_0407_i3_0(); + _process_int_insertion_int_set_header_0407_i4_0(); + _process_int_insertion_int_set_header_0407_i5_0(); + _process_int_insertion_int_set_header_0407_i6_0(); + _process_int_insertion_int_set_header_0407_i7_0(); + _process_int_insertion_int_set_header_0407_i8_0(); + _process_int_insertion_int_set_header_0407_i9_0(); + _process_int_insertion_int_set_header_0407_i10_0(); + _process_int_insertion_int_set_header_0407_i11_0(); + _process_int_insertion_int_set_header_0407_i12_0(); + _process_int_insertion_int_set_header_0407_i13_0(); + _process_int_insertion_int_set_header_0407_i14_0(); + _process_int_insertion_int_set_header_0407_i15_0(); + _process_int_insertion_nop_1(); + @defaultonly NoAction_18(); + } + key = { + hdr.int_header.instruction_mask_0407: exact @name("int_header.instruction_mask_0407"); + } + size = 17; + default_action = NoAction_18(); + } + @name(".int_inst_0811") table _int_inst_1 { + actions = { + _process_int_insertion_nop_2(); + @defaultonly NoAction_19(); + } + key = { + hdr.int_header.instruction_mask_0811: exact @name("int_header.instruction_mask_0811"); + } + size = 16; + default_action = NoAction_19(); + } + @name(".int_inst_1215") table _int_inst_2 { + actions = { + _process_int_insertion_nop_3(); + @defaultonly NoAction_20(); + } + key = { + hdr.int_header.instruction_mask_1215: exact @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction_20(); + } + @name(".int_meta_header_update") table _int_meta_header_update { + actions = { + _process_int_insertion_int_set_e_bit_0(); + _process_int_insertion_int_update_total_hop_cnt_0(); + @defaultonly NoAction_21(); + } + key = { + meta.int_metadata.insert_cnt: ternary @name("int_metadata.insert_cnt"); + } + size = 2; + default_action = NoAction_21(); + } + @min_width(32) @name(".egress_bd_stats") direct_counter(CounterType.packets_and_bytes) _egress_bd_stats; + @name(".process_egress_bd_stats.nop_0") action _process_egress_bd_stats_nop_0() { + _egress_bd_stats.count(); + } + @name(".egress_bd_stats") table _egress_bd_stats_0 { + actions = { + _process_egress_bd_stats_nop_0(); + @defaultonly NoAction_22(); + } + key = { + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + meta.l2_metadata.lkp_pkt_type: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + counters = _egress_bd_stats; + default_action = NoAction_22(); + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_0() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_1() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_2() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_3() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_4() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_5() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_6() { + } + @name(".process_tunnel_encap.set_egress_tunnel_vni") action _process_tunnel_encap_set_egress_tunnel_vni_0(@name("vnid") bit<24> vnid_1) { + meta.tunnel_metadata.vnid = vnid_1; + } + @name(".process_tunnel_encap.rewrite_tunnel_dmac") action _process_tunnel_encap_rewrite_tunnel_dmac_0(@name("dmac") bit<48> dmac_8) { + hdr.ethernet.dstAddr = dmac_8; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_dst") action _process_tunnel_encap_rewrite_tunnel_ipv4_dst_0(@name("ip") bit<32> ip) { + hdr.ipv4.dstAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_dst") action _process_tunnel_encap_rewrite_tunnel_ipv6_dst_0(@name("ip") bit<128> ip_4) { + hdr.ipv6.dstAddr = ip_4; + } + @name(".process_tunnel_encap.inner_ipv4_udp_rewrite") action _process_tunnel_encap_inner_ipv4_udp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.udp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_tcp_rewrite") action _process_tunnel_encap_inner_ipv4_tcp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.tcp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_icmp_rewrite") action _process_tunnel_encap_inner_ipv4_icmp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.icmp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_unknown_rewrite") action _process_tunnel_encap_inner_ipv4_unknown_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + meta.egress_metadata.payload_length = hdr.ipv4.totalLen; + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv6_udp_rewrite") action _process_tunnel_encap_inner_ipv6_udp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_tcp_rewrite") action _process_tunnel_encap_inner_ipv6_tcp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.tcp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_icmp_rewrite") action _process_tunnel_encap_inner_ipv6_icmp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.icmp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_unknown_rewrite") action _process_tunnel_encap_inner_ipv6_unknown_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + meta.egress_metadata.payload_length = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_non_ip_rewrite") action _process_tunnel_encap_inner_non_ip_rewrite_0() { + meta.egress_metadata.payload_length = (bit<16>)standard_metadata.packet_length + 16w65522; + } + @name(".process_tunnel_encap.ipv4_vxlan_rewrite") action _process_tunnel_encap_ipv4_vxlan_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = meta.tunnel_metadata.vnid; + hdr.vxlan.reserved2 = 8w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w17; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_genv_rewrite") action _process_tunnel_encap_ipv4_genv_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = meta.tunnel_metadata.vnid; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w17; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_nvgre_rewrite") action _process_tunnel_encap_ipv4_nvgre_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = meta.tunnel_metadata.vnid; + hdr.nvgre.flow_id = meta.hash_metadata.entropy_hash[7:0]; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w42; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_gre_rewrite") action _process_tunnel_encap_ipv4_gre_rewrite_0() { + hdr.gre.setValid(); + hdr.gre.proto = hdr.ethernet.etherType; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w24; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_ip_rewrite") action _process_tunnel_encap_ipv4_ip_rewrite_0() { + hdr.ipv4.setValid(); + hdr.ipv4.protocol = meta.tunnel_metadata.inner_ip_proto; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w20; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_erspan_t3_rewrite") action _process_tunnel_encap_ipv4_erspan_t3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = meta.i2e_metadata.ingress_tstamp; + hdr.erspan_t3_header.span_id = (bit<10>)meta.i2e_metadata.mirror_session_id; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta.egress_metadata.payload_length + 16w50; + } + @name(".process_tunnel_encap.ipv6_gre_rewrite") action _process_tunnel_encap_ipv6_gre_rewrite_0() { + hdr.gre.setValid(); + hdr.gre.proto = hdr.ethernet.etherType; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w4; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_ip_rewrite") action _process_tunnel_encap_ipv6_ip_rewrite_0() { + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = meta.tunnel_metadata.inner_ip_proto; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_nvgre_rewrite") action _process_tunnel_encap_ipv6_nvgre_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = meta.tunnel_metadata.vnid; + hdr.nvgre.flow_id = meta.hash_metadata.entropy_hash[7:0]; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w22; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_vxlan_rewrite") action _process_tunnel_encap_ipv6_vxlan_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = meta.tunnel_metadata.vnid; + hdr.vxlan.reserved2 = 8w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w17; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_genv_rewrite") action _process_tunnel_encap_ipv6_genv_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta.egress_metadata.payload_length + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = meta.tunnel_metadata.vnid; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w17; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_erspan_t3_rewrite") action _process_tunnel_encap_ipv6_erspan_t3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = meta.i2e_metadata.ingress_tstamp; + hdr.erspan_t3_header.span_id = (bit<10>)meta.i2e_metadata.mirror_session_id; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta.egress_metadata.payload_length + 16w26; + } + @name(".process_tunnel_encap.mpls_ethernet_push1_rewrite") action _process_tunnel_encap_mpls_ethernet_push1_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push1_rewrite") action _process_tunnel_encap_mpls_ip_push1_rewrite_0() { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push2_rewrite") action _process_tunnel_encap_mpls_ethernet_push2_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push2_rewrite") action _process_tunnel_encap_mpls_ip_push2_rewrite_0() { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push3_rewrite") action _process_tunnel_encap_mpls_ethernet_push3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push3_rewrite") action _process_tunnel_encap_mpls_ip_push3_rewrite_0() { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.fabric_rewrite") action _process_tunnel_encap_fabric_rewrite_0(@name("tunnel_index") bit<14> tunnel_index_17) { + meta.tunnel_metadata.tunnel_index = tunnel_index_17; + } + @name(".process_tunnel_encap.tunnel_mtu_check") action _process_tunnel_encap_tunnel_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu_4) { + meta.l3_metadata.l3_mtu_check = l3_mtu_4 |-| meta.egress_metadata.payload_length; + } + @name(".process_tunnel_encap.tunnel_mtu_miss") action _process_tunnel_encap_tunnel_mtu_miss_0() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_tunnel_encap.set_tunnel_rewrite_details") action _process_tunnel_encap_set_tunnel_rewrite_details_0(@name("outer_bd") bit<16> outer_bd_1, @name("smac_idx") bit<9> smac_idx_6, @name("dmac_idx") bit<14> dmac_idx, @name("sip_index") bit<9> sip_index, @name("dip_index") bit<14> dip_index) { + meta.egress_metadata.outer_bd = outer_bd_1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx_6; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + meta.tunnel_metadata.tunnel_src_index = sip_index; + meta.tunnel_metadata.tunnel_dst_index = dip_index; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push1") action _process_tunnel_encap_set_mpls_rewrite_push1_0(@name("label1") bit<20> label1, @name("exp1") bit<3> exp1, @name("ttl1") bit<8> ttl1, @name("smac_idx") bit<9> smac_idx_7, @name("dmac_idx") bit<14> dmac_idx_4) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].bos = 1w0x1; + hdr.mpls[0].ttl = ttl1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx_7; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx_4; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push2") action _process_tunnel_encap_set_mpls_rewrite_push2_0(@name("label1") bit<20> label1_3, @name("exp1") bit<3> exp1_3, @name("ttl1") bit<8> ttl1_3, @name("label2") bit<20> label2, @name("exp2") bit<3> exp2, @name("ttl2") bit<8> ttl2, @name("smac_idx") bit<9> smac_idx_8, @name("dmac_idx") bit<14> dmac_idx_5) { + hdr.mpls[0].label = label1_3; + hdr.mpls[0].exp = exp1_3; + hdr.mpls[0].ttl = ttl1_3; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx_8; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx_5; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push3") action _process_tunnel_encap_set_mpls_rewrite_push3_0(@name("label1") bit<20> label1_4, @name("exp1") bit<3> exp1_4, @name("ttl1") bit<8> ttl1_4, @name("label2") bit<20> label2_2, @name("exp2") bit<3> exp2_2, @name("ttl2") bit<8> ttl2_2, @name("label3") bit<20> label3, @name("exp3") bit<3> exp3, @name("ttl3") bit<8> ttl3, @name("smac_idx") bit<9> smac_idx_9, @name("dmac_idx") bit<14> dmac_idx_6) { + hdr.mpls[0].label = label1_4; + hdr.mpls[0].exp = exp1_4; + hdr.mpls[0].ttl = ttl1_4; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2_2; + hdr.mpls[1].exp = exp2_2; + hdr.mpls[1].ttl = ttl2_2; + hdr.mpls[1].bos = 1w0x0; + hdr.mpls[2].label = label3; + hdr.mpls[2].exp = exp3; + hdr.mpls[2].ttl = ttl3; + hdr.mpls[2].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx_9; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx_6; + } + @name(".process_tunnel_encap.cpu_rx_rewrite") action _process_tunnel_encap_cpu_rx_rewrite_0() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w5; + hdr.fabric_header_cpu.setValid(); + hdr.fabric_header_cpu.ingressPort = (bit<16>)meta.ingress_metadata.ingress_port; + hdr.fabric_header_cpu.ingressIfindex = meta.ingress_metadata.ifindex; + hdr.fabric_header_cpu.ingressBd = meta.ingress_metadata.bd; + hdr.fabric_header_cpu.reasonCode = meta.fabric_metadata.reason_code; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_unicast_rewrite") action _process_tunnel_encap_fabric_unicast_rewrite_0() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w1; + hdr.fabric_header.dstDevice = meta.fabric_metadata.dst_device; + hdr.fabric_header.dstPortOrGroup = meta.fabric_metadata.dst_port; + hdr.fabric_header_unicast.setValid(); + hdr.fabric_header_unicast.tunnelTerminate = meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_unicast.routed = meta.l3_metadata.routed; + hdr.fabric_header_unicast.outerRouted = meta.l3_metadata.outer_routed; + hdr.fabric_header_unicast.ingressTunnelType = meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_unicast.nexthopIndex = meta.l3_metadata.nexthop_index; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_multicast_rewrite") action _process_tunnel_encap_fabric_multicast_rewrite_0(@name("fabric_mgid") bit<16> fabric_mgid) { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w2; + hdr.fabric_header.dstDevice = 8w127; + hdr.fabric_header.dstPortOrGroup = fabric_mgid; + hdr.fabric_header_multicast.ingressIfindex = meta.ingress_metadata.ifindex; + hdr.fabric_header_multicast.ingressBd = meta.ingress_metadata.bd; + hdr.fabric_header_multicast.setValid(); + hdr.fabric_header_multicast.tunnelTerminate = meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_multicast.routed = meta.l3_metadata.routed; + hdr.fabric_header_multicast.outerRouted = meta.l3_metadata.outer_routed; + hdr.fabric_header_multicast.ingressTunnelType = meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_multicast.mcastGrp = meta.multicast_metadata.mcast_grp; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.rewrite_tunnel_smac") action _process_tunnel_encap_rewrite_tunnel_smac_0(@name("smac") bit<48> smac_0) { + hdr.ethernet.srcAddr = smac_0; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_src") action _process_tunnel_encap_rewrite_tunnel_ipv4_src_0(@name("ip") bit<32> ip_5) { + hdr.ipv4.srcAddr = ip_5; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_src") action _process_tunnel_encap_rewrite_tunnel_ipv6_src_0(@name("ip") bit<128> ip_6) { + hdr.ipv6.srcAddr = ip_6; + } + @name(".egress_vni") table _egress_vni { + actions = { + _process_tunnel_encap_nop_0(); + _process_tunnel_encap_set_egress_tunnel_vni_0(); + @defaultonly NoAction_23(); + } + key = { + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + meta.tunnel_metadata.egress_tunnel_type: exact @name("tunnel_metadata.egress_tunnel_type"); + } + size = 1024; + default_action = NoAction_23(); + } + @name(".tunnel_dmac_rewrite") table _tunnel_dmac_rewrite { + actions = { + _process_tunnel_encap_nop_1(); + _process_tunnel_encap_rewrite_tunnel_dmac_0(); + @defaultonly NoAction_24(); + } + key = { + meta.tunnel_metadata.tunnel_dmac_index: exact @name("tunnel_metadata.tunnel_dmac_index"); + } + size = 1024; + default_action = NoAction_24(); + } + @name(".tunnel_dst_rewrite") table _tunnel_dst_rewrite { + actions = { + _process_tunnel_encap_nop_2(); + _process_tunnel_encap_rewrite_tunnel_ipv4_dst_0(); + _process_tunnel_encap_rewrite_tunnel_ipv6_dst_0(); + @defaultonly NoAction_25(); + } + key = { + meta.tunnel_metadata.tunnel_dst_index: exact @name("tunnel_metadata.tunnel_dst_index"); + } + size = 1024; + default_action = NoAction_25(); + } + @name(".tunnel_encap_process_inner") table _tunnel_encap_process_inner { + actions = { + _process_tunnel_encap_inner_ipv4_udp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_tcp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_icmp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_unknown_rewrite_0(); + _process_tunnel_encap_inner_ipv6_udp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_tcp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_icmp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_unknown_rewrite_0(); + _process_tunnel_encap_inner_non_ip_rewrite_0(); + @defaultonly NoAction_26(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + hdr.tcp.isValid() : exact @name("tcp.$valid$"); + hdr.udp.isValid() : exact @name("udp.$valid$"); + hdr.icmp.isValid(): exact @name("icmp.$valid$"); + } + size = 1024; + default_action = NoAction_26(); + } + @name(".tunnel_encap_process_outer") table _tunnel_encap_process_outer { + actions = { + _process_tunnel_encap_nop_3(); + _process_tunnel_encap_ipv4_vxlan_rewrite_0(); + _process_tunnel_encap_ipv4_genv_rewrite_0(); + _process_tunnel_encap_ipv4_nvgre_rewrite_0(); + _process_tunnel_encap_ipv4_gre_rewrite_0(); + _process_tunnel_encap_ipv4_ip_rewrite_0(); + _process_tunnel_encap_ipv4_erspan_t3_rewrite_0(); + _process_tunnel_encap_ipv6_gre_rewrite_0(); + _process_tunnel_encap_ipv6_ip_rewrite_0(); + _process_tunnel_encap_ipv6_nvgre_rewrite_0(); + _process_tunnel_encap_ipv6_vxlan_rewrite_0(); + _process_tunnel_encap_ipv6_genv_rewrite_0(); + _process_tunnel_encap_ipv6_erspan_t3_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push1_rewrite_0(); + _process_tunnel_encap_mpls_ip_push1_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push2_rewrite_0(); + _process_tunnel_encap_mpls_ip_push2_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push3_rewrite_0(); + _process_tunnel_encap_mpls_ip_push3_rewrite_0(); + _process_tunnel_encap_fabric_rewrite_0(); + @defaultonly NoAction_27(); + } + key = { + meta.tunnel_metadata.egress_tunnel_type : exact @name("tunnel_metadata.egress_tunnel_type"); + meta.tunnel_metadata.egress_header_count: exact @name("tunnel_metadata.egress_header_count"); + meta.multicast_metadata.replica : exact @name("multicast_metadata.replica"); + } + size = 1024; + default_action = NoAction_27(); + } + @name(".tunnel_mtu") table _tunnel_mtu { + actions = { + _process_tunnel_encap_tunnel_mtu_check_0(); + _process_tunnel_encap_tunnel_mtu_miss_0(); + @defaultonly NoAction_28(); + } + key = { + meta.tunnel_metadata.tunnel_index: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction_28(); + } + @name(".tunnel_rewrite") table _tunnel_rewrite { + actions = { + _process_tunnel_encap_nop_4(); + _process_tunnel_encap_set_tunnel_rewrite_details_0(); + _process_tunnel_encap_set_mpls_rewrite_push1_0(); + _process_tunnel_encap_set_mpls_rewrite_push2_0(); + _process_tunnel_encap_set_mpls_rewrite_push3_0(); + _process_tunnel_encap_cpu_rx_rewrite_0(); + _process_tunnel_encap_fabric_unicast_rewrite_0(); + _process_tunnel_encap_fabric_multicast_rewrite_0(); + @defaultonly NoAction_29(); + } + key = { + meta.tunnel_metadata.tunnel_index: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction_29(); + } + @name(".tunnel_smac_rewrite") table _tunnel_smac_rewrite { + actions = { + _process_tunnel_encap_nop_5(); + _process_tunnel_encap_rewrite_tunnel_smac_0(); + @defaultonly NoAction_30(); + } + key = { + meta.tunnel_metadata.tunnel_smac_index: exact @name("tunnel_metadata.tunnel_smac_index"); + } + size = 1024; + default_action = NoAction_30(); + } + @name(".tunnel_src_rewrite") table _tunnel_src_rewrite { + actions = { + _process_tunnel_encap_nop_6(); + _process_tunnel_encap_rewrite_tunnel_ipv4_src_0(); + _process_tunnel_encap_rewrite_tunnel_ipv6_src_0(); + @defaultonly NoAction_31(); + } + key = { + meta.tunnel_metadata.tunnel_src_index: exact @name("tunnel_metadata.tunnel_src_index"); + } + size = 1024; + default_action = NoAction_31(); + } + @name(".process_int_outer_encap.int_update_vxlan_gpe_ipv4") action _process_int_outer_encap_int_update_vxlan_gpe_ipv4_0() { + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + meta.int_metadata.insert_byte_cnt; + hdr.vxlan_gpe_int_header.len = hdr.vxlan_gpe_int_header.len + meta.int_metadata.gpe_int_hdr_len8; + } + @name(".process_int_outer_encap.int_add_update_vxlan_gpe_ipv4") action _process_int_outer_encap_int_add_update_vxlan_gpe_ipv4_0() { + hdr.vxlan_gpe_int_header.setValid(); + hdr.vxlan_gpe_int_header.int_type = 8w0x1; + hdr.vxlan_gpe_int_header.next_proto = 8w3; + hdr.vxlan_gpe.next_proto = 8w5; + hdr.vxlan_gpe_int_header.len = meta.int_metadata.gpe_int_hdr_len8; + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_outer_encap.nop") action _process_int_outer_encap_nop_0() { + } + @name(".int_outer_encap") table _int_outer_encap { + actions = { + _process_int_outer_encap_int_update_vxlan_gpe_ipv4_0(); + _process_int_outer_encap_int_add_update_vxlan_gpe_ipv4_0(); + _process_int_outer_encap_nop_0(); + @defaultonly NoAction_32(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.vxlan_gpe.isValid() : exact @name("vxlan_gpe.$valid$"); + meta.int_metadata_i2e.source : exact @name("int_metadata_i2e.source"); + meta.tunnel_metadata.egress_tunnel_type: ternary @name("tunnel_metadata.egress_tunnel_type"); + } + size = 8; + default_action = NoAction_32(); + } + @name(".process_vlan_xlate.set_egress_packet_vlan_untagged") action _process_vlan_xlate_set_egress_packet_vlan_untagged_0() { + } + @name(".process_vlan_xlate.set_egress_packet_vlan_tagged") action _process_vlan_xlate_set_egress_packet_vlan_tagged_0(@name("vlan_id") bit<12> vlan_id) { + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[0].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[0].vid = vlan_id; + hdr.ethernet.etherType = 16w0x8100; + } + @name(".process_vlan_xlate.set_egress_packet_vlan_double_tagged") action _process_vlan_xlate_set_egress_packet_vlan_double_tagged_0(@name("s_tag") bit<12> s_tag, @name("c_tag") bit<12> c_tag) { + hdr.vlan_tag_[1].setValid(); + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[1].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[1].vid = c_tag; + hdr.vlan_tag_[0].etherType = 16w0x8100; + hdr.vlan_tag_[0].vid = s_tag; + hdr.ethernet.etherType = 16w0x9100; + } + @name(".egress_vlan_xlate") table _egress_vlan_xlate { + actions = { + _process_vlan_xlate_set_egress_packet_vlan_untagged_0(); + _process_vlan_xlate_set_egress_packet_vlan_tagged_0(); + _process_vlan_xlate_set_egress_packet_vlan_double_tagged_0(); + @defaultonly NoAction_33(); + } + key = { + meta.egress_metadata.ifindex: exact @name("egress_metadata.ifindex"); + meta.egress_metadata.bd : exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction_33(); + } + @name(".process_egress_filter.egress_filter_check") action _process_egress_filter_egress_filter_check_0() { + meta.egress_filter_metadata.ifindex_check = meta.ingress_metadata.ifindex ^ meta.egress_metadata.ifindex; + meta.egress_filter_metadata.bd = meta.ingress_metadata.outer_bd ^ meta.egress_metadata.outer_bd; + meta.egress_filter_metadata.inner_bd = meta.ingress_metadata.bd ^ meta.egress_metadata.bd; + } + @name(".process_egress_filter.set_egress_filter_drop") action _process_egress_filter_set_egress_filter_drop_0() { + mark_to_drop(standard_metadata); + } + @name(".egress_filter") table _egress_filter { + actions = { + _process_egress_filter_egress_filter_check_0(); + @defaultonly NoAction_34(); + } + default_action = NoAction_34(); + } + @name(".egress_filter_drop") table _egress_filter_drop { + actions = { + _process_egress_filter_set_egress_filter_drop_0(); + @defaultonly NoAction_35(); + } + default_action = NoAction_35(); + } + @name(".process_egress_acl.nop") action _process_egress_acl_nop_0() { + } + @name(".process_egress_acl.egress_mirror") action _process_egress_acl_egress_mirror_0(@name("session_id") bit<32> session_id) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + clone_preserving_field_list(CloneType.E2E, session_id, 8w3); + } + @name(".process_egress_acl.egress_mirror_drop") action _process_egress_acl_egress_mirror_drop_0(@name("session_id") bit<32> session_id_6) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id_6; + clone_preserving_field_list(CloneType.E2E, session_id_6, 8w3); + mark_to_drop(standard_metadata); + } + @name(".process_egress_acl.egress_redirect_to_cpu") action _process_egress_acl_egress_redirect_to_cpu_0(@name("reason_code") bit<16> reason_code_0) { + meta.fabric_metadata.reason_code = reason_code_0; + clone_preserving_field_list(CloneType.E2E, 32w250, 8w2); + mark_to_drop(standard_metadata); + } + @name(".egress_acl") table _egress_acl { + actions = { + _process_egress_acl_nop_0(); + _process_egress_acl_egress_mirror_0(); + _process_egress_acl_egress_mirror_drop_0(); + _process_egress_acl_egress_redirect_to_cpu_0(); + @defaultonly NoAction_36(); + } + key = { + standard_metadata.egress_port: ternary @name("standard_metadata.egress_port"); + meta.l3_metadata.l3_mtu_check: ternary @name("l3_metadata.l3_mtu_check"); + } + size = 512; + default_action = NoAction_36(); + } + apply { + if (meta.egress_metadata.bypass == 1w0) { + if (standard_metadata.instance_type != 32w0 && standard_metadata.instance_type != 32w5) { + mirror_0.apply(); + } else if (standard_metadata.egress_rid != 16w0) { + _rid.apply(); + _replica_type.apply(); + } + switch (egress_port_mapping_0.apply().action_run) { + egress_port_type_normal: { + if (standard_metadata.instance_type == 32w0 || standard_metadata.instance_type == 32w5) { + _vlan_decap.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w1) { + if (meta.multicast_metadata.inner_replica == 1w1 || meta.multicast_metadata.replica == 1w0) { + _tunnel_decap_process_outer.apply(); + _tunnel_decap_process_inner.apply(); + } + } + if (meta.egress_metadata.routed == 1w0 || meta.l3_metadata.nexthop_index != 16w0) { + _rewrite.apply(); + } else { + _rewrite_multicast.apply(); + } + _egress_bd_map.apply(); + if (meta.egress_metadata.routed == 1w1) { + _l3_rewrite.apply(); + _smac_rewrite.apply(); + } + _mtu.apply(); + switch (_int_insert.apply().action_run) { + _process_int_insertion_int_transit_0: { + if (meta.int_metadata.insert_cnt != 8w0) { + _int_inst.apply(); + _int_inst_0.apply(); + _int_inst_1.apply(); + _int_inst_2.apply(); + _int_bos.apply(); + } + _int_meta_header_update.apply(); + } + default: { + } + } + _egress_bd_stats_0.apply(); + } + default: { + } + } + if (meta.fabric_metadata.fabric_header_present == 1w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0) { + _egress_vni.apply(); + if (meta.tunnel_metadata.egress_tunnel_type != 5w15 && meta.tunnel_metadata.egress_tunnel_type != 5w16) { + _tunnel_encap_process_inner.apply(); + } + _tunnel_encap_process_outer.apply(); + _tunnel_rewrite.apply(); + _tunnel_mtu.apply(); + _tunnel_src_rewrite.apply(); + _tunnel_dst_rewrite.apply(); + _tunnel_smac_rewrite.apply(); + _tunnel_dmac_rewrite.apply(); + } + if (meta.int_metadata.insert_cnt != 8w0) { + _int_outer_encap.apply(); + } + if (meta.egress_metadata.port_type == 2w0) { + _egress_vlan_xlate.apply(); + } + _egress_filter.apply(); + if (meta.multicast_metadata.inner_replica == 1w1) { + if (meta.tunnel_metadata.ingress_tunnel_type == 5w0 && meta.tunnel_metadata.egress_tunnel_type == 5w0 && meta.egress_filter_metadata.bd == 16w0 && meta.egress_filter_metadata.ifindex_check == 16w0 || meta.tunnel_metadata.ingress_tunnel_type != 5w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0 && meta.egress_filter_metadata.inner_bd == 16w0) { + _egress_filter_drop.apply(); + } + } + } + if (meta.egress_metadata.bypass == 1w0) { + _egress_acl.apply(); + } + } +} + +@name(".storm_control_meter") meter>(32w1024, MeterType.bytes) storm_control_meter; +@name(".ingress_bd_stats_count") @min_width(32) counter>(32w1024, CounterType.packets_and_bytes) ingress_bd_stats_count; +@name(".acl_stats_count") @min_width(16) counter>(32w1024, CounterType.packets_and_bytes) acl_stats_count; +@name("mac_learn_digest") struct mac_learn_digest { + bit<16> bd; + bit<48> lkp_mac_sa; + bit<16> ifindex; +} + +@name(".drop_stats") counter>(32w1024, CounterType.packets) drop_stats; +@name(".drop_stats_2") counter>(32w1024, CounterType.packets) drop_stats_2; +control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @noWarn("unused") @name(".NoAction") action NoAction_37() { + } + @noWarn("unused") @name(".NoAction") action NoAction_38() { + } + @noWarn("unused") @name(".NoAction") action NoAction_39() { + } + @noWarn("unused") @name(".NoAction") action NoAction_40() { + } + @noWarn("unused") @name(".NoAction") action NoAction_41() { + } + @noWarn("unused") @name(".NoAction") action NoAction_42() { + } + @noWarn("unused") @name(".NoAction") action NoAction_43() { + } + @noWarn("unused") @name(".NoAction") action NoAction_44() { + } + @noWarn("unused") @name(".NoAction") action NoAction_45() { + } + @noWarn("unused") @name(".NoAction") action NoAction_46() { + } + @noWarn("unused") @name(".NoAction") action NoAction_47() { + } + @noWarn("unused") @name(".NoAction") action NoAction_48() { + } + @noWarn("unused") @name(".NoAction") action NoAction_49() { + } + @noWarn("unused") @name(".NoAction") action NoAction_50() { + } + @noWarn("unused") @name(".NoAction") action NoAction_51() { + } + @noWarn("unused") @name(".NoAction") action NoAction_52() { + } + @noWarn("unused") @name(".NoAction") action NoAction_53() { + } + @noWarn("unused") @name(".NoAction") action NoAction_54() { + } + @noWarn("unused") @name(".NoAction") action NoAction_55() { + } + @noWarn("unused") @name(".NoAction") action NoAction_56() { + } + @noWarn("unused") @name(".NoAction") action NoAction_57() { + } + @noWarn("unused") @name(".NoAction") action NoAction_58() { + } + @noWarn("unused") @name(".NoAction") action NoAction_59() { + } + @noWarn("unused") @name(".NoAction") action NoAction_60() { + } + @noWarn("unused") @name(".NoAction") action NoAction_61() { + } + @noWarn("unused") @name(".NoAction") action NoAction_62() { + } + @noWarn("unused") @name(".NoAction") action NoAction_63() { + } + @noWarn("unused") @name(".NoAction") action NoAction_64() { + } + @noWarn("unused") @name(".NoAction") action NoAction_65() { + } + @noWarn("unused") @name(".NoAction") action NoAction_66() { + } + @noWarn("unused") @name(".NoAction") action NoAction_67() { + } + @noWarn("unused") @name(".NoAction") action NoAction_68() { + } + @noWarn("unused") @name(".NoAction") action NoAction_69() { + } + @noWarn("unused") @name(".NoAction") action NoAction_70() { + } + @noWarn("unused") @name(".NoAction") action NoAction_71() { + } + @noWarn("unused") @name(".NoAction") action NoAction_72() { + } + @noWarn("unused") @name(".NoAction") action NoAction_73() { + } + @noWarn("unused") @name(".NoAction") action NoAction_74() { + } + @noWarn("unused") @name(".NoAction") action NoAction_75() { + } + @noWarn("unused") @name(".NoAction") action NoAction_76() { + } + @noWarn("unused") @name(".NoAction") action NoAction_77() { + } + @noWarn("unused") @name(".NoAction") action NoAction_78() { + } + @noWarn("unused") @name(".NoAction") action NoAction_79() { + } + @noWarn("unused") @name(".NoAction") action NoAction_80() { + } + @noWarn("unused") @name(".NoAction") action NoAction_81() { + } + @noWarn("unused") @name(".NoAction") action NoAction_82() { + } + @noWarn("unused") @name(".NoAction") action NoAction_83() { + } + @noWarn("unused") @name(".NoAction") action NoAction_84() { + } + @noWarn("unused") @name(".NoAction") action NoAction_85() { + } + @noWarn("unused") @name(".NoAction") action NoAction_86() { + } + @noWarn("unused") @name(".NoAction") action NoAction_87() { + } + @noWarn("unused") @name(".NoAction") action NoAction_88() { + } + @noWarn("unused") @name(".NoAction") action NoAction_89() { + } + @noWarn("unused") @name(".NoAction") action NoAction_90() { + } + @noWarn("unused") @name(".NoAction") action NoAction_91() { + } + @noWarn("unused") @name(".NoAction") action NoAction_92() { + } + @noWarn("unused") @name(".NoAction") action NoAction_93() { + } + @noWarn("unused") @name(".NoAction") action NoAction_94() { + } + @noWarn("unused") @name(".NoAction") action NoAction_95() { + } + @noWarn("unused") @name(".NoAction") action NoAction_96() { + } + @noWarn("unused") @name(".NoAction") action NoAction_97() { + } + @noWarn("unused") @name(".NoAction") action NoAction_98() { + } + @noWarn("unused") @name(".NoAction") action NoAction_99() { + } + @noWarn("unused") @name(".NoAction") action NoAction_100() { + } + @noWarn("unused") @name(".NoAction") action NoAction_101() { + } + @noWarn("unused") @name(".NoAction") action NoAction_102() { + } + @noWarn("unused") @name(".NoAction") action NoAction_103() { + } + @noWarn("unused") @name(".NoAction") action NoAction_104() { + } + @noWarn("unused") @name(".NoAction") action NoAction_105() { + } + @noWarn("unused") @name(".NoAction") action NoAction_106() { + } + @noWarn("unused") @name(".NoAction") action NoAction_107() { + } + @noWarn("unused") @name(".NoAction") action NoAction_108() { + } + @noWarn("unused") @name(".NoAction") action NoAction_109() { + } + @noWarn("unused") @name(".NoAction") action NoAction_110() { + } + @noWarn("unused") @name(".NoAction") action NoAction_111() { + } + @noWarn("unused") @name(".NoAction") action NoAction_112() { + } + @noWarn("unused") @name(".NoAction") action NoAction_113() { + } + @noWarn("unused") @name(".NoAction") action NoAction_114() { + } + @name(".ingress.rmac_hit") action rmac_hit_1() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".ingress.rmac_miss") action rmac_miss() { + meta.l3_metadata.rmac_hit = 1w0; + } + @name(".rmac") table rmac_0 { + actions = { + rmac_hit_1(); + rmac_miss(); + @defaultonly NoAction_37(); + } + key = { + meta.l3_metadata.rmac_group: exact @name("l3_metadata.rmac_group"); + meta.l2_metadata.lkp_mac_da: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction_37(); + } + @name(".process_ingress_port_mapping.set_ifindex") action _process_ingress_port_mapping_set_ifindex_0(@name("ifindex") bit<16> ifindex_14, @name("port_type") bit<2> port_type_1) { + meta.ingress_metadata.ifindex = ifindex_14; + meta.ingress_metadata.port_type = port_type_1; + } + @name(".process_ingress_port_mapping.set_ingress_port_properties") action _process_ingress_port_mapping_set_ingress_port_properties_0(@name("if_label") bit<16> if_label_1) { + meta.acl_metadata.if_label = if_label_1; + } + @name(".ingress_port_mapping") table _ingress_port_mapping { + actions = { + _process_ingress_port_mapping_set_ifindex_0(); + @defaultonly NoAction_38(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction_38(); + } + @name(".ingress_port_properties") table _ingress_port_properties { + actions = { + _process_ingress_port_mapping_set_ingress_port_properties_0(); + @defaultonly NoAction_39(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction_39(); + } + @name(".process_validate_outer_header.malformed_outer_ethernet_packet") action _process_validate_outer_header_malformed_outer_ethernet_packet_0(@name("drop_reason") bit<8> drop_reason_5) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason_5; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_untagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_untagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_single_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_double_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_qinq_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_untagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_untagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_single_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_double_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_qinq_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_untagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_untagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_single_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_double_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_qinq_tagged_0() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".validate_outer_ethernet") table _validate_outer_ethernet { + actions = { + _process_validate_outer_header_malformed_outer_ethernet_packet_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_qinq_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_qinq_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_qinq_tagged_0(); + @defaultonly NoAction_40(); + } + key = { + hdr.ethernet.srcAddr : ternary @name("ethernet.srcAddr"); + hdr.ethernet.dstAddr : ternary @name("ethernet.dstAddr"); + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 512; + default_action = NoAction_40(); + } + @name(".validate_outer_ipv4_header.set_valid_outer_ipv4_packet") action _validate_outer_ipv4_header_set_valid_outer_ipv4_packet() { + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_tc = hdr.ipv4.diffserv; + meta.l3_metadata.lkp_ip_version = hdr.ipv4.version; + } + @name(".validate_outer_ipv4_header.set_malformed_outer_ipv4_packet") action _validate_outer_ipv4_header_set_malformed_outer_ipv4_packet(@name("drop_reason") bit<8> drop_reason_6) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason_6; + } + @name(".validate_outer_ipv4_packet") table _validate_outer_ipv4_packet_0 { + actions = { + _validate_outer_ipv4_header_set_valid_outer_ipv4_packet(); + _validate_outer_ipv4_header_set_malformed_outer_ipv4_packet(); + @defaultonly NoAction_41(); + } + key = { + hdr.ipv4.version : ternary @name("ipv4.version"); + hdr.ipv4.ttl : ternary @name("ipv4.ttl"); + hdr.ipv4.srcAddr[31:24]: ternary @name("ipv4.srcAddr"); + } + size = 512; + default_action = NoAction_41(); + } + @name(".validate_outer_ipv6_header.set_valid_outer_ipv6_packet") action _validate_outer_ipv6_header_set_valid_outer_ipv6_packet() { + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l3_metadata.lkp_ip_tc = hdr.ipv6.trafficClass; + meta.l3_metadata.lkp_ip_version = hdr.ipv6.version; + } + @name(".validate_outer_ipv6_header.set_malformed_outer_ipv6_packet") action _validate_outer_ipv6_header_set_malformed_outer_ipv6_packet(@name("drop_reason") bit<8> drop_reason_7) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason_7; + } + @name(".validate_outer_ipv6_packet") table _validate_outer_ipv6_packet_0 { + actions = { + _validate_outer_ipv6_header_set_valid_outer_ipv6_packet(); + _validate_outer_ipv6_header_set_malformed_outer_ipv6_packet(); + @defaultonly NoAction_42(); + } + key = { + hdr.ipv6.version : ternary @name("ipv6.version"); + hdr.ipv6.hopLimit : ternary @name("ipv6.hopLimit"); + hdr.ipv6.srcAddr[127:112]: ternary @name("ipv6.srcAddr"); + } + size = 512; + default_action = NoAction_42(); + } + @name(".validate_mpls_header.set_valid_mpls_label1") action _validate_mpls_header_set_valid_mpls_label1() { + meta.tunnel_metadata.mpls_label = hdr.mpls[0].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[0].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label2") action _validate_mpls_header_set_valid_mpls_label2() { + meta.tunnel_metadata.mpls_label = hdr.mpls[1].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[1].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label3") action _validate_mpls_header_set_valid_mpls_label3() { + meta.tunnel_metadata.mpls_label = hdr.mpls[2].label; + meta.tunnel_metadata.mpls_exp = hdr.mpls[2].exp; + } + @name(".validate_mpls_packet") table _validate_mpls_packet_0 { + actions = { + _validate_mpls_header_set_valid_mpls_label1(); + _validate_mpls_header_set_valid_mpls_label2(); + _validate_mpls_header_set_valid_mpls_label3(); + @defaultonly NoAction_43(); + } + key = { + hdr.mpls[0].label : ternary @name("mpls[0].label"); + hdr.mpls[0].bos : ternary @name("mpls[0].bos"); + hdr.mpls[0].isValid(): exact @name("mpls[0].$valid$"); + hdr.mpls[1].label : ternary @name("mpls[1].label"); + hdr.mpls[1].bos : ternary @name("mpls[1].bos"); + hdr.mpls[1].isValid(): exact @name("mpls[1].$valid$"); + hdr.mpls[2].label : ternary @name("mpls[2].label"); + hdr.mpls[2].bos : ternary @name("mpls[2].bos"); + hdr.mpls[2].isValid(): exact @name("mpls[2].$valid$"); + } + size = 512; + default_action = NoAction_43(); + } + @name(".process_global_params.set_config_parameters") action _process_global_params_set_config_parameters_0(@name("enable_dod") bit<8> enable_dod_0) { + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + meta.ingress_metadata.ingress_port = standard_metadata.ingress_port; + meta.l2_metadata.same_if_check = meta.ingress_metadata.ifindex; + standard_metadata.egress_spec = 9w511; + random>(meta.ingress_metadata.sflow_take_sample, 32w0, 32w0x7fffffff); + } + @name(".switch_config_params") table _switch_config_params { + actions = { + _process_global_params_set_config_parameters_0(); + @defaultonly NoAction_44(); + } + size = 1; + default_action = NoAction_44(); + } + @name(".process_port_vlan_mapping.set_bd_properties") action _process_port_vlan_mapping_set_bd_properties_0(@name("bd") bit<16> bd_24, @name("vrf") bit<16> vrf_7, @name("stp_group") bit<10> stp_group_1, @name("learning_enabled") bit<1> learning_enabled_1, @name("bd_label") bit<16> bd_label_4, @name("stats_idx") bit<16> stats_idx, @name("rmac_group") bit<10> rmac_group_5, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_3, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_3, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_3, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_3, @name("igmp_snooping_enabled") bit<1> igmp_snooping_enabled_2, @name("mld_snooping_enabled") bit<1> mld_snooping_enabled_2, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_3, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_3, @name("mrpf_group") bit<16> mrpf_group, @name("ipv4_mcast_key") bit<16> ipv4_mcast_key_1, @name("ipv4_mcast_key_type") bit<1> ipv4_mcast_key_type_1, @name("ipv6_mcast_key") bit<16> ipv6_mcast_key_1, @name("ipv6_mcast_key_type") bit<1> ipv6_mcast_key_type_1) { + meta.ingress_metadata.bd = bd_24; + meta.ingress_metadata.outer_bd = bd_24; + meta.acl_metadata.bd_label = bd_label_4; + meta.l2_metadata.stp_group = stp_group_1; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l2_metadata.learning_enabled = learning_enabled_1; + meta.l3_metadata.vrf = vrf_7; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled_3; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled_3; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode_3; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode_3; + meta.l3_metadata.rmac_group = rmac_group_5; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled_2; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled_2; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled_3; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled_3; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_mcast_key_type = ipv4_mcast_key_type_1; + meta.multicast_metadata.ipv4_mcast_key = ipv4_mcast_key_1; + meta.multicast_metadata.ipv6_mcast_key_type = ipv6_mcast_key_type_1; + meta.multicast_metadata.ipv6_mcast_key = ipv6_mcast_key_1; + } + @name(".process_port_vlan_mapping.port_vlan_mapping_miss") action _process_port_vlan_mapping_port_vlan_mapping_miss_0() { + meta.l2_metadata.port_vlan_mapping_miss = 1w1; + } + @name(".port_vlan_mapping") table _port_vlan_mapping { + actions = { + _process_port_vlan_mapping_set_bd_properties_0(); + _process_port_vlan_mapping_port_vlan_mapping_miss_0(); + @defaultonly NoAction_45(); + } + key = { + meta.ingress_metadata.ifindex: exact @name("ingress_metadata.ifindex"); + hdr.vlan_tag_[0].isValid() : exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[0].vid : exact @name("vlan_tag_[0].vid"); + hdr.vlan_tag_[1].isValid() : exact @name("vlan_tag_[1].$valid$"); + hdr.vlan_tag_[1].vid : exact @name("vlan_tag_[1].vid"); + } + size = 4096; + implementation = bd_action_profile; + default_action = NoAction_45(); + } + @name(".process_spanning_tree.set_stp_state") action _process_spanning_tree_set_stp_state_0(@name("stp_state") bit<3> stp_state_1) { + meta.l2_metadata.stp_state = stp_state_1; + } + @name(".spanning_tree") table _spanning_tree { + actions = { + _process_spanning_tree_set_stp_state_0(); + @defaultonly NoAction_46(); + } + key = { + meta.ingress_metadata.ifindex: exact @name("ingress_metadata.ifindex"); + meta.l2_metadata.stp_group : exact @name("l2_metadata.stp_group"); + } + size = 1024; + default_action = NoAction_46(); + } + @name(".process_ip_sourceguard.on_miss") action _process_ip_sourceguard_on_miss_0() { + } + @name(".process_ip_sourceguard.ipsg_miss") action _process_ip_sourceguard_ipsg_miss_0() { + meta.security_metadata.ipsg_check_fail = 1w1; + } + @name(".ipsg") table _ipsg { + actions = { + _process_ip_sourceguard_on_miss_0(); + @defaultonly NoAction_47(); + } + key = { + meta.ingress_metadata.ifindex : exact @name("ingress_metadata.ifindex"); + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_sa : exact @name("l2_metadata.lkp_mac_sa"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction_47(); + } + @name(".ipsg_permit_special") table _ipsg_permit_special { + actions = { + _process_ip_sourceguard_ipsg_miss_0(); + @defaultonly NoAction_48(); + } + key = { + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction_48(); + } + @name(".process_int_endpoint.int_sink_update_vxlan_gpe_v4") action _process_int_endpoint_int_sink_update_vxlan_gpe_v4_0() { + hdr.vxlan_gpe.next_proto = hdr.vxlan_gpe_int_header.next_proto; + hdr.vxlan_gpe_int_header.setInvalid(); + hdr.ipv4.totalLen = hdr.ipv4.totalLen - meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ - meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_endpoint.nop") action _process_int_endpoint_nop_0() { + } + @name(".process_int_endpoint.int_set_src") action _process_int_endpoint_int_set_src_0() { + meta.int_metadata_i2e.source = 1w1; + } + @name(".process_int_endpoint.int_set_no_src") action _process_int_endpoint_int_set_no_src_0() { + meta.int_metadata_i2e.source = 1w0; + } + @name(".process_int_endpoint.int_sink_gpe") action _process_int_endpoint_int_sink_gpe_0(@name("mirror_id") bit<32> mirror_id) { + meta.int_metadata.insert_byte_cnt = meta.int_metadata.gpe_int_hdr_len << 2; + meta.int_metadata_i2e.sink = 1w1; + meta.i2e_metadata.mirror_session_id = (bit<16>)mirror_id; + clone_preserving_field_list(CloneType.I2E, mirror_id, 8w4); + hdr.int_header.setInvalid(); + hdr.int_val[0].setInvalid(); + hdr.int_val[1].setInvalid(); + hdr.int_val[2].setInvalid(); + hdr.int_val[3].setInvalid(); + hdr.int_val[4].setInvalid(); + hdr.int_val[5].setInvalid(); + hdr.int_val[6].setInvalid(); + hdr.int_val[7].setInvalid(); + hdr.int_val[8].setInvalid(); + hdr.int_val[9].setInvalid(); + hdr.int_val[10].setInvalid(); + hdr.int_val[11].setInvalid(); + hdr.int_val[12].setInvalid(); + hdr.int_val[13].setInvalid(); + hdr.int_val[14].setInvalid(); + hdr.int_val[15].setInvalid(); + hdr.int_val[16].setInvalid(); + hdr.int_val[17].setInvalid(); + hdr.int_val[18].setInvalid(); + hdr.int_val[19].setInvalid(); + hdr.int_val[20].setInvalid(); + hdr.int_val[21].setInvalid(); + hdr.int_val[22].setInvalid(); + hdr.int_val[23].setInvalid(); + } + @name(".process_int_endpoint.int_no_sink") action _process_int_endpoint_int_no_sink_0() { + meta.int_metadata_i2e.sink = 1w0; + } + @name(".int_sink_update_outer") table _int_sink_update_outer { + actions = { + _process_int_endpoint_int_sink_update_vxlan_gpe_v4_0(); + _process_int_endpoint_nop_0(); + @defaultonly NoAction_49(); + } + key = { + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.int_metadata_i2e.sink : exact @name("int_metadata_i2e.sink"); + } + size = 2; + default_action = NoAction_49(); + } + @name(".int_source") table _int_source { + actions = { + _process_int_endpoint_int_set_src_0(); + _process_int_endpoint_int_set_no_src_0(); + @defaultonly NoAction_50(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + hdr.inner_ipv4.srcAddr : ternary @name("inner_ipv4.srcAddr"); + } + size = 256; + default_action = NoAction_50(); + } + @name(".int_terminate") table _int_terminate { + actions = { + _process_int_endpoint_int_sink_gpe_0(); + _process_int_endpoint_int_no_sink_0(); + @defaultonly NoAction_51(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta.ipv4_metadata.lkp_ipv4_da : ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + } + size = 256; + default_action = NoAction_51(); + } + @name(".process_tunnel.on_miss") action _process_tunnel_on_miss_0() { + } + @name(".process_tunnel.outer_rmac_hit") action _process_tunnel_outer_rmac_hit_0() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".process_tunnel.nop") action _process_tunnel_nop_0() { + } + @name(".process_tunnel.tunnel_lookup_miss") action _process_tunnel_tunnel_lookup_miss_0() { + } + @name(".process_tunnel.terminate_tunnel_inner_non_ip") action _process_tunnel_terminate_tunnel_inner_non_ip_0(@name("bd") bit<16> bd_25, @name("bd_label") bit<16> bd_label_5, @name("stats_idx") bit<16> stats_idx_4) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd_25; + meta.acl_metadata.bd_label = bd_label_5; + meta.l2_metadata.bd_stats_idx = stats_idx_4; + meta.l3_metadata.lkp_ip_type = 2w0; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv4") action _process_tunnel_terminate_tunnel_inner_ethernet_ipv4_0(@name("bd") bit<16> bd_26, @name("vrf") bit<16> vrf_8, @name("rmac_group") bit<10> rmac_group_6, @name("bd_label") bit<16> bd_label_6, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_4, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_4, @name("igmp_snooping_enabled") bit<1> igmp_snooping_enabled_3, @name("stats_idx") bit<16> stats_idx_5, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_4, @name("mrpf_group") bit<16> mrpf_group_5) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd_26; + meta.l3_metadata.vrf = vrf_8; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled_4; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode_4; + meta.l3_metadata.rmac_group = rmac_group_6; + meta.acl_metadata.bd_label = bd_label_6; + meta.l2_metadata.bd_stats_idx = stats_idx_5; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled_3; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled_4; + meta.multicast_metadata.bd_mrpf_group = mrpf_group_5; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv4") action _process_tunnel_terminate_tunnel_inner_ipv4_0(@name("vrf") bit<16> vrf_9, @name("rmac_group") bit<10> rmac_group_7, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_5, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_5, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_5, @name("mrpf_group") bit<16> mrpf_group_6) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf_9; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled_5; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode_5; + meta.l3_metadata.rmac_group = rmac_group_7; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + meta.multicast_metadata.bd_mrpf_group = mrpf_group_6; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled_5; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv6") action _process_tunnel_terminate_tunnel_inner_ethernet_ipv6_0(@name("bd") bit<16> bd_27, @name("vrf") bit<16> vrf_10, @name("rmac_group") bit<10> rmac_group_8, @name("bd_label") bit<16> bd_label_7, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_4, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_4, @name("mld_snooping_enabled") bit<1> mld_snooping_enabled_3, @name("stats_idx") bit<16> stats_idx_6, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_4, @name("mrpf_group") bit<16> mrpf_group_7) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd_27; + meta.l3_metadata.vrf = vrf_10; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled_4; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode_4; + meta.l3_metadata.rmac_group = rmac_group_8; + meta.acl_metadata.bd_label = bd_label_7; + meta.l2_metadata.bd_stats_idx = stats_idx_6; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group_7; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled_4; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled_3; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv6") action _process_tunnel_terminate_tunnel_inner_ipv6_0(@name("vrf") bit<16> vrf_11, @name("rmac_group") bit<10> rmac_group_9, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_5, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_5, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_5, @name("mrpf_group") bit<16> mrpf_group_8) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf_11; + meta.qos_metadata.outer_dscp = meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled_5; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode_5; + meta.l3_metadata.rmac_group = rmac_group_9; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group_8; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled_5; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action _process_tunnel_non_ip_tunnel_lookup_miss_0() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action _process_tunnel_non_ip_tunnel_lookup_miss_1() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action _process_tunnel_ipv4_tunnel_lookup_miss_0() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv4.ttl; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action _process_tunnel_ipv4_tunnel_lookup_miss_1() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv4.ttl; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action _process_tunnel_ipv6_tunnel_lookup_miss_0() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv6.hopLimit; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action _process_tunnel_ipv6_tunnel_lookup_miss_1() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = hdr.ipv6.hopLimit; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".outer_rmac") table _outer_rmac { + actions = { + _process_tunnel_on_miss_0(); + _process_tunnel_outer_rmac_hit_0(); + @defaultonly NoAction_52(); + } + key = { + meta.l3_metadata.rmac_group: exact @name("l3_metadata.rmac_group"); + hdr.ethernet.dstAddr : exact @name("ethernet.dstAddr"); + } + size = 1024; + default_action = NoAction_52(); + } + @name(".tunnel") table _tunnel { + actions = { + _process_tunnel_nop_0(); + _process_tunnel_tunnel_lookup_miss_0(); + _process_tunnel_terminate_tunnel_inner_non_ip_0(); + _process_tunnel_terminate_tunnel_inner_ethernet_ipv4_0(); + _process_tunnel_terminate_tunnel_inner_ipv4_0(); + _process_tunnel_terminate_tunnel_inner_ethernet_ipv6_0(); + _process_tunnel_terminate_tunnel_inner_ipv6_0(); + @defaultonly NoAction_53(); + } + key = { + meta.tunnel_metadata.tunnel_vni : exact @name("tunnel_metadata.tunnel_vni"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_53(); + } + @name(".tunnel_lookup_miss") table _tunnel_lookup_miss { + actions = { + _process_tunnel_non_ip_tunnel_lookup_miss_0(); + _process_tunnel_ipv4_tunnel_lookup_miss_0(); + _process_tunnel_ipv6_tunnel_lookup_miss_0(); + @defaultonly NoAction_54(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction_54(); + } + @name(".tunnel_miss") table _tunnel_miss { + actions = { + _process_tunnel_non_ip_tunnel_lookup_miss_1(); + _process_tunnel_ipv4_tunnel_lookup_miss_1(); + _process_tunnel_ipv6_tunnel_lookup_miss_1(); + @defaultonly NoAction_55(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction_55(); + } + @name(".process_ingress_fabric.nop") action _process_ingress_fabric_nop() { + } + @name(".process_ingress_fabric.nop") action _process_ingress_fabric_nop_1() { + } + @name(".process_ingress_fabric.terminate_cpu_packet") action _process_ingress_fabric_terminate_cpu_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.egress_metadata.bypass = hdr.fabric_header_cpu.txBypass; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_cpu.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_unicast_packet") action _process_ingress_fabric_switch_fabric_unicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + meta.fabric_metadata.dst_device = hdr.fabric_header.dstDevice; + meta.fabric_metadata.dst_port = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_unicast_packet") action _process_ingress_fabric_terminate_fabric_unicast_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.tunnel_metadata.tunnel_terminate = hdr.fabric_header_unicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = hdr.fabric_header_unicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = hdr.fabric_header_unicast.nexthopIndex; + meta.l3_metadata.routed = hdr.fabric_header_unicast.routed; + meta.l3_metadata.outer_routed = hdr.fabric_header_unicast.outerRouted; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_unicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_multicast_packet") action _process_ingress_fabric_switch_fabric_multicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + standard_metadata.mcast_grp = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_multicast_packet") action _process_ingress_fabric_terminate_fabric_multicast_packet() { + meta.tunnel_metadata.tunnel_terminate = hdr.fabric_header_multicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = hdr.fabric_header_multicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = 16w0; + meta.l3_metadata.routed = hdr.fabric_header_multicast.routed; + meta.l3_metadata.outer_routed = hdr.fabric_header_multicast.outerRouted; + standard_metadata.mcast_grp = hdr.fabric_header_multicast.mcastGrp; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_multicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.set_ingress_ifindex_properties") action _process_ingress_fabric_set_ingress_ifindex_properties() { + } + @name(".process_ingress_fabric.non_ip_over_fabric") action _process_ingress_fabric_non_ip_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l2_metadata.lkp_mac_type = hdr.ethernet.etherType; + } + @name(".process_ingress_fabric.ipv4_over_fabric") action _process_ingress_fabric_ipv4_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv4.protocol; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".process_ingress_fabric.ipv6_over_fabric") action _process_ingress_fabric_ipv6_over_fabric() { + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_l4_sport = meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".fabric_ingress_dst_lkp") table _fabric_ingress_dst_lkp_0 { + actions = { + _process_ingress_fabric_nop(); + _process_ingress_fabric_terminate_cpu_packet(); + _process_ingress_fabric_switch_fabric_unicast_packet(); + _process_ingress_fabric_terminate_fabric_unicast_packet(); + _process_ingress_fabric_switch_fabric_multicast_packet(); + _process_ingress_fabric_terminate_fabric_multicast_packet(); + @defaultonly NoAction_56(); + } + key = { + hdr.fabric_header.dstDevice: exact @name("fabric_header.dstDevice"); + } + default_action = NoAction_56(); + } + @name(".fabric_ingress_src_lkp") table _fabric_ingress_src_lkp_0 { + actions = { + _process_ingress_fabric_nop_1(); + _process_ingress_fabric_set_ingress_ifindex_properties(); + @defaultonly NoAction_57(); + } + key = { + hdr.fabric_header_multicast.ingressIfindex: exact @name("fabric_header_multicast.ingressIfindex"); + } + size = 1024; + default_action = NoAction_57(); + } + @name(".native_packet_over_fabric") table _native_packet_over_fabric_0 { + actions = { + _process_ingress_fabric_non_ip_over_fabric(); + _process_ingress_fabric_ipv4_over_fabric(); + _process_ingress_fabric_ipv6_over_fabric(); + @defaultonly NoAction_58(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_58(); + } + @name(".process_outer_ipv4_multicast.nop") action _process_outer_ipv4_multicast_nop() { + } + @name(".process_outer_ipv4_multicast.nop") action _process_outer_ipv4_multicast_nop_0() { + } + @name(".process_outer_ipv4_multicast.on_miss") action _process_outer_ipv4_multicast_on_miss() { + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_s_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index, @name("mcast_rpf_group") bit<16> mcast_rpf_group_12) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_12 ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit") action _process_outer_ipv4_multicast_outer_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_22) { + standard_metadata.mcast_grp = mc_index_22; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_23, @name("mcast_rpf_group") bit<16> mcast_rpf_group_13) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index_23; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_13 ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_24, @name("mcast_rpf_group") bit<16> mcast_rpf_group_14) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index_24; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_14 | meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_25) { + standard_metadata.mcast_grp = mc_index_25; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv4_multicast") table _outer_ipv4_multicast_0 { + actions = { + _process_outer_ipv4_multicast_nop(); + _process_outer_ipv4_multicast_on_miss(); + _process_outer_ipv4_multicast_outer_multicast_route_s_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction_59(); + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta.multicast_metadata.ipv4_mcast_key : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + } + size = 1024; + default_action = NoAction_59(); + } + @name(".outer_ipv4_multicast_star_g") table _outer_ipv4_multicast_star_g_0 { + actions = { + _process_outer_ipv4_multicast_nop_0(); + _process_outer_ipv4_multicast_outer_multicast_route_sm_star_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_route_bidir_star_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction_60(); + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta.multicast_metadata.ipv4_mcast_key : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.dstAddr : ternary @name("ipv4.dstAddr"); + } + size = 512; + default_action = NoAction_60(); + } + @name(".process_outer_ipv6_multicast.nop") action _process_outer_ipv6_multicast_nop() { + } + @name(".process_outer_ipv6_multicast.nop") action _process_outer_ipv6_multicast_nop_0() { + } + @name(".process_outer_ipv6_multicast.on_miss") action _process_outer_ipv6_multicast_on_miss() { + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_s_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_26, @name("mcast_rpf_group") bit<16> mcast_rpf_group_15) { + standard_metadata.mcast_grp = mc_index_26; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_15 ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit") action _process_outer_ipv6_multicast_outer_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_27) { + standard_metadata.mcast_grp = mc_index_27; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_28, @name("mcast_rpf_group") bit<16> mcast_rpf_group_16) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index_28; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_16 ^ meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_29, @name("mcast_rpf_group") bit<16> mcast_rpf_group_17) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index_29; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_17 | meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_30) { + standard_metadata.mcast_grp = mc_index_30; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv6_multicast") table _outer_ipv6_multicast_0 { + actions = { + _process_outer_ipv6_multicast_nop(); + _process_outer_ipv6_multicast_on_miss(); + _process_outer_ipv6_multicast_outer_multicast_route_s_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction_61(); + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta.multicast_metadata.ipv6_mcast_key : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + } + size = 1024; + default_action = NoAction_61(); + } + @name(".outer_ipv6_multicast_star_g") table _outer_ipv6_multicast_star_g_0 { + actions = { + _process_outer_ipv6_multicast_nop_0(); + _process_outer_ipv6_multicast_outer_multicast_route_sm_star_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_route_bidir_star_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction_62(); + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta.multicast_metadata.ipv6_mcast_key : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.dstAddr : ternary @name("ipv6.dstAddr"); + } + size = 512; + default_action = NoAction_62(); + } + @name(".process_ipv4_vtep.nop") action _process_ipv4_vtep_nop() { + } + @name(".process_ipv4_vtep.set_tunnel_termination_flag") action _process_ipv4_vtep_set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.set_tunnel_vni_and_termination_flag") action _process_ipv4_vtep_set_tunnel_vni_and_termination_flag(@name("tunnel_vni") bit<24> tunnel_vni_2) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni_2; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.on_miss") action _process_ipv4_vtep_on_miss() { + } + @name(".process_ipv4_vtep.src_vtep_hit") action _process_ipv4_vtep_src_vtep_hit(@name("ifindex") bit<16> ifindex_15) { + meta.ingress_metadata.ifindex = ifindex_15; + } + @name(".ipv4_dest_vtep") table _ipv4_dest_vtep_0 { + actions = { + _process_ipv4_vtep_nop(); + _process_ipv4_vtep_set_tunnel_termination_flag(); + _process_ipv4_vtep_set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction_63(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_63(); + } + @name(".ipv4_src_vtep") table _ipv4_src_vtep_0 { + actions = { + _process_ipv4_vtep_on_miss(); + _process_ipv4_vtep_src_vtep_hit(); + @defaultonly NoAction_64(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_64(); + } + @name(".process_ipv6_vtep.nop") action _process_ipv6_vtep_nop() { + } + @name(".process_ipv6_vtep.set_tunnel_termination_flag") action _process_ipv6_vtep_set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.set_tunnel_vni_and_termination_flag") action _process_ipv6_vtep_set_tunnel_vni_and_termination_flag(@name("tunnel_vni") bit<24> tunnel_vni_3) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni_3; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.on_miss") action _process_ipv6_vtep_on_miss() { + } + @name(".process_ipv6_vtep.src_vtep_hit") action _process_ipv6_vtep_src_vtep_hit(@name("ifindex") bit<16> ifindex_16) { + meta.ingress_metadata.ifindex = ifindex_16; + } + @name(".ipv6_dest_vtep") table _ipv6_dest_vtep_0 { + actions = { + _process_ipv6_vtep_nop(); + _process_ipv6_vtep_set_tunnel_termination_flag(); + _process_ipv6_vtep_set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction_65(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_65(); + } + @name(".ipv6_src_vtep") table _ipv6_src_vtep_0 { + actions = { + _process_ipv6_vtep_on_miss(); + _process_ipv6_vtep_src_vtep_hit(); + @defaultonly NoAction_66(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + meta.tunnel_metadata.ingress_tunnel_type: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_66(); + } + @name(".process_mpls.terminate_eompls") action _process_mpls_terminate_eompls(@name("bd") bit<16> bd_28, @name("tunnel_type") bit<5> tunnel_type_11) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type_11; + meta.ingress_metadata.bd = bd_28; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_vpls") action _process_mpls_terminate_vpls(@name("bd") bit<16> bd_29, @name("tunnel_type") bit<5> tunnel_type_12) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type_12; + meta.ingress_metadata.bd = bd_29; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_ipv4_over_mpls") action _process_mpls_terminate_ipv4_over_mpls(@name("vrf") bit<16> vrf_12, @name("tunnel_type") bit<5> tunnel_type_13) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type_13; + meta.l3_metadata.vrf = vrf_12; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv4.diffserv; + } + @name(".process_mpls.terminate_ipv6_over_mpls") action _process_mpls_terminate_ipv6_over_mpls(@name("vrf") bit<16> vrf_13, @name("tunnel_type") bit<5> tunnel_type_14) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type_14; + meta.l3_metadata.vrf = vrf_13; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = hdr.inner_ipv6.trafficClass; + } + @name(".process_mpls.terminate_pw") action _process_mpls_terminate_pw(@name("ifindex") bit<16> ifindex_17) { + meta.ingress_metadata.egress_ifindex = ifindex_17; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + } + @name(".process_mpls.forward_mpls") action _process_mpls_forward_mpls(@name("nexthop_index") bit<16> nexthop_index_8) { + meta.l3_metadata.fib_nexthop = nexthop_index_8; + meta.l3_metadata.fib_nexthop_type = 1w0; + meta.l3_metadata.fib_hit = 1w1; + meta.l2_metadata.lkp_mac_sa = hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = hdr.ethernet.dstAddr; + } + @name(".mpls") table _mpls_0 { + actions = { + _process_mpls_terminate_eompls(); + _process_mpls_terminate_vpls(); + _process_mpls_terminate_ipv4_over_mpls(); + _process_mpls_terminate_ipv6_over_mpls(); + _process_mpls_terminate_pw(); + _process_mpls_forward_mpls(); + @defaultonly NoAction_67(); + } + key = { + meta.tunnel_metadata.mpls_label: exact @name("tunnel_metadata.mpls_label"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_67(); + } + @name(".sflow_ingress_session_pkt_counter") direct_counter(CounterType.packets) _sflow_ingress_session_pkt_counter; + @name(".process_ingress_sflow.nop") action _process_ingress_sflow_nop_1() { + } + @name(".process_ingress_sflow.sflow_ing_session_enable") action _process_ingress_sflow_sflow_ing_session_enable_0(@name("rate_thr") bit<32> rate_thr, @name("session_id") bit<16> session_id_7) { + meta.ingress_metadata.sflow_take_sample = rate_thr |+| meta.ingress_metadata.sflow_take_sample; + meta.sflow_metadata.sflow_session_id = session_id_7; + } + @name(".process_ingress_sflow.nop_1") action _process_ingress_sflow_nop_2() { + _sflow_ingress_session_pkt_counter.count(); + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu_0") action _process_ingress_sflow_sflow_ing_pkt_to_cpu_0(@name("sflow_i2e_mirror_id") bit<32> sflow_i2e_mirror_id, @name("reason_code") bit<16> reason_code_5) { + _sflow_ingress_session_pkt_counter.count(); + meta.fabric_metadata.reason_code = reason_code_5; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, sflow_i2e_mirror_id, 8w6); + } + @name(".sflow_ing_take_sample") table _sflow_ing_take_sample { + actions = { + _process_ingress_sflow_nop_2(); + _process_ingress_sflow_sflow_ing_pkt_to_cpu_0(); + @defaultonly NoAction_68(); + } + key = { + meta.ingress_metadata.sflow_take_sample: ternary @name("ingress_metadata.sflow_take_sample"); + meta.sflow_metadata.sflow_session_id : exact @name("sflow_metadata.sflow_session_id"); + } + counters = _sflow_ingress_session_pkt_counter; + default_action = NoAction_68(); + } + @name(".sflow_ingress") table _sflow_ingress { + actions = { + _process_ingress_sflow_nop_1(); + _process_ingress_sflow_sflow_ing_session_enable_0(); + @defaultonly NoAction_69(); + } + key = { + meta.ingress_metadata.ifindex : ternary @name("ingress_metadata.ifindex"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.sflow.isValid() : exact @name("sflow.$valid$"); + } + size = 512; + default_action = NoAction_69(); + } + @name(".process_storm_control.nop") action _process_storm_control_nop_0() { + } + @name(".process_storm_control.set_storm_control_meter") action _process_storm_control_set_storm_control_meter_0(@name("meter_idx") bit<16> meter_idx) { + storm_control_meter.execute_meter>((bit<10>)meter_idx, meta.meter_metadata.meter_color); + meta.meter_metadata.meter_index = meter_idx; + } + @name(".storm_control") table _storm_control { + actions = { + _process_storm_control_nop_0(); + _process_storm_control_set_storm_control_meter_0(); + @defaultonly NoAction_70(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + meta.l2_metadata.lkp_pkt_type : ternary @name("l2_metadata.lkp_pkt_type"); + } + size = 512; + default_action = NoAction_70(); + } + @name(".process_validate_packet.nop") action _process_validate_packet_nop_0() { + } + @name(".process_validate_packet.set_unicast") action _process_validate_packet_set_unicast_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + } + @name(".process_validate_packet.set_unicast_and_ipv6_src_is_link_local") action _process_validate_packet_set_unicast_and_ipv6_src_is_link_local_0() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + } + @name(".process_validate_packet.set_multicast") action _process_validate_packet_set_multicast_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_multicast_and_ipv6_src_is_link_local") action _process_validate_packet_set_multicast_and_ipv6_src_is_link_local_0() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_broadcast") action _process_validate_packet_set_broadcast_0() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w2; + } + @name(".process_validate_packet.set_malformed_packet") action _process_validate_packet_set_malformed_packet_0(@name("drop_reason") bit<8> drop_reason_8) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason_8; + } + @name(".validate_packet") table _validate_packet { + actions = { + _process_validate_packet_nop_0(); + _process_validate_packet_set_unicast_0(); + _process_validate_packet_set_unicast_and_ipv6_src_is_link_local_0(); + _process_validate_packet_set_multicast_0(); + _process_validate_packet_set_multicast_and_ipv6_src_is_link_local_0(); + _process_validate_packet_set_broadcast_0(); + _process_validate_packet_set_malformed_packet_0(); + @defaultonly NoAction_71(); + } + key = { + meta.l2_metadata.lkp_mac_sa[40:40] : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l3_metadata.lkp_ip_type : ternary @name("l3_metadata.lkp_ip_type"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + meta.l3_metadata.lkp_ip_version : ternary @name("l3_metadata.lkp_ip_version"); + meta.ipv4_metadata.lkp_ipv4_sa[31:24] : ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv6_metadata.lkp_ipv6_sa[127:112]: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction_71(); + } + @name(".process_mac.nop") action _process_mac_nop_0() { + } + @name(".process_mac.nop") action _process_mac_nop_1() { + } + @name(".process_mac.dmac_hit") action _process_mac_dmac_hit_0(@name("ifindex") bit<16> ifindex_18) { + meta.ingress_metadata.egress_ifindex = ifindex_18; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex_18; + } + @name(".process_mac.dmac_multicast_hit") action _process_mac_dmac_multicast_hit_0(@name("mc_index") bit<16> mc_index_31) { + standard_metadata.mcast_grp = mc_index_31; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_miss") action _process_mac_dmac_miss_0() { + meta.ingress_metadata.egress_ifindex = 16w65535; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_redirect_nexthop") action _process_mac_dmac_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_9) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = nexthop_index_9; + meta.l2_metadata.l2_nexthop_type = 1w0; + } + @name(".process_mac.dmac_redirect_ecmp") action _process_mac_dmac_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = ecmp_index; + meta.l2_metadata.l2_nexthop_type = 1w1; + } + @name(".process_mac.dmac_drop") action _process_mac_dmac_drop_0() { + mark_to_drop(standard_metadata); + } + @name(".process_mac.smac_miss") action _process_mac_smac_miss_0() { + meta.l2_metadata.l2_src_miss = 1w1; + } + @name(".process_mac.smac_hit") action _process_mac_smac_hit_0(@name("ifindex") bit<16> ifindex_19) { + meta.l2_metadata.l2_src_move = meta.ingress_metadata.ifindex ^ ifindex_19; + } + @name(".dmac") table _dmac { + support_timeout = true; + actions = { + _process_mac_nop_0(); + _process_mac_dmac_hit_0(); + _process_mac_dmac_multicast_hit_0(); + _process_mac_dmac_miss_0(); + _process_mac_dmac_redirect_nexthop_0(); + _process_mac_dmac_redirect_ecmp_0(); + _process_mac_dmac_drop_0(); + @defaultonly NoAction_72(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_da: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction_72(); + } + @name(".smac") table _smac { + actions = { + _process_mac_nop_1(); + _process_mac_smac_miss_0(); + _process_mac_smac_hit_0(); + @defaultonly NoAction_73(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_mac_sa: exact @name("l2_metadata.lkp_mac_sa"); + } + size = 1024; + default_action = NoAction_73(); + } + @name(".process_mac_acl.nop") action _process_mac_acl_nop_0() { + } + @name(".process_mac_acl.acl_deny") action _process_mac_acl_acl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_18, @name("acl_meter_index") bit<16> acl_meter_index, @name("acl_copy") bit<1> acl_copy_16, @name("acl_copy_reason") bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_18; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy_16; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_permit") action _process_mac_acl_acl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_19, @name("acl_meter_index") bit<16> acl_meter_index_10, @name("acl_copy") bit<1> acl_copy_17, @name("acl_copy_reason") bit<16> acl_copy_reason_16) { + meta.acl_metadata.acl_stats_index = acl_stats_index_19; + meta.meter_metadata.meter_index = acl_meter_index_10; + meta.acl_metadata.acl_copy = acl_copy_17; + meta.fabric_metadata.reason_code = acl_copy_reason_16; + } + @name(".process_mac_acl.acl_mirror") action _process_mac_acl_acl_mirror_0(@name("session_id") bit<32> session_id_8, @name("acl_stats_index") bit<14> acl_stats_index_20, @name("acl_meter_index") bit<16> acl_meter_index_11) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id_8; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_8, 8w1); + meta.acl_metadata.acl_stats_index = acl_stats_index_20; + meta.meter_metadata.meter_index = acl_meter_index_11; + } + @name(".process_mac_acl.acl_redirect_nexthop") action _process_mac_acl_acl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_10, @name("acl_stats_index") bit<14> acl_stats_index_21, @name("acl_meter_index") bit<16> acl_meter_index_12, @name("acl_copy") bit<1> acl_copy_18, @name("acl_copy_reason") bit<16> acl_copy_reason_17) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index_10; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index_21; + meta.meter_metadata.meter_index = acl_meter_index_12; + meta.acl_metadata.acl_copy = acl_copy_18; + meta.fabric_metadata.reason_code = acl_copy_reason_17; + } + @name(".process_mac_acl.acl_redirect_ecmp") action _process_mac_acl_acl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_7, @name("acl_stats_index") bit<14> acl_stats_index_22, @name("acl_meter_index") bit<16> acl_meter_index_13, @name("acl_copy") bit<1> acl_copy_19, @name("acl_copy_reason") bit<16> acl_copy_reason_18) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index_7; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_22; + meta.meter_metadata.meter_index = acl_meter_index_13; + meta.acl_metadata.acl_copy = acl_copy_19; + meta.fabric_metadata.reason_code = acl_copy_reason_18; + } + @name(".mac_acl") table _mac_acl { + actions = { + _process_mac_acl_nop_0(); + _process_mac_acl_acl_deny_0(); + _process_mac_acl_acl_permit_0(); + _process_mac_acl_acl_mirror_0(); + _process_mac_acl_acl_redirect_nexthop_0(); + _process_mac_acl_acl_redirect_ecmp_0(); + @defaultonly NoAction_74(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.l2_metadata.lkp_mac_sa : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l2_metadata.lkp_mac_type: ternary @name("l2_metadata.lkp_mac_type"); + } + size = 512; + default_action = NoAction_74(); + } + @name(".process_ip_acl.nop") action _process_ip_acl_nop_0() { + } + @name(".process_ip_acl.nop") action _process_ip_acl_nop_1() { + } + @name(".process_ip_acl.acl_deny") action _process_ip_acl_acl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_23, @name("acl_meter_index") bit<16> acl_meter_index_14, @name("acl_copy") bit<1> acl_copy_20, @name("acl_copy_reason") bit<16> acl_copy_reason_19) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_23; + meta.meter_metadata.meter_index = acl_meter_index_14; + meta.acl_metadata.acl_copy = acl_copy_20; + meta.fabric_metadata.reason_code = acl_copy_reason_19; + } + @name(".process_ip_acl.acl_deny") action _process_ip_acl_acl_deny_1(@name("acl_stats_index") bit<14> acl_stats_index_24, @name("acl_meter_index") bit<16> acl_meter_index_15, @name("acl_copy") bit<1> acl_copy_21, @name("acl_copy_reason") bit<16> acl_copy_reason_20) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_24; + meta.meter_metadata.meter_index = acl_meter_index_15; + meta.acl_metadata.acl_copy = acl_copy_21; + meta.fabric_metadata.reason_code = acl_copy_reason_20; + } + @name(".process_ip_acl.acl_permit") action _process_ip_acl_acl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_25, @name("acl_meter_index") bit<16> acl_meter_index_16, @name("acl_copy") bit<1> acl_copy_22, @name("acl_copy_reason") bit<16> acl_copy_reason_21) { + meta.acl_metadata.acl_stats_index = acl_stats_index_25; + meta.meter_metadata.meter_index = acl_meter_index_16; + meta.acl_metadata.acl_copy = acl_copy_22; + meta.fabric_metadata.reason_code = acl_copy_reason_21; + } + @name(".process_ip_acl.acl_permit") action _process_ip_acl_acl_permit_1(@name("acl_stats_index") bit<14> acl_stats_index_26, @name("acl_meter_index") bit<16> acl_meter_index_17, @name("acl_copy") bit<1> acl_copy_23, @name("acl_copy_reason") bit<16> acl_copy_reason_22) { + meta.acl_metadata.acl_stats_index = acl_stats_index_26; + meta.meter_metadata.meter_index = acl_meter_index_17; + meta.acl_metadata.acl_copy = acl_copy_23; + meta.fabric_metadata.reason_code = acl_copy_reason_22; + } + @name(".process_ip_acl.acl_mirror") action _process_ip_acl_acl_mirror_0(@name("session_id") bit<32> session_id_9, @name("acl_stats_index") bit<14> acl_stats_index_27, @name("acl_meter_index") bit<16> acl_meter_index_18) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id_9; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_9, 8w1); + meta.acl_metadata.acl_stats_index = acl_stats_index_27; + meta.meter_metadata.meter_index = acl_meter_index_18; + } + @name(".process_ip_acl.acl_mirror") action _process_ip_acl_acl_mirror_1(@name("session_id") bit<32> session_id_10, @name("acl_stats_index") bit<14> acl_stats_index_28, @name("acl_meter_index") bit<16> acl_meter_index_19) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id_10; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_10, 8w1); + meta.acl_metadata.acl_stats_index = acl_stats_index_28; + meta.meter_metadata.meter_index = acl_meter_index_19; + } + @name(".process_ip_acl.acl_redirect_nexthop") action _process_ip_acl_acl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_11, @name("acl_stats_index") bit<14> acl_stats_index_29, @name("acl_meter_index") bit<16> acl_meter_index_20, @name("acl_copy") bit<1> acl_copy_24, @name("acl_copy_reason") bit<16> acl_copy_reason_23) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index_11; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index_29; + meta.meter_metadata.meter_index = acl_meter_index_20; + meta.acl_metadata.acl_copy = acl_copy_24; + meta.fabric_metadata.reason_code = acl_copy_reason_23; + } + @name(".process_ip_acl.acl_redirect_nexthop") action _process_ip_acl_acl_redirect_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_12, @name("acl_stats_index") bit<14> acl_stats_index_30, @name("acl_meter_index") bit<16> acl_meter_index_21, @name("acl_copy") bit<1> acl_copy_25, @name("acl_copy_reason") bit<16> acl_copy_reason_24) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index_12; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index_30; + meta.meter_metadata.meter_index = acl_meter_index_21; + meta.acl_metadata.acl_copy = acl_copy_25; + meta.fabric_metadata.reason_code = acl_copy_reason_24; + } + @name(".process_ip_acl.acl_redirect_ecmp") action _process_ip_acl_acl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_8, @name("acl_stats_index") bit<14> acl_stats_index_31, @name("acl_meter_index") bit<16> acl_meter_index_22, @name("acl_copy") bit<1> acl_copy_26, @name("acl_copy_reason") bit<16> acl_copy_reason_25) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index_8; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_31; + meta.meter_metadata.meter_index = acl_meter_index_22; + meta.acl_metadata.acl_copy = acl_copy_26; + meta.fabric_metadata.reason_code = acl_copy_reason_25; + } + @name(".process_ip_acl.acl_redirect_ecmp") action _process_ip_acl_acl_redirect_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_9, @name("acl_stats_index") bit<14> acl_stats_index_32, @name("acl_meter_index") bit<16> acl_meter_index_23, @name("acl_copy") bit<1> acl_copy_27, @name("acl_copy_reason") bit<16> acl_copy_reason_26) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index_9; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_32; + meta.meter_metadata.meter_index = acl_meter_index_23; + meta.acl_metadata.acl_copy = acl_copy_27; + meta.fabric_metadata.reason_code = acl_copy_reason_26; + } + @name(".ip_acl") table _ip_acl { + actions = { + _process_ip_acl_nop_0(); + _process_ip_acl_acl_deny_0(); + _process_ip_acl_acl_permit_0(); + _process_ip_acl_acl_mirror_0(); + _process_ip_acl_acl_redirect_nexthop_0(); + _process_ip_acl_acl_redirect_ecmp_0(); + @defaultonly NoAction_75(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction_75(); + } + @name(".ipv6_acl") table _ipv6_acl { + actions = { + _process_ip_acl_nop_1(); + _process_ip_acl_acl_deny_1(); + _process_ip_acl_acl_permit_1(); + _process_ip_acl_acl_mirror_1(); + _process_ip_acl_acl_redirect_nexthop_1(); + _process_ip_acl_acl_redirect_ecmp_1(); + @defaultonly NoAction_76(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv6_metadata.lkp_ipv6_sa: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction_76(); + } + @name(".process_qos.nop") action _process_qos_nop_0() { + } + @name(".process_qos.apply_cos_marking") action _process_qos_apply_cos_marking_0(@name("cos") bit<3> cos) { + meta.qos_metadata.marked_cos = cos; + } + @name(".process_qos.apply_dscp_marking") action _process_qos_apply_dscp_marking_0(@name("dscp") bit<8> dscp) { + meta.qos_metadata.marked_dscp = dscp; + } + @name(".process_qos.apply_tc_marking") action _process_qos_apply_tc_marking_0(@name("tc") bit<3> tc) { + meta.qos_metadata.marked_exp = tc; + } + @name(".qos") table _qos { + actions = { + _process_qos_nop_0(); + _process_qos_apply_cos_marking_0(); + _process_qos_apply_dscp_marking_0(); + _process_qos_apply_tc_marking_0(); + @defaultonly NoAction_77(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_ip_tc : ternary @name("l3_metadata.lkp_ip_tc"); + meta.tunnel_metadata.mpls_exp : ternary @name("tunnel_metadata.mpls_exp"); + meta.qos_metadata.outer_dscp : ternary @name("qos_metadata.outer_dscp"); + } + size = 512; + default_action = NoAction_77(); + } + @name(".ipv4_multicast_route_s_g_stats") direct_counter(CounterType.packets) _ipv4_multicast_route_s_g_stats_0; + @name(".ipv4_multicast_route_star_g_stats") direct_counter(CounterType.packets) _ipv4_multicast_route_star_g_stats_0; + @name(".process_ipv4_multicast.on_miss") action _process_ipv4_multicast_on_miss() { + } + @name(".process_ipv4_multicast.multicast_bridge_s_g_hit") action _process_ipv4_multicast_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_32) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index_32; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.nop") action _process_ipv4_multicast_nop() { + } + @name(".process_ipv4_multicast.multicast_bridge_star_g_hit") action _process_ipv4_multicast_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_33) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index_33; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".ipv4_multicast_bridge") table _ipv4_multicast_bridge_0 { + actions = { + _process_ipv4_multicast_on_miss(); + _process_ipv4_multicast_multicast_bridge_s_g_hit(); + @defaultonly NoAction_78(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_78(); + } + @name(".ipv4_multicast_bridge_star_g") table _ipv4_multicast_bridge_star_g_0 { + actions = { + _process_ipv4_multicast_nop(); + _process_ipv4_multicast_multicast_bridge_star_g_hit(); + @defaultonly NoAction_79(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_79(); + } + @name(".process_ipv4_multicast.on_miss_0") action _process_ipv4_multicast_on_miss_0() { + _ipv4_multicast_route_s_g_stats_0.count(); + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit_0") action _process_ipv4_multicast_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_34, @name("mcast_rpf_group") bit<16> mcast_rpf_group_18) { + _ipv4_multicast_route_s_g_stats_0.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index_34; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_18 ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route") table _ipv4_multicast_route_0 { + actions = { + _process_ipv4_multicast_on_miss_0(); + _process_ipv4_multicast_multicast_route_s_g_hit(); + @defaultonly NoAction_80(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = _ipv4_multicast_route_s_g_stats_0; + default_action = NoAction_80(); + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss_0") action _process_ipv4_multicast_multicast_route_star_g_miss() { + _ipv4_multicast_route_star_g_stats_0.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit_0") action _process_ipv4_multicast_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_35, @name("mcast_rpf_group") bit<16> mcast_rpf_group_19) { + _ipv4_multicast_route_star_g_stats_0.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index_35; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_19 ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit_0") action _process_ipv4_multicast_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_36, @name("mcast_rpf_group") bit<16> mcast_rpf_group_20) { + _ipv4_multicast_route_star_g_stats_0.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index_36; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_20 | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route_star_g") table _ipv4_multicast_route_star_g_0 { + actions = { + _process_ipv4_multicast_multicast_route_star_g_miss(); + _process_ipv4_multicast_multicast_route_sm_star_g_hit(); + _process_ipv4_multicast_multicast_route_bidir_star_g_hit(); + @defaultonly NoAction_81(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = _ipv4_multicast_route_star_g_stats_0; + default_action = NoAction_81(); + } + @name(".ipv6_multicast_route_s_g_stats") direct_counter(CounterType.packets) _ipv6_multicast_route_s_g_stats_0; + @name(".ipv6_multicast_route_star_g_stats") direct_counter(CounterType.packets) _ipv6_multicast_route_star_g_stats_0; + @name(".process_ipv6_multicast.on_miss") action _process_ipv6_multicast_on_miss() { + } + @name(".process_ipv6_multicast.multicast_bridge_s_g_hit") action _process_ipv6_multicast_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_37) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index_37; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.nop") action _process_ipv6_multicast_nop() { + } + @name(".process_ipv6_multicast.multicast_bridge_star_g_hit") action _process_ipv6_multicast_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_38) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index_38; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".ipv6_multicast_bridge") table _ipv6_multicast_bridge_0 { + actions = { + _process_ipv6_multicast_on_miss(); + _process_ipv6_multicast_multicast_bridge_s_g_hit(); + @defaultonly NoAction_82(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_82(); + } + @name(".ipv6_multicast_bridge_star_g") table _ipv6_multicast_bridge_star_g_0 { + actions = { + _process_ipv6_multicast_nop(); + _process_ipv6_multicast_multicast_bridge_star_g_hit(); + @defaultonly NoAction_83(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_83(); + } + @name(".process_ipv6_multicast.on_miss_1") action _process_ipv6_multicast_on_miss_0() { + _ipv6_multicast_route_s_g_stats_0.count(); + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit_1") action _process_ipv6_multicast_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_39, @name("mcast_rpf_group") bit<16> mcast_rpf_group_21) { + _ipv6_multicast_route_s_g_stats_0.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index_39; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_21 ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route") table _ipv6_multicast_route_0 { + actions = { + _process_ipv6_multicast_on_miss_0(); + _process_ipv6_multicast_multicast_route_s_g_hit(); + @defaultonly NoAction_84(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = _ipv6_multicast_route_s_g_stats_0; + default_action = NoAction_84(); + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss_1") action _process_ipv6_multicast_multicast_route_star_g_miss() { + _ipv6_multicast_route_star_g_stats_0.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit_1") action _process_ipv6_multicast_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_40, @name("mcast_rpf_group") bit<16> mcast_rpf_group_22) { + _ipv6_multicast_route_star_g_stats_0.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index_40; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_22 ^ meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit_1") action _process_ipv6_multicast_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_41, @name("mcast_rpf_group") bit<16> mcast_rpf_group_23) { + _ipv6_multicast_route_star_g_stats_0.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index_41; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group_23 | meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route_star_g") table _ipv6_multicast_route_star_g_0 { + actions = { + _process_ipv6_multicast_multicast_route_star_g_miss(); + _process_ipv6_multicast_multicast_route_sm_star_g_hit(); + _process_ipv6_multicast_multicast_route_bidir_star_g_hit(); + @defaultonly NoAction_85(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = _ipv6_multicast_route_star_g_stats_0; + default_action = NoAction_85(); + } + @name(".process_ipv4_racl.nop") action _process_ipv4_racl_nop_0() { + } + @name(".process_ipv4_racl.racl_deny") action _process_ipv4_racl_racl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_33, @name("acl_copy") bit<1> acl_copy_28, @name("acl_copy_reason") bit<16> acl_copy_reason_27) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_33; + meta.acl_metadata.acl_copy = acl_copy_28; + meta.fabric_metadata.reason_code = acl_copy_reason_27; + } + @name(".process_ipv4_racl.racl_permit") action _process_ipv4_racl_racl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_34, @name("acl_copy") bit<1> acl_copy_29, @name("acl_copy_reason") bit<16> acl_copy_reason_28) { + meta.acl_metadata.acl_stats_index = acl_stats_index_34; + meta.acl_metadata.acl_copy = acl_copy_29; + meta.fabric_metadata.reason_code = acl_copy_reason_28; + } + @name(".process_ipv4_racl.racl_redirect_nexthop") action _process_ipv4_racl_racl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_13, @name("acl_stats_index") bit<14> acl_stats_index_35, @name("acl_copy") bit<1> acl_copy_30, @name("acl_copy_reason") bit<16> acl_copy_reason_29) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index_13; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index_35; + meta.acl_metadata.acl_copy = acl_copy_30; + meta.fabric_metadata.reason_code = acl_copy_reason_29; + } + @name(".process_ipv4_racl.racl_redirect_ecmp") action _process_ipv4_racl_racl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_10, @name("acl_stats_index") bit<14> acl_stats_index_36, @name("acl_copy") bit<1> acl_copy_31, @name("acl_copy_reason") bit<16> acl_copy_reason_30) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index_10; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_36; + meta.acl_metadata.acl_copy = acl_copy_31; + meta.fabric_metadata.reason_code = acl_copy_reason_30; + } + @name(".ipv4_racl") table _ipv4_racl { + actions = { + _process_ipv4_racl_nop_0(); + _process_ipv4_racl_racl_deny_0(); + _process_ipv4_racl_racl_permit_0(); + _process_ipv4_racl_racl_redirect_nexthop_0(); + _process_ipv4_racl_racl_redirect_ecmp_0(); + @defaultonly NoAction_86(); + } + key = { + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv4_metadata.lkp_ipv4_sa: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv4_metadata.lkp_ipv4_da: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction_86(); + } + @name(".process_ipv4_urpf.on_miss") action _process_ipv4_urpf_on_miss_0() { + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action _process_ipv4_urpf_ipv4_urpf_hit_0(@name("urpf_bd_group") bit<16> urpf_bd_group_2) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group_2; + meta.l3_metadata.urpf_mode = meta.ipv4_metadata.ipv4_urpf_mode; + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action _process_ipv4_urpf_ipv4_urpf_hit_1(@name("urpf_bd_group") bit<16> urpf_bd_group_3) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group_3; + meta.l3_metadata.urpf_mode = meta.ipv4_metadata.ipv4_urpf_mode; + } + @name(".process_ipv4_urpf.urpf_miss") action _process_ipv4_urpf_urpf_miss_0() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv4_urpf") table _ipv4_urpf { + actions = { + _process_ipv4_urpf_on_miss_0(); + _process_ipv4_urpf_ipv4_urpf_hit_0(); + @defaultonly NoAction_87(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction_87(); + } + @name(".ipv4_urpf_lpm") table _ipv4_urpf_lpm { + actions = { + _process_ipv4_urpf_ipv4_urpf_hit_1(); + _process_ipv4_urpf_urpf_miss_0(); + @defaultonly NoAction_88(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_sa: lpm @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 512; + default_action = NoAction_88(); + } + @name(".process_ipv4_fib.on_miss") action _process_ipv4_fib_on_miss_0() { + } + @name(".process_ipv4_fib.on_miss") action _process_ipv4_fib_on_miss_1() { + } + @name(".process_ipv4_fib.fib_hit_nexthop") action _process_ipv4_fib_fib_hit_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_14) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index_14; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv4_fib.fib_hit_nexthop") action _process_ipv4_fib_fib_hit_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_15) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index_15; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action _process_ipv4_fib_fib_hit_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_11) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index_11; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action _process_ipv4_fib_fib_hit_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_12) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index_12; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv4_fib") table _ipv4_fib { + actions = { + _process_ipv4_fib_on_miss_0(); + _process_ipv4_fib_fib_hit_nexthop_0(); + _process_ipv4_fib_fib_hit_ecmp_0(); + @defaultonly NoAction_89(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_89(); + } + @name(".ipv4_fib_lpm") table _ipv4_fib_lpm { + actions = { + _process_ipv4_fib_on_miss_1(); + _process_ipv4_fib_fib_hit_nexthop_1(); + _process_ipv4_fib_fib_hit_ecmp_1(); + @defaultonly NoAction_90(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv4_metadata.lkp_ipv4_da: lpm @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction_90(); + } + @name(".process_ipv6_racl.nop") action _process_ipv6_racl_nop_0() { + } + @name(".process_ipv6_racl.racl_deny") action _process_ipv6_racl_racl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_37, @name("acl_copy") bit<1> acl_copy_32, @name("acl_copy_reason") bit<16> acl_copy_reason_31) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_37; + meta.acl_metadata.acl_copy = acl_copy_32; + meta.fabric_metadata.reason_code = acl_copy_reason_31; + } + @name(".process_ipv6_racl.racl_permit") action _process_ipv6_racl_racl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_38, @name("acl_copy") bit<1> acl_copy_33, @name("acl_copy_reason") bit<16> acl_copy_reason_32) { + meta.acl_metadata.acl_stats_index = acl_stats_index_38; + meta.acl_metadata.acl_copy = acl_copy_33; + meta.fabric_metadata.reason_code = acl_copy_reason_32; + } + @name(".process_ipv6_racl.racl_redirect_nexthop") action _process_ipv6_racl_racl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_16, @name("acl_stats_index") bit<14> acl_stats_index_39, @name("acl_copy") bit<1> acl_copy_34, @name("acl_copy_reason") bit<16> acl_copy_reason_33) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index_16; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index_39; + meta.acl_metadata.acl_copy = acl_copy_34; + meta.fabric_metadata.reason_code = acl_copy_reason_33; + } + @name(".process_ipv6_racl.racl_redirect_ecmp") action _process_ipv6_racl_racl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_13, @name("acl_stats_index") bit<14> acl_stats_index_40, @name("acl_copy") bit<1> acl_copy_35, @name("acl_copy_reason") bit<16> acl_copy_reason_34) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index_13; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index_40; + meta.acl_metadata.acl_copy = acl_copy_35; + meta.fabric_metadata.reason_code = acl_copy_reason_34; + } + @name(".ipv6_racl") table _ipv6_racl { + actions = { + _process_ipv6_racl_nop_0(); + _process_ipv6_racl_racl_deny_0(); + _process_ipv6_racl_racl_permit_0(); + _process_ipv6_racl_racl_redirect_nexthop_0(); + _process_ipv6_racl_racl_redirect_ecmp_0(); + @defaultonly NoAction_91(); + } + key = { + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.ipv6_metadata.lkp_ipv6_sa: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta.ipv6_metadata.lkp_ipv6_da: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta.l3_metadata.lkp_ip_proto : ternary @name("l3_metadata.lkp_ip_proto"); + meta.l3_metadata.lkp_l4_sport : ternary @name("l3_metadata.lkp_l4_sport"); + meta.l3_metadata.lkp_l4_dport : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction_91(); + } + @name(".process_ipv6_urpf.on_miss") action _process_ipv6_urpf_on_miss_0() { + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action _process_ipv6_urpf_ipv6_urpf_hit_0(@name("urpf_bd_group") bit<16> urpf_bd_group_4) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group_4; + meta.l3_metadata.urpf_mode = meta.ipv6_metadata.ipv6_urpf_mode; + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action _process_ipv6_urpf_ipv6_urpf_hit_1(@name("urpf_bd_group") bit<16> urpf_bd_group_5) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group_5; + meta.l3_metadata.urpf_mode = meta.ipv6_metadata.ipv6_urpf_mode; + } + @name(".process_ipv6_urpf.urpf_miss") action _process_ipv6_urpf_urpf_miss_0() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv6_urpf") table _ipv6_urpf { + actions = { + _process_ipv6_urpf_on_miss_0(); + _process_ipv6_urpf_ipv6_urpf_hit_0(); + @defaultonly NoAction_92(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: exact @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 1024; + default_action = NoAction_92(); + } + @name(".ipv6_urpf_lpm") table _ipv6_urpf_lpm { + actions = { + _process_ipv6_urpf_ipv6_urpf_hit_1(); + _process_ipv6_urpf_urpf_miss_0(); + @defaultonly NoAction_93(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_sa: lpm @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction_93(); + } + @name(".process_ipv6_fib.on_miss") action _process_ipv6_fib_on_miss_0() { + } + @name(".process_ipv6_fib.on_miss") action _process_ipv6_fib_on_miss_1() { + } + @name(".process_ipv6_fib.fib_hit_nexthop") action _process_ipv6_fib_fib_hit_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_17) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index_17; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv6_fib.fib_hit_nexthop") action _process_ipv6_fib_fib_hit_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_18) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index_18; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action _process_ipv6_fib_fib_hit_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_14) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index_14; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action _process_ipv6_fib_fib_hit_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_15) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index_15; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv6_fib") table _ipv6_fib { + actions = { + _process_ipv6_fib_on_miss_0(); + _process_ipv6_fib_fib_hit_nexthop_0(); + _process_ipv6_fib_fib_hit_ecmp_0(); + @defaultonly NoAction_94(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_94(); + } + @name(".ipv6_fib_lpm") table _ipv6_fib_lpm { + actions = { + _process_ipv6_fib_on_miss_1(); + _process_ipv6_fib_fib_hit_nexthop_1(); + _process_ipv6_fib_fib_hit_ecmp_1(); + @defaultonly NoAction_95(); + } + key = { + meta.l3_metadata.vrf : exact @name("l3_metadata.vrf"); + meta.ipv6_metadata.lkp_ipv6_da: lpm @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 512; + default_action = NoAction_95(); + } + @name(".process_urpf_bd.nop") action _process_urpf_bd_nop_0() { + } + @name(".process_urpf_bd.urpf_bd_miss") action _process_urpf_bd_urpf_bd_miss_0() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".urpf_bd") table _urpf_bd { + actions = { + _process_urpf_bd_nop_0(); + _process_urpf_bd_urpf_bd_miss_0(); + @defaultonly NoAction_96(); + } + key = { + meta.l3_metadata.urpf_bd_group: exact @name("l3_metadata.urpf_bd_group"); + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + } + size = 1024; + default_action = NoAction_96(); + } + @name(".meter_index") direct_meter>(MeterType.bytes) _meter_index; + @name(".process_meter_index.nop_2") action _process_meter_index_nop_0() { + _meter_index.read(meta.meter_metadata.meter_color); + } + @name(".meter_index") table _meter_index_0 { + actions = { + _process_meter_index_nop_0(); + @defaultonly NoAction_97(); + } + key = { + meta.meter_metadata.meter_index: exact @name("meter_metadata.meter_index"); + } + size = 1024; + meters = _meter_index; + default_action = NoAction_97(); + } + @name(".process_hashes.compute_lkp_ipv4_hash") action _process_hashes_compute_lkp_ipv4_hash_0() { + hash, bit<16>, tuple, bit<32>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash1, HashAlgorithm.crc16, 16w0, { meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + hash, bit<16>, tuple, bit<48>, bit<32>, bit<32>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + } + @name(".process_hashes.compute_lkp_ipv6_hash") action _process_hashes_compute_lkp_ipv6_hash_0() { + hash, bit<16>, tuple, bit<128>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash1, HashAlgorithm.crc16, 16w0, { meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + hash, bit<16>, tuple, bit<48>, bit<128>, bit<128>, bit<8>, bit<16>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, 32w65536); + } + @name(".process_hashes.compute_lkp_non_ip_hash") action _process_hashes_compute_lkp_non_ip_hash_0() { + hash, bit<16>, tuple, bit<48>, bit<48>, bit<16>>, bit<32>>(meta.hash_metadata.hash2, HashAlgorithm.crc16, 16w0, { meta.ingress_metadata.ifindex, meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.l2_metadata.lkp_mac_type }, 32w65536); + } + @name(".process_hashes.computed_two_hashes") action _process_hashes_computed_two_hashes_0() { + meta.hash_metadata.entropy_hash = meta.hash_metadata.hash2; + } + @name(".process_hashes.computed_one_hash") action _process_hashes_computed_one_hash_0() { + meta.hash_metadata.hash1 = meta.hash_metadata.hash2; + meta.hash_metadata.entropy_hash = meta.hash_metadata.hash2; + } + @name(".compute_ipv4_hashes") table _compute_ipv4_hashes { + actions = { + _process_hashes_compute_lkp_ipv4_hash_0(); + @defaultonly NoAction_98(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_98(); + } + @name(".compute_ipv6_hashes") table _compute_ipv6_hashes { + actions = { + _process_hashes_compute_lkp_ipv6_hash_0(); + @defaultonly NoAction_99(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_99(); + } + @name(".compute_non_ip_hashes") table _compute_non_ip_hashes { + actions = { + _process_hashes_compute_lkp_non_ip_hash_0(); + @defaultonly NoAction_100(); + } + key = { + meta.ingress_metadata.drop_flag: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_100(); + } + @name(".compute_other_hashes") table _compute_other_hashes { + actions = { + _process_hashes_computed_two_hashes_0(); + _process_hashes_computed_one_hash_0(); + @defaultonly NoAction_101(); + } + key = { + meta.hash_metadata.hash1: exact @name("hash_metadata.hash1"); + } + default_action = NoAction_101(); + } + @name(".meter_stats") direct_counter(CounterType.packets) _meter_stats; + @name(".process_meter_action.meter_permit_0") action _process_meter_action_meter_permit_0() { + _meter_stats.count(); + } + @name(".process_meter_action.meter_deny_0") action _process_meter_action_meter_deny_0() { + _meter_stats.count(); + mark_to_drop(standard_metadata); + } + @name(".meter_action") table _meter_action { + actions = { + _process_meter_action_meter_permit_0(); + _process_meter_action_meter_deny_0(); + @defaultonly NoAction_102(); + } + key = { + meta.meter_metadata.meter_color: exact @name("meter_metadata.meter_color"); + meta.meter_metadata.meter_index: exact @name("meter_metadata.meter_index"); + } + size = 1024; + counters = _meter_stats; + default_action = NoAction_102(); + } + @name(".process_ingress_bd_stats.update_ingress_bd_stats") action _process_ingress_bd_stats_update_ingress_bd_stats_0() { + ingress_bd_stats_count.count((bit<10>)meta.l2_metadata.bd_stats_idx); + } + @name(".ingress_bd_stats") table _ingress_bd_stats { + actions = { + _process_ingress_bd_stats_update_ingress_bd_stats_0(); + @defaultonly NoAction_103(); + } + size = 1024; + default_action = NoAction_103(); + } + @name(".process_ingress_acl_stats.acl_stats_update") action _process_ingress_acl_stats_acl_stats_update_0() { + acl_stats_count.count((bit<10>)meta.acl_metadata.acl_stats_index); + } + @name(".acl_stats") table _acl_stats { + actions = { + _process_ingress_acl_stats_acl_stats_update_0(); + @defaultonly NoAction_104(); + } + size = 1024; + default_action = NoAction_104(); + } + @name(".storm_control_stats") direct_counter(CounterType.packets) _storm_control_stats; + @name(".process_storm_control_stats.nop_3") action _process_storm_control_stats_nop_0() { + _storm_control_stats.count(); + } + @name(".storm_control_stats") table _storm_control_stats_0 { + actions = { + _process_storm_control_stats_nop_0(); + @defaultonly NoAction_105(); + } + key = { + meta.meter_metadata.meter_color: exact @name("meter_metadata.meter_color"); + standard_metadata.ingress_port : exact @name("standard_metadata.ingress_port"); + } + size = 1024; + counters = _storm_control_stats; + default_action = NoAction_105(); + } + @name(".process_fwd_results.nop") action _process_fwd_results_nop_0() { + } + @name(".process_fwd_results.set_l2_redirect_action") action _process_fwd_results_set_l2_redirect_action_0() { + meta.l3_metadata.nexthop_index = meta.l2_metadata.l2_nexthop; + meta.nexthop_metadata.nexthop_type = meta.l2_metadata.l2_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_fib_redirect_action") action _process_fwd_results_set_fib_redirect_action_0() { + meta.l3_metadata.nexthop_index = meta.l3_metadata.fib_nexthop; + meta.nexthop_metadata.nexthop_type = meta.l3_metadata.fib_nexthop_type; + meta.l3_metadata.routed = 1w1; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.reason_code = 16w0x217; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_cpu_redirect_action") action _process_fwd_results_set_cpu_redirect_action_0() { + meta.l3_metadata.routed = 1w0; + standard_metadata.mcast_grp = 16w0; + standard_metadata.egress_spec = 9w64; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_acl_redirect_action") action _process_fwd_results_set_acl_redirect_action_0() { + meta.l3_metadata.nexthop_index = meta.acl_metadata.acl_nexthop; + meta.nexthop_metadata.nexthop_type = meta.acl_metadata.acl_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_racl_redirect_action") action _process_fwd_results_set_racl_redirect_action_0() { + meta.l3_metadata.nexthop_index = meta.acl_metadata.racl_nexthop; + meta.nexthop_metadata.nexthop_type = meta.acl_metadata.racl_nexthop_type; + meta.l3_metadata.routed = 1w1; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_multicast_route_action") action _process_fwd_results_set_multicast_route_action_0() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = meta.multicast_metadata.multicast_route_mc_index; + meta.l3_metadata.routed = 1w1; + meta.l3_metadata.same_bd_check = 16w0xffff; + } + @name(".process_fwd_results.set_multicast_bridge_action") action _process_fwd_results_set_multicast_bridge_action_0() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = meta.multicast_metadata.multicast_bridge_mc_index; + } + @name(".process_fwd_results.set_multicast_flood") action _process_fwd_results_set_multicast_flood_0() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w65535; + } + @name(".process_fwd_results.set_multicast_drop") action _process_fwd_results_set_multicast_drop_0() { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = 8w44; + } + @name(".fwd_result") table _fwd_result { + actions = { + _process_fwd_results_nop_0(); + _process_fwd_results_set_l2_redirect_action_0(); + _process_fwd_results_set_fib_redirect_action_0(); + _process_fwd_results_set_cpu_redirect_action_0(); + _process_fwd_results_set_acl_redirect_action_0(); + _process_fwd_results_set_racl_redirect_action_0(); + _process_fwd_results_set_multicast_route_action_0(); + _process_fwd_results_set_multicast_bridge_action_0(); + _process_fwd_results_set_multicast_flood_0(); + _process_fwd_results_set_multicast_drop_0(); + @defaultonly NoAction_106(); + } + key = { + meta.l2_metadata.l2_redirect : ternary @name("l2_metadata.l2_redirect"); + meta.acl_metadata.acl_redirect : ternary @name("acl_metadata.acl_redirect"); + meta.acl_metadata.racl_redirect : ternary @name("acl_metadata.racl_redirect"); + meta.l3_metadata.rmac_hit : ternary @name("l3_metadata.rmac_hit"); + meta.l3_metadata.fib_hit : ternary @name("l3_metadata.fib_hit"); + meta.l2_metadata.lkp_pkt_type : ternary @name("l2_metadata.lkp_pkt_type"); + meta.l3_metadata.lkp_ip_type : ternary @name("l3_metadata.lkp_ip_type"); + meta.multicast_metadata.igmp_snooping_enabled: ternary @name("multicast_metadata.igmp_snooping_enabled"); + meta.multicast_metadata.mld_snooping_enabled : ternary @name("multicast_metadata.mld_snooping_enabled"); + meta.multicast_metadata.mcast_route_hit : ternary @name("multicast_metadata.mcast_route_hit"); + meta.multicast_metadata.mcast_bridge_hit : ternary @name("multicast_metadata.mcast_bridge_hit"); + meta.multicast_metadata.mcast_rpf_group : ternary @name("multicast_metadata.mcast_rpf_group"); + meta.multicast_metadata.mcast_mode : ternary @name("multicast_metadata.mcast_mode"); + } + size = 512; + default_action = NoAction_106(); + } + @name(".process_nexthop.nop") action _process_nexthop_nop_0() { + } + @name(".process_nexthop.nop") action _process_nexthop_nop_1() { + } + @name(".process_nexthop.set_ecmp_nexthop_details") action _process_nexthop_set_ecmp_nexthop_details_0(@name("ifindex") bit<16> ifindex_20, @name("bd") bit<16> bd_30, @name("nhop_index") bit<16> nhop_index, @name("tunnel") bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex_20; + meta.l3_metadata.nexthop_index = nhop_index; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd_30; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex_20; + meta.tunnel_metadata.tunnel_if_check = meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood") action _process_nexthop_set_ecmp_nexthop_details_for_post_routed_flood_0(@name("bd") bit<16> bd_31, @name("uuc_mc_index") bit<16> uuc_mc_index, @name("nhop_index") bit<16> nhop_index_2) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.l3_metadata.nexthop_index = nhop_index_2; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd_31; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_nexthop.set_nexthop_details") action _process_nexthop_set_nexthop_details_0(@name("ifindex") bit<16> ifindex_21, @name("bd") bit<16> bd_32, @name("tunnel") bit<1> tunnel_0) { + meta.ingress_metadata.egress_ifindex = ifindex_21; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd_32; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ ifindex_21; + meta.tunnel_metadata.tunnel_if_check = meta.tunnel_metadata.tunnel_terminate ^ tunnel_0; + } + @name(".process_nexthop.set_nexthop_details_for_post_routed_flood") action _process_nexthop_set_nexthop_details_for_post_routed_flood_0(@name("bd") bit<16> bd_33, @name("uuc_mc_index") bit<16> uuc_mc_index_2) { + standard_metadata.mcast_grp = uuc_mc_index_2; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = meta.ingress_metadata.bd ^ bd_33; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".ecmp_group") table _ecmp_group { + actions = { + _process_nexthop_nop_0(); + _process_nexthop_set_ecmp_nexthop_details_0(); + _process_nexthop_set_ecmp_nexthop_details_for_post_routed_flood_0(); + @defaultonly NoAction_107(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + meta.hash_metadata.hash1 : selector @name("hash_metadata.hash1"); + } + size = 1024; + implementation = ecmp_action_profile; + default_action = NoAction_107(); + } + @name(".nexthop") table _nexthop { + actions = { + _process_nexthop_nop_1(); + _process_nexthop_set_nexthop_details_0(); + _process_nexthop_set_nexthop_details_for_post_routed_flood_0(); + @defaultonly NoAction_108(); + } + key = { + meta.l3_metadata.nexthop_index: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction_108(); + } + @name(".process_multicast_flooding.nop") action _process_multicast_flooding_nop_0() { + } + @name(".process_multicast_flooding.set_bd_flood_mc_index") action _process_multicast_flooding_set_bd_flood_mc_index_0(@name("mc_index") bit<16> mc_index_42) { + standard_metadata.mcast_grp = mc_index_42; + } + @name(".bd_flood") table _bd_flood { + actions = { + _process_multicast_flooding_nop_0(); + _process_multicast_flooding_set_bd_flood_mc_index_0(); + @defaultonly NoAction_109(); + } + key = { + meta.ingress_metadata.bd : exact @name("ingress_metadata.bd"); + meta.l2_metadata.lkp_pkt_type: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + default_action = NoAction_109(); + } + @name(".process_lag.set_lag_miss") action _process_lag_set_lag_miss_0() { + } + @name(".process_lag.set_lag_port") action _process_lag_set_lag_port_0(@name("port") bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_lag.set_lag_remote_port") action _process_lag_set_lag_remote_port_0(@name("device") bit<8> device, @name("port") bit<16> port_3) { + meta.fabric_metadata.dst_device = device; + meta.fabric_metadata.dst_port = port_3; + } + @name(".lag_group") table _lag_group { + actions = { + _process_lag_set_lag_miss_0(); + _process_lag_set_lag_port_0(); + _process_lag_set_lag_remote_port_0(); + @defaultonly NoAction_110(); + } + key = { + meta.ingress_metadata.egress_ifindex: exact @name("ingress_metadata.egress_ifindex"); + meta.hash_metadata.hash2 : selector @name("hash_metadata.hash2"); + } + size = 1024; + implementation = lag_action_profile; + default_action = NoAction_110(); + } + @name(".process_mac_learning.nop") action _process_mac_learning_nop_0() { + } + @name(".process_mac_learning.generate_learn_notify") action _process_mac_learning_generate_learn_notify_0() { + digest(32w1024, (mac_learn_digest){bd = meta.ingress_metadata.bd,lkp_mac_sa = meta.l2_metadata.lkp_mac_sa,ifindex = meta.ingress_metadata.ifindex}); + } + @name(".learn_notify") table _learn_notify { + actions = { + _process_mac_learning_nop_0(); + _process_mac_learning_generate_learn_notify_0(); + @defaultonly NoAction_111(); + } + key = { + meta.l2_metadata.l2_src_miss: ternary @name("l2_metadata.l2_src_miss"); + meta.l2_metadata.l2_src_move: ternary @name("l2_metadata.l2_src_move"); + meta.l2_metadata.stp_state : ternary @name("l2_metadata.stp_state"); + } + size = 512; + default_action = NoAction_111(); + } + @name(".process_fabric_lag.nop") action _process_fabric_lag_nop_0() { + } + @name(".process_fabric_lag.set_fabric_lag_port") action _process_fabric_lag_set_fabric_lag_port_0(@name("port") bit<9> port_4) { + standard_metadata.egress_spec = port_4; + } + @name(".process_fabric_lag.set_fabric_multicast") action _process_fabric_lag_set_fabric_multicast_0(@name("fabric_mgid") bit<8> fabric_mgid_2) { + meta.multicast_metadata.mcast_grp = standard_metadata.mcast_grp; + } + @name(".fabric_lag") table _fabric_lag { + actions = { + _process_fabric_lag_nop_0(); + _process_fabric_lag_set_fabric_lag_port_0(); + _process_fabric_lag_set_fabric_multicast_0(); + @defaultonly NoAction_112(); + } + key = { + meta.fabric_metadata.dst_device: exact @name("fabric_metadata.dst_device"); + meta.hash_metadata.hash2 : selector @name("hash_metadata.hash2"); + } + implementation = fabric_lag_action_profile; + default_action = NoAction_112(); + } + @name(".process_system_acl.drop_stats_update") action _process_system_acl_drop_stats_update_0() { + drop_stats_2.count((bit<10>)meta.ingress_metadata.drop_reason); + } + @name(".process_system_acl.nop") action _process_system_acl_nop_0() { + } + @name(".process_system_acl.copy_to_cpu_with_reason") action _process_system_acl_copy_to_cpu_with_reason_0(@name("reason_code") bit<16> reason_code_6) { + meta.fabric_metadata.reason_code = reason_code_6; + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.redirect_to_cpu") action _process_system_acl_redirect_to_cpu_0(@name("reason_code") bit<16> reason_code_7) { + meta.fabric_metadata.reason_code = reason_code_7; + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + mark_to_drop(standard_metadata); + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_system_acl.copy_to_cpu") action _process_system_acl_copy_to_cpu_0() { + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.drop_packet") action _process_system_acl_drop_packet_0() { + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.drop_packet_with_reason") action _process_system_acl_drop_packet_with_reason_0(@name("drop_reason") bit<10> drop_reason_9) { + drop_stats.count(drop_reason_9); + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.negative_mirror") action _process_system_acl_negative_mirror_0(@name("session_id") bit<32> session_id_11) { + clone_preserving_field_list(CloneType.I2E, session_id_11, 8w5); + mark_to_drop(standard_metadata); + } + @name(".drop_stats") table _drop_stats { + actions = { + _process_system_acl_drop_stats_update_0(); + @defaultonly NoAction_113(); + } + size = 1024; + default_action = NoAction_113(); + } + @name(".system_acl") table _system_acl { + actions = { + _process_system_acl_nop_0(); + _process_system_acl_redirect_to_cpu_0(); + _process_system_acl_copy_to_cpu_with_reason_0(); + _process_system_acl_copy_to_cpu_0(); + _process_system_acl_drop_packet_0(); + _process_system_acl_drop_packet_with_reason_0(); + _process_system_acl_negative_mirror_0(); + @defaultonly NoAction_114(); + } + key = { + meta.acl_metadata.if_label : ternary @name("acl_metadata.if_label"); + meta.acl_metadata.bd_label : ternary @name("acl_metadata.bd_label"); + meta.l2_metadata.lkp_mac_sa : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary @name("l2_metadata.lkp_mac_da"); + meta.l2_metadata.lkp_mac_type : ternary @name("l2_metadata.lkp_mac_type"); + meta.ingress_metadata.ifindex : ternary @name("ingress_metadata.ifindex"); + meta.l2_metadata.port_vlan_mapping_miss : ternary @name("l2_metadata.port_vlan_mapping_miss"); + meta.security_metadata.ipsg_check_fail : ternary @name("security_metadata.ipsg_check_fail"); + meta.security_metadata.storm_control_color: ternary @name("security_metadata.storm_control_color"); + meta.acl_metadata.acl_deny : ternary @name("acl_metadata.acl_deny"); + meta.acl_metadata.racl_deny : ternary @name("acl_metadata.racl_deny"); + meta.l3_metadata.urpf_check_fail : ternary @name("l3_metadata.urpf_check_fail"); + meta.ingress_metadata.drop_flag : ternary @name("ingress_metadata.drop_flag"); + meta.acl_metadata.acl_copy : ternary @name("acl_metadata.acl_copy"); + meta.l3_metadata.l3_copy : ternary @name("l3_metadata.l3_copy"); + meta.l3_metadata.rmac_hit : ternary @name("l3_metadata.rmac_hit"); + meta.l3_metadata.routed : ternary @name("l3_metadata.routed"); + meta.ipv6_metadata.ipv6_src_is_link_local : ternary @name("ipv6_metadata.ipv6_src_is_link_local"); + meta.l2_metadata.same_if_check : ternary @name("l2_metadata.same_if_check"); + meta.tunnel_metadata.tunnel_if_check : ternary @name("tunnel_metadata.tunnel_if_check"); + meta.l3_metadata.same_bd_check : ternary @name("l3_metadata.same_bd_check"); + meta.l3_metadata.lkp_ip_ttl : ternary @name("l3_metadata.lkp_ip_ttl"); + meta.l2_metadata.stp_state : ternary @name("l2_metadata.stp_state"); + meta.ingress_metadata.control_frame : ternary @name("ingress_metadata.control_frame"); + meta.ipv4_metadata.ipv4_unicast_enabled : ternary @name("ipv4_metadata.ipv4_unicast_enabled"); + meta.ipv6_metadata.ipv6_unicast_enabled : ternary @name("ipv6_metadata.ipv6_unicast_enabled"); + meta.ingress_metadata.egress_ifindex : ternary @name("ingress_metadata.egress_ifindex"); + } + size = 512; + default_action = NoAction_114(); + } + apply { + _ingress_port_mapping.apply(); + _ingress_port_properties.apply(); + switch (_validate_outer_ethernet.apply().action_run) { + _process_validate_outer_header_malformed_outer_ethernet_packet_0: { + } + default: { + if (hdr.ipv4.isValid()) { + _validate_outer_ipv4_packet_0.apply(); + } else if (hdr.ipv6.isValid()) { + _validate_outer_ipv6_packet_0.apply(); + } else if (hdr.mpls[0].isValid()) { + _validate_mpls_packet_0.apply(); + } + } + } + _switch_config_params.apply(); + _port_vlan_mapping.apply(); + if (meta.ingress_metadata.port_type == 2w0 && meta.l2_metadata.stp_group != 10w0) { + _spanning_tree.apply(); + } + if (meta.ingress_metadata.port_type == 2w0 && meta.security_metadata.ipsg_enabled == 1w1) { + switch (_ipsg.apply().action_run) { + _process_ip_sourceguard_on_miss_0: { + _ipsg_permit_special.apply(); + } + default: { + } + } + } + if (hdr.int_header.isValid()) { + _int_terminate.apply(); + _int_sink_update_outer.apply(); + } else { + _int_source.apply(); + } + if (meta.ingress_metadata.port_type != 2w0) { + _fabric_ingress_dst_lkp_0.apply(); + if (meta.ingress_metadata.port_type == 2w1) { + if (hdr.fabric_header_multicast.isValid()) { + _fabric_ingress_src_lkp_0.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w0) { + _native_packet_over_fabric_0.apply(); + } + } + } + if (meta.tunnel_metadata.ingress_tunnel_type != 5w0) { + switch (_outer_rmac.apply().action_run) { + _process_tunnel_on_miss_0: { + if (hdr.ipv4.isValid()) { + switch (_outer_ipv4_multicast_0.apply().action_run) { + _process_outer_ipv4_multicast_on_miss: { + _outer_ipv4_multicast_star_g_0.apply(); + } + default: { + } + } + } else if (hdr.ipv6.isValid()) { + switch (_outer_ipv6_multicast_0.apply().action_run) { + _process_outer_ipv6_multicast_on_miss: { + _outer_ipv6_multicast_star_g_0.apply(); + } + default: { + } + } + } + } + default: { + if (hdr.ipv4.isValid()) { + switch (_ipv4_src_vtep_0.apply().action_run) { + _process_ipv4_vtep_src_vtep_hit: { + _ipv4_dest_vtep_0.apply(); + } + default: { + } + } + } else if (hdr.ipv6.isValid()) { + switch (_ipv6_src_vtep_0.apply().action_run) { + _process_ipv6_vtep_src_vtep_hit: { + _ipv6_dest_vtep_0.apply(); + } + default: { + } + } + } else if (hdr.mpls[0].isValid()) { + _mpls_0.apply(); + } + } + } + } + if (meta.tunnel_metadata.tunnel_terminate == 1w1 || meta.multicast_metadata.outer_mcast_route_hit == 1w1 && (meta.multicast_metadata.outer_mcast_mode == 2w1 && meta.multicast_metadata.mcast_rpf_group == 16w0 || meta.multicast_metadata.outer_mcast_mode == 2w2 && meta.multicast_metadata.mcast_rpf_group != 16w0)) { + switch (_tunnel.apply().action_run) { + _process_tunnel_tunnel_lookup_miss_0: { + _tunnel_lookup_miss.apply(); + } + default: { + } + } + } else { + _tunnel_miss.apply(); + } + _sflow_ingress.apply(); + _sflow_ing_take_sample.apply(); + if (meta.ingress_metadata.port_type == 2w0) { + _storm_control.apply(); + } + if (meta.ingress_metadata.port_type != 2w1) { + if (hdr.mpls[0].isValid() && meta.l3_metadata.fib_hit == 1w1) { + ; + } else { + if (meta.ingress_metadata.drop_flag == 1w0) { + _validate_packet.apply(); + } + if (meta.ingress_metadata.port_type == 2w0) { + _smac.apply(); + } + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + _dmac.apply(); + } + if (meta.l3_metadata.lkp_ip_type == 2w0) { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + _mac_acl.apply(); + } + } else if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + _ip_acl.apply(); + } else if (meta.l3_metadata.lkp_ip_type == 2w2) { + _ipv6_acl.apply(); + } + } + _qos.apply(); + switch (rmac_0.apply().action_run) { + rmac_miss: { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (_ipv4_multicast_bridge_0.apply().action_run) { + _process_ipv4_multicast_on_miss: { + _ipv4_multicast_bridge_star_g_0.apply(); + } + default: { + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv4_multicast_enabled == 1w1) { + switch (_ipv4_multicast_route_0.apply().action_run) { + _process_ipv4_multicast_on_miss_0: { + _ipv4_multicast_route_star_g_0.apply(); + } + default: { + } + } + } + } else if (meta.l3_metadata.lkp_ip_type == 2w2) { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (_ipv6_multicast_bridge_0.apply().action_run) { + _process_ipv6_multicast_on_miss: { + _ipv6_multicast_bridge_star_g_0.apply(); + } + default: { + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv6_multicast_enabled == 1w1) { + switch (_ipv6_multicast_route_0.apply().action_run) { + _process_ipv6_multicast_on_miss_0: { + _ipv6_multicast_route_star_g_0.apply(); + } + default: { + } + } + } + } + } + default: { + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1 && meta.ipv4_metadata.ipv4_unicast_enabled == 1w1) { + _ipv4_racl.apply(); + if (meta.ipv4_metadata.ipv4_urpf_mode != 2w0) { + switch (_ipv4_urpf.apply().action_run) { + _process_ipv4_urpf_on_miss_0: { + _ipv4_urpf_lpm.apply(); + } + default: { + } + } + } + switch (_ipv4_fib.apply().action_run) { + _process_ipv4_fib_on_miss_0: { + _ipv4_fib_lpm.apply(); + } + default: { + } + } + } else if (meta.l3_metadata.lkp_ip_type == 2w2 && meta.ipv6_metadata.ipv6_unicast_enabled == 1w1) { + _ipv6_racl.apply(); + if (meta.ipv6_metadata.ipv6_urpf_mode != 2w0) { + switch (_ipv6_urpf.apply().action_run) { + _process_ipv6_urpf_on_miss_0: { + _ipv6_urpf_lpm.apply(); + } + default: { + } + } + } + switch (_ipv6_fib.apply().action_run) { + _process_ipv6_fib_on_miss_0: { + _ipv6_fib_lpm.apply(); + } + default: { + } + } + } + if (meta.l3_metadata.urpf_mode == 2w2 && meta.l3_metadata.urpf_hit == 1w1) { + _urpf_bd.apply(); + } + } + } + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + _meter_index_0.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv4.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv4.isValid()) { + _compute_ipv4_hashes.apply(); + } else if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv6.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv6.isValid()) { + _compute_ipv6_hashes.apply(); + } else { + _compute_non_ip_hashes.apply(); + } + _compute_other_hashes.apply(); + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + _meter_action.apply(); + } + if (meta.ingress_metadata.port_type != 2w1) { + _ingress_bd_stats.apply(); + _acl_stats.apply(); + _storm_control_stats_0.apply(); + if (meta.ingress_metadata.bypass_lookups != 16w0xffff) { + _fwd_result.apply(); + } + if (meta.nexthop_metadata.nexthop_type == 1w1) { + _ecmp_group.apply(); + } else { + _nexthop.apply(); + } + if (meta.ingress_metadata.egress_ifindex == 16w65535) { + _bd_flood.apply(); + } else { + _lag_group.apply(); + } + if (meta.l2_metadata.learning_enabled == 1w1) { + _learn_notify.apply(); + } + } + _fabric_lag.apply(); + if (meta.ingress_metadata.port_type != 2w1) { + if (meta.ingress_metadata.bypass_lookups & 16w0x20 == 16w0) { + _system_acl.apply(); + if (meta.ingress_metadata.drop_flag == 1w1) { + _drop_stats.apply(); + } + } + } + } +} + +control DeparserImpl(packet_out packet, in headers hdr) { + apply { + packet.emit(hdr.ethernet); + packet.emit(hdr.fabric_header); + packet.emit(hdr.fabric_header_cpu); + packet.emit(hdr.fabric_header_sflow); + packet.emit(hdr.fabric_header_mirror); + packet.emit(hdr.fabric_header_multicast); + packet.emit(hdr.fabric_header_unicast); + packet.emit(hdr.fabric_payload_header); + packet.emit(hdr.llc_header); + packet.emit(hdr.snap_header); + packet.emit(hdr.vlan_tag_[0]); + packet.emit(hdr.vlan_tag_[1]); + packet.emit(hdr.arp_rarp); + packet.emit(hdr.arp_rarp_ipv4); + packet.emit(hdr.ipv6); + packet.emit(hdr.ipv4); + packet.emit(hdr.gre); + packet.emit(hdr.erspan_t3_header); + packet.emit(hdr.nvgre); + packet.emit(hdr.udp); + packet.emit(hdr.sflow); + packet.emit(hdr.vxlan_gpe); + packet.emit(hdr.vxlan_gpe_int_header); + packet.emit(hdr.int_header); + packet.emit(hdr.int_switch_id_header); + packet.emit(hdr.int_ingress_port_id_header); + packet.emit(hdr.int_hop_latency_header); + packet.emit(hdr.int_q_occupancy_header); + packet.emit(hdr.int_ingress_tstamp_header); + packet.emit(hdr.int_egress_port_id_header); + packet.emit(hdr.int_q_congestion_header); + packet.emit(hdr.int_egress_port_tx_utilization_header); + packet.emit(hdr.int_val); + packet.emit(hdr.genv); + packet.emit(hdr.vxlan); + packet.emit(hdr.tcp); + packet.emit(hdr.icmp); + packet.emit(hdr.mpls); + packet.emit(hdr.inner_ethernet); + packet.emit(hdr.inner_ipv6); + packet.emit(hdr.inner_ipv4); + packet.emit(hdr.inner_udp); + packet.emit(hdr.inner_tcp); + packet.emit(hdr.inner_icmp); + } +} + +control verifyChecksum(inout headers hdr, inout metadata meta) { + apply { + verify_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + verify_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +control computeChecksum(inout headers hdr, inout metadata meta) { + apply { + update_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + update_checksum, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>, bit<16>>(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +V1Switch(ParserImpl(), verifyChecksum(), ingress(), egress(), computeChecksum(), DeparserImpl()) main; diff --git a/testdata/p4_16_samples_outputs/switch_p4_16-midend.p4 b/testdata/p4_16_samples_outputs/switch_p4_16-midend.p4 new file mode 100644 index 00000000000..e8b29c7695e --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16-midend.p4 @@ -0,0 +1,6188 @@ +#include +#define V1MODEL_VERSION 20200408 +#include + +struct acl_metadata_t { + bit<1> acl_deny; + bit<1> acl_copy; + bit<1> racl_deny; + bit<16> acl_nexthop; + bit<16> racl_nexthop; + bit<1> acl_nexthop_type; + bit<1> racl_nexthop_type; + bit<1> acl_redirect; + bit<1> racl_redirect; + bit<16> if_label; + bit<16> bd_label; + bit<14> acl_stats_index; +} + +struct egress_filter_metadata_t { + bit<16> ifindex_check; + bit<16> bd; + bit<16> inner_bd; +} + +struct egress_metadata_t { + bit<1> bypass; + bit<2> port_type; + bit<16> payload_length; + bit<9> smac_idx; + bit<16> bd; + bit<16> outer_bd; + bit<48> mac_da; + bit<1> routed; + bit<16> same_bd_check; + bit<8> drop_reason; + bit<16> ifindex; +} + +struct fabric_metadata_t { + bit<3> packetType; + bit<1> fabric_header_present; + @field_list(8w2, 8w6) + bit<16> reason_code; + bit<8> dst_device; + bit<16> dst_port; +} + +struct global_config_metadata_t { + bit<1> enable_dod; +} + +struct hash_metadata_t { + bit<16> hash1; + bit<16> hash2; + bit<16> entropy_hash; +} + +struct i2e_metadata_t { + @field_list(8w1, 8w3) + bit<32> ingress_tstamp; + @field_list(8w1, 8w3, 8w4) + bit<16> mirror_session_id; +} + +struct ingress_metadata_t { + @field_list(8w2, 8w6) + bit<9> ingress_port; + @field_list(8w2, 8w5, 8w6) + bit<16> ifindex; + bit<16> egress_ifindex; + bit<2> port_type; + bit<16> outer_bd; + @field_list(8w2, 8w6) + bit<16> bd; + bit<1> drop_flag; + @field_list(8w5) + bit<8> drop_reason; + bit<1> control_frame; + bit<16> bypass_lookups; + @saturating + bit<32> sflow_take_sample; +} + +struct int_metadata_t { + bit<32> switch_id; + bit<8> insert_cnt; + bit<16> insert_byte_cnt; + bit<16> gpe_int_hdr_len; + bit<8> gpe_int_hdr_len8; + bit<16> instruction_cnt; +} + +struct int_metadata_i2e_t { + @field_list(8w4) + bit<1> sink; + bit<1> source; +} + +struct ingress_intrinsic_metadata_t { + bit<48> ingress_global_timestamp; + bit<16> mcast_grp; + bit<16> egress_rid; + bit<3> priority; +} + +struct ipv4_metadata_t { + bit<32> lkp_ipv4_sa; + bit<32> lkp_ipv4_da; + bit<1> ipv4_unicast_enabled; + bit<2> ipv4_urpf_mode; +} + +struct ipv6_metadata_t { + bit<128> lkp_ipv6_sa; + bit<128> lkp_ipv6_da; + bit<1> ipv6_unicast_enabled; + bit<1> ipv6_src_is_link_local; + bit<2> ipv6_urpf_mode; +} + +struct l2_metadata_t { + bit<48> lkp_mac_sa; + bit<48> lkp_mac_da; + bit<3> lkp_pkt_type; + bit<16> lkp_mac_type; + bit<16> l2_nexthop; + bit<1> l2_nexthop_type; + bit<1> l2_redirect; + bit<1> l2_src_miss; + bit<16> l2_src_move; + bit<10> stp_group; + bit<3> stp_state; + bit<16> bd_stats_idx; + bit<1> learning_enabled; + bit<1> port_vlan_mapping_miss; + bit<16> same_if_check; +} + +struct l3_metadata_t { + bit<2> lkp_ip_type; + bit<4> lkp_ip_version; + bit<8> lkp_ip_proto; + bit<8> lkp_ip_tc; + bit<8> lkp_ip_ttl; + bit<16> lkp_l4_sport; + bit<16> lkp_l4_dport; + bit<16> lkp_outer_l4_sport; + bit<16> lkp_outer_l4_dport; + bit<16> vrf; + bit<10> rmac_group; + bit<1> rmac_hit; + bit<2> urpf_mode; + bit<1> urpf_hit; + bit<1> urpf_check_fail; + bit<16> urpf_bd_group; + bit<1> fib_hit; + bit<16> fib_nexthop; + bit<1> fib_nexthop_type; + bit<16> same_bd_check; + bit<16> nexthop_index; + bit<1> routed; + bit<1> outer_routed; + bit<8> mtu_index; + bit<1> l3_copy; + @saturating + bit<16> l3_mtu_check; +} + +struct meter_metadata_t { + bit<2> meter_color; + bit<16> meter_index; +} + +struct multicast_metadata_t { + bit<1> ipv4_mcast_key_type; + bit<16> ipv4_mcast_key; + bit<1> ipv6_mcast_key_type; + bit<16> ipv6_mcast_key; + bit<1> outer_mcast_route_hit; + bit<2> outer_mcast_mode; + bit<1> mcast_route_hit; + bit<1> mcast_bridge_hit; + bit<1> ipv4_multicast_enabled; + bit<1> ipv6_multicast_enabled; + bit<1> igmp_snooping_enabled; + bit<1> mld_snooping_enabled; + bit<16> bd_mrpf_group; + bit<16> mcast_rpf_group; + bit<2> mcast_mode; + bit<16> multicast_route_mc_index; + bit<16> multicast_bridge_mc_index; + bit<1> inner_replica; + bit<1> replica; + bit<16> mcast_grp; +} + +struct nexthop_metadata_t { + bit<1> nexthop_type; +} + +struct qos_metadata_t { + bit<8> outer_dscp; + bit<3> marked_cos; + bit<8> marked_dscp; + bit<3> marked_exp; +} + +struct queueing_metadata_t { + bit<48> enq_timestamp; + bit<16> enq_qdepth; + bit<32> deq_timedelta; + bit<16> deq_qdepth; +} + +struct security_metadata_t { + bit<1> storm_control_color; + bit<1> ipsg_enabled; + bit<1> ipsg_check_fail; +} + +struct sflow_meta_t { + bit<16> sflow_session_id; +} + +struct tunnel_metadata_t { + bit<5> ingress_tunnel_type; + bit<24> tunnel_vni; + bit<1> mpls_enabled; + bit<20> mpls_label; + bit<3> mpls_exp; + bit<8> mpls_ttl; + bit<5> egress_tunnel_type; + bit<14> tunnel_index; + bit<9> tunnel_src_index; + bit<9> tunnel_smac_index; + bit<14> tunnel_dst_index; + bit<14> tunnel_dmac_index; + bit<24> vnid; + bit<1> tunnel_terminate; + bit<1> tunnel_if_check; + bit<4> egress_header_count; + bit<8> inner_ip_proto; +} + +header arp_rarp_t { + bit<16> hwType; + bit<16> protoType; + bit<8> hwAddrLen; + bit<8> protoAddrLen; + bit<16> opcode; +} + +header arp_rarp_ipv4_t { + bit<48> srcHwAddr; + bit<32> srcProtoAddr; + bit<48> dstHwAddr; + bit<32> dstProtoAddr; +} + +header bfd_t { + bit<3> version; + bit<5> diag; + bit<2> state; + bit<1> p; + bit<1> f; + bit<1> c; + bit<1> a; + bit<1> d; + bit<1> m; + bit<8> detectMult; + bit<8> len; + bit<32> myDiscriminator; + bit<32> yourDiscriminator; + bit<32> desiredMinTxInterval; + bit<32> requiredMinRxInterval; + bit<32> requiredMinEchoRxInterval; +} + +header eompls_t { + bit<4> zero; + bit<12> reserved; + bit<16> seqNo; +} + +@name("erspan_header_t3_t") header erspan_header_t3_t_0 { + bit<4> version; + bit<12> vlan; + bit<6> priority; + bit<10> span_id; + bit<32> timestamp; + bit<32> sgt_other; +} + +header ethernet_t { + bit<48> dstAddr; + bit<48> srcAddr; + bit<16> etherType; +} + +header fabric_header_t { + bit<3> packetType; + bit<2> headerVersion; + bit<2> packetVersion; + bit<1> pad1; + bit<3> fabricColor; + bit<5> fabricQos; + bit<8> dstDevice; + bit<16> dstPortOrGroup; +} + +header fabric_header_cpu_t { + bit<5> egressQueue; + bit<1> txBypass; + bit<2> reserved; + bit<16> ingressPort; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> reasonCode; +} + +header fabric_header_mirror_t { + bit<16> rewriteIndex; + bit<10> egressPort; + bit<5> egressQueue; + bit<1> pad; +} + +header fabric_header_multicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> mcastGrp; +} + +header fabric_header_sflow_t { + bit<16> sflow_session_id; +} + +header fabric_header_unicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> nexthopIndex; +} + +header fabric_payload_header_t { + bit<16> etherType; +} + +header fcoe_header_t { + bit<4> version; + bit<4> type_; + bit<8> sof; + bit<32> rsvd1; + bit<32> ts_upper; + bit<32> ts_lower; + bit<32> size_; + bit<8> eof; + bit<24> rsvd2; +} + +header genv_t { + bit<2> ver; + bit<6> optLen; + bit<1> oam; + bit<1> critical; + bit<6> reserved; + bit<16> protoType; + bit<24> vni; + bit<8> reserved2; +} + +header gre_t { + bit<1> C; + bit<1> R; + bit<1> K; + bit<1> S; + bit<1> s; + bit<3> recurse; + bit<5> flags; + bit<3> ver; + bit<16> proto; +} + +header icmp_t { + bit<16> typeCode; + bit<16> hdrChecksum; +} + +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; + bit<32> srcAddr; + bit<32> dstAddr; +} + +header ipv6_t { + bit<4> version; + bit<8> trafficClass; + bit<20> flowLabel; + bit<16> payloadLen; + bit<8> nextHdr; + bit<8> hopLimit; + bit<128> srcAddr; + bit<128> dstAddr; +} + +header sctp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> verifTag; + bit<32> checksum; +} + +header tcp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> seqNo; + bit<32> ackNo; + bit<4> dataOffset; + bit<4> res; + bit<8> flags; + bit<16> window; + bit<16> checksum; + bit<16> urgentPtr; +} + +header udp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<16> length_; + bit<16> checksum; +} + +header int_egress_port_id_header_t { + bit<1> bos; + bit<31> egress_port_id; +} + +header int_egress_port_tx_utilization_header_t { + bit<1> bos; + bit<31> egress_port_tx_utilization; +} + +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +header int_hop_latency_header_t { + bit<1> bos; + bit<31> hop_latency; +} + +header int_ingress_port_id_header_t { + bit<1> bos; + bit<15> ingress_port_id_1; + bit<16> ingress_port_id_0; +} + +header int_ingress_tstamp_header_t { + bit<1> bos; + bit<31> ingress_tstamp; +} + +header int_q_congestion_header_t { + bit<1> bos; + bit<31> q_congestion; +} + +header int_q_occupancy_header_t { + bit<1> bos; + bit<7> q_occupancy1; + bit<24> q_occupancy0; +} + +header int_switch_id_header_t { + bit<1> bos; + bit<31> switch_id; +} + +header lisp_t { + bit<8> flags; + bit<24> nonce; + bit<32> lsbsInstanceId; +} + +header llc_header_t { + bit<8> dsap; + bit<8> ssap; + bit<8> control_; +} + +header nsh_t { + bit<1> oam; + bit<1> context; + bit<6> flags; + bit<8> reserved; + bit<16> protoType; + bit<24> spath; + bit<8> sindex; +} + +header nsh_context_t { + bit<32> network_platform; + bit<32> network_shared; + bit<32> service_platform; + bit<32> service_shared; +} + +header nvgre_t { + bit<24> tni; + bit<8> flow_id; +} + +header roce_header_t { + bit<320> ib_grh; + bit<96> ib_bth; +} + +header roce_v2_header_t { + bit<96> ib_bth; +} + +header sflow_hdr_t { + bit<32> version; + bit<32> addrType; + bit<32> ipAddress; + bit<32> subAgentId; + bit<32> seqNumber; + bit<32> uptime; + bit<32> numSamples; +} + +header sflow_raw_hdr_record_t { + bit<20> enterprise; + bit<12> format; + bit<32> flowDataLength; + bit<32> headerProtocol; + bit<32> frameLength; + bit<32> bytesRemoved; + bit<32> headerSize; +} + +header sflow_sample_t { + bit<20> enterprise; + bit<12> format; + bit<32> sampleLength; + bit<32> seqNumer; + bit<8> srcIdType; + bit<24> srcIdIndex; + bit<32> samplingRate; + bit<32> samplePool; + bit<32> numDrops; + bit<32> inputIfindex; + bit<32> outputIfindex; + bit<32> numFlowRecords; +} + +header snap_header_t { + bit<24> oui; + bit<16> type_; +} + +header trill_t { + bit<2> version; + bit<2> reserved; + bit<1> multiDestination; + bit<5> optLength; + bit<6> hopCount; + bit<16> egressRbridge; + bit<16> ingressRbridge; +} + +header vntag_t { + bit<1> direction; + bit<1> pointer; + bit<14> destVif; + bit<1> looped; + bit<1> reserved; + bit<2> version; + bit<12> srcVif; +} + +header vxlan_t { + bit<8> flags; + bit<24> reserved; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_t { + bit<8> flags; + bit<16> reserved; + bit<8> next_proto; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_int_header_t { + bit<8> int_type; + bit<8> rsvd; + bit<8> len; + bit<8> next_proto; +} + +header int_value_t { + bit<1> bos; + bit<31> val; +} + +header mpls_t { + bit<20> label; + bit<3> exp; + bit<1> bos; + bit<8> ttl; +} + +header vlan_tag_t { + bit<3> pcp; + bit<1> cfi; + bit<12> vid; + bit<16> etherType; +} + +struct metadata { + bit<1> _acl_metadata_acl_deny0; + bit<1> _acl_metadata_acl_copy1; + bit<1> _acl_metadata_racl_deny2; + bit<16> _acl_metadata_acl_nexthop3; + bit<16> _acl_metadata_racl_nexthop4; + bit<1> _acl_metadata_acl_nexthop_type5; + bit<1> _acl_metadata_racl_nexthop_type6; + bit<1> _acl_metadata_acl_redirect7; + bit<1> _acl_metadata_racl_redirect8; + bit<16> _acl_metadata_if_label9; + bit<16> _acl_metadata_bd_label10; + bit<14> _acl_metadata_acl_stats_index11; + bit<16> _egress_filter_metadata_ifindex_check12; + bit<16> _egress_filter_metadata_bd13; + bit<16> _egress_filter_metadata_inner_bd14; + bit<1> _egress_metadata_bypass15; + bit<2> _egress_metadata_port_type16; + bit<16> _egress_metadata_payload_length17; + bit<9> _egress_metadata_smac_idx18; + bit<16> _egress_metadata_bd19; + bit<16> _egress_metadata_outer_bd20; + bit<48> _egress_metadata_mac_da21; + bit<1> _egress_metadata_routed22; + bit<16> _egress_metadata_same_bd_check23; + bit<8> _egress_metadata_drop_reason24; + bit<16> _egress_metadata_ifindex25; + bit<3> _fabric_metadata_packetType26; + bit<1> _fabric_metadata_fabric_header_present27; + @field_list(8w2, 8w6) + bit<16> _fabric_metadata_reason_code28; + bit<8> _fabric_metadata_dst_device29; + bit<16> _fabric_metadata_dst_port30; + bit<1> _global_config_metadata_enable_dod31; + bit<16> _hash_metadata_hash132; + bit<16> _hash_metadata_hash233; + bit<16> _hash_metadata_entropy_hash34; + @field_list(8w1, 8w3) + bit<32> _i2e_metadata_ingress_tstamp35; + @field_list(8w1, 8w3, 8w4) + bit<16> _i2e_metadata_mirror_session_id36; + @field_list(8w2, 8w6) + bit<9> _ingress_metadata_ingress_port37; + @field_list(8w2, 8w5, 8w6) + bit<16> _ingress_metadata_ifindex38; + bit<16> _ingress_metadata_egress_ifindex39; + bit<2> _ingress_metadata_port_type40; + bit<16> _ingress_metadata_outer_bd41; + @field_list(8w2, 8w6) + bit<16> _ingress_metadata_bd42; + bit<1> _ingress_metadata_drop_flag43; + @field_list(8w5) + bit<8> _ingress_metadata_drop_reason44; + bit<1> _ingress_metadata_control_frame45; + bit<16> _ingress_metadata_bypass_lookups46; + @saturating + bit<32> _ingress_metadata_sflow_take_sample47; + bit<32> _int_metadata_switch_id48; + bit<8> _int_metadata_insert_cnt49; + bit<16> _int_metadata_insert_byte_cnt50; + bit<16> _int_metadata_gpe_int_hdr_len51; + bit<8> _int_metadata_gpe_int_hdr_len852; + bit<16> _int_metadata_instruction_cnt53; + @field_list(8w4) + bit<1> _int_metadata_i2e_sink54; + bit<1> _int_metadata_i2e_source55; + bit<32> _ipv4_metadata_lkp_ipv4_sa56; + bit<32> _ipv4_metadata_lkp_ipv4_da57; + bit<1> _ipv4_metadata_ipv4_unicast_enabled58; + bit<2> _ipv4_metadata_ipv4_urpf_mode59; + bit<128> _ipv6_metadata_lkp_ipv6_sa60; + bit<128> _ipv6_metadata_lkp_ipv6_da61; + bit<1> _ipv6_metadata_ipv6_unicast_enabled62; + bit<1> _ipv6_metadata_ipv6_src_is_link_local63; + bit<2> _ipv6_metadata_ipv6_urpf_mode64; + bit<48> _l2_metadata_lkp_mac_sa65; + bit<48> _l2_metadata_lkp_mac_da66; + bit<3> _l2_metadata_lkp_pkt_type67; + bit<16> _l2_metadata_lkp_mac_type68; + bit<16> _l2_metadata_l2_nexthop69; + bit<1> _l2_metadata_l2_nexthop_type70; + bit<1> _l2_metadata_l2_redirect71; + bit<1> _l2_metadata_l2_src_miss72; + bit<16> _l2_metadata_l2_src_move73; + bit<10> _l2_metadata_stp_group74; + bit<3> _l2_metadata_stp_state75; + bit<16> _l2_metadata_bd_stats_idx76; + bit<1> _l2_metadata_learning_enabled77; + bit<1> _l2_metadata_port_vlan_mapping_miss78; + bit<16> _l2_metadata_same_if_check79; + bit<2> _l3_metadata_lkp_ip_type80; + bit<4> _l3_metadata_lkp_ip_version81; + bit<8> _l3_metadata_lkp_ip_proto82; + bit<8> _l3_metadata_lkp_ip_tc83; + bit<8> _l3_metadata_lkp_ip_ttl84; + bit<16> _l3_metadata_lkp_l4_sport85; + bit<16> _l3_metadata_lkp_l4_dport86; + bit<16> _l3_metadata_lkp_outer_l4_sport87; + bit<16> _l3_metadata_lkp_outer_l4_dport88; + bit<16> _l3_metadata_vrf89; + bit<10> _l3_metadata_rmac_group90; + bit<1> _l3_metadata_rmac_hit91; + bit<2> _l3_metadata_urpf_mode92; + bit<1> _l3_metadata_urpf_hit93; + bit<1> _l3_metadata_urpf_check_fail94; + bit<16> _l3_metadata_urpf_bd_group95; + bit<1> _l3_metadata_fib_hit96; + bit<16> _l3_metadata_fib_nexthop97; + bit<1> _l3_metadata_fib_nexthop_type98; + bit<16> _l3_metadata_same_bd_check99; + bit<16> _l3_metadata_nexthop_index100; + bit<1> _l3_metadata_routed101; + bit<1> _l3_metadata_outer_routed102; + bit<8> _l3_metadata_mtu_index103; + bit<1> _l3_metadata_l3_copy104; + @saturating + bit<16> _l3_metadata_l3_mtu_check105; + bit<2> _meter_metadata_meter_color106; + bit<16> _meter_metadata_meter_index107; + bit<1> _multicast_metadata_ipv4_mcast_key_type108; + bit<16> _multicast_metadata_ipv4_mcast_key109; + bit<1> _multicast_metadata_ipv6_mcast_key_type110; + bit<16> _multicast_metadata_ipv6_mcast_key111; + bit<1> _multicast_metadata_outer_mcast_route_hit112; + bit<2> _multicast_metadata_outer_mcast_mode113; + bit<1> _multicast_metadata_mcast_route_hit114; + bit<1> _multicast_metadata_mcast_bridge_hit115; + bit<1> _multicast_metadata_ipv4_multicast_enabled116; + bit<1> _multicast_metadata_ipv6_multicast_enabled117; + bit<1> _multicast_metadata_igmp_snooping_enabled118; + bit<1> _multicast_metadata_mld_snooping_enabled119; + bit<16> _multicast_metadata_bd_mrpf_group120; + bit<16> _multicast_metadata_mcast_rpf_group121; + bit<2> _multicast_metadata_mcast_mode122; + bit<16> _multicast_metadata_multicast_route_mc_index123; + bit<16> _multicast_metadata_multicast_bridge_mc_index124; + bit<1> _multicast_metadata_inner_replica125; + bit<1> _multicast_metadata_replica126; + bit<16> _multicast_metadata_mcast_grp127; + bit<1> _nexthop_metadata_nexthop_type128; + bit<8> _qos_metadata_outer_dscp129; + bit<3> _qos_metadata_marked_cos130; + bit<8> _qos_metadata_marked_dscp131; + bit<3> _qos_metadata_marked_exp132; + bit<1> _security_metadata_storm_control_color133; + bit<1> _security_metadata_ipsg_enabled134; + bit<1> _security_metadata_ipsg_check_fail135; + bit<16> _sflow_metadata_sflow_session_id136; + bit<5> _tunnel_metadata_ingress_tunnel_type137; + bit<24> _tunnel_metadata_tunnel_vni138; + bit<1> _tunnel_metadata_mpls_enabled139; + bit<20> _tunnel_metadata_mpls_label140; + bit<3> _tunnel_metadata_mpls_exp141; + bit<8> _tunnel_metadata_mpls_ttl142; + bit<5> _tunnel_metadata_egress_tunnel_type143; + bit<14> _tunnel_metadata_tunnel_index144; + bit<9> _tunnel_metadata_tunnel_src_index145; + bit<9> _tunnel_metadata_tunnel_smac_index146; + bit<14> _tunnel_metadata_tunnel_dst_index147; + bit<14> _tunnel_metadata_tunnel_dmac_index148; + bit<24> _tunnel_metadata_vnid149; + bit<1> _tunnel_metadata_tunnel_terminate150; + bit<1> _tunnel_metadata_tunnel_if_check151; + bit<4> _tunnel_metadata_egress_header_count152; + bit<8> _tunnel_metadata_inner_ip_proto153; +} + +struct headers { + @name(".arp_rarp") + arp_rarp_t arp_rarp; + @name(".arp_rarp_ipv4") + arp_rarp_ipv4_t arp_rarp_ipv4; + @name(".bfd") + bfd_t bfd; + @name(".eompls") + eompls_t eompls; + @name(".erspan_t3_header") + erspan_header_t3_t_0 erspan_t3_header; + @name(".ethernet") + ethernet_t ethernet; + @name(".fabric_header") + fabric_header_t fabric_header; + @name(".fabric_header_cpu") + fabric_header_cpu_t fabric_header_cpu; + @name(".fabric_header_mirror") + fabric_header_mirror_t fabric_header_mirror; + @name(".fabric_header_multicast") + fabric_header_multicast_t fabric_header_multicast; + @name(".fabric_header_sflow") + fabric_header_sflow_t fabric_header_sflow; + @name(".fabric_header_unicast") + fabric_header_unicast_t fabric_header_unicast; + @name(".fabric_payload_header") + fabric_payload_header_t fabric_payload_header; + @name(".fcoe") + fcoe_header_t fcoe; + @name(".genv") + genv_t genv; + @name(".gre") + gre_t gre; + @name(".icmp") + icmp_t icmp; + @name(".inner_ethernet") + ethernet_t inner_ethernet; + @name(".inner_icmp") + icmp_t inner_icmp; + @name(".inner_ipv4") + ipv4_t inner_ipv4; + @name(".inner_ipv6") + ipv6_t inner_ipv6; + @name(".inner_sctp") + sctp_t inner_sctp; + @name(".inner_tcp") + tcp_t inner_tcp; + @name(".inner_udp") + udp_t inner_udp; + @name(".int_egress_port_id_header") + int_egress_port_id_header_t int_egress_port_id_header; + @name(".int_egress_port_tx_utilization_header") + int_egress_port_tx_utilization_header_t int_egress_port_tx_utilization_header; + @name(".int_header") + int_header_t int_header; + @name(".int_hop_latency_header") + int_hop_latency_header_t int_hop_latency_header; + @name(".int_ingress_port_id_header") + int_ingress_port_id_header_t int_ingress_port_id_header; + @name(".int_ingress_tstamp_header") + int_ingress_tstamp_header_t int_ingress_tstamp_header; + @name(".int_q_congestion_header") + int_q_congestion_header_t int_q_congestion_header; + @name(".int_q_occupancy_header") + int_q_occupancy_header_t int_q_occupancy_header; + @name(".int_switch_id_header") + int_switch_id_header_t int_switch_id_header; + @name(".ipv4") + ipv4_t ipv4; + @name(".ipv6") + ipv6_t ipv6; + @name(".lisp") + lisp_t lisp; + @name(".llc_header") + llc_header_t llc_header; + @name(".nsh") + nsh_t nsh; + @name(".nsh_context") + nsh_context_t nsh_context; + @name(".nvgre") + nvgre_t nvgre; + @name(".outer_udp") + udp_t outer_udp; + @name(".roce") + roce_header_t roce; + @name(".roce_v2") + roce_v2_header_t roce_v2; + @name(".sctp") + sctp_t sctp; + @name(".sflow") + sflow_hdr_t sflow; + @name(".sflow_raw_hdr_record") + sflow_raw_hdr_record_t sflow_raw_hdr_record; + @name(".sflow_sample") + sflow_sample_t sflow_sample; + @name(".snap_header") + snap_header_t snap_header; + @name(".tcp") + tcp_t tcp; + @name(".trill") + trill_t trill; + @name(".udp") + udp_t udp; + @name(".vntag") + vntag_t vntag; + @name(".vxlan") + vxlan_t vxlan; + @name(".vxlan_gpe") + vxlan_gpe_t vxlan_gpe; + @name(".vxlan_gpe_int_header") + vxlan_gpe_int_header_t vxlan_gpe_int_header; + @name(".int_val") + int_value_t[24] int_val; + @name(".mpls") + mpls_t[3] mpls; + @name(".vlan_tag_") + vlan_tag_t[2] vlan_tag_; +} + +parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name("ParserImpl.tmp_0") bit<4> tmp_0; + @name(".parse_arp_rarp") state parse_arp_rarp { + packet.extract(hdr.arp_rarp); + transition select(hdr.arp_rarp.protoType) { + 16w0x800: parse_arp_rarp_ipv4; + default: accept; + } + } + @name(".parse_arp_rarp_ipv4") state parse_arp_rarp_ipv4 { + packet.extract(hdr.arp_rarp_ipv4); + transition parse_set_prio_med; + } + @name(".parse_eompls") state parse_eompls { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w6; + transition parse_inner_ethernet; + } + @name(".parse_erspan_t3") state parse_erspan_t3 { + packet.extract(hdr.erspan_t3_header); + transition parse_inner_ethernet; + } + @name(".parse_ethernet") state parse_ethernet { + packet.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x9000: parse_fabric_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_header") state parse_fabric_header { + packet.extract(hdr.fabric_header); + transition select(hdr.fabric_header.packetType) { + 3w1: parse_fabric_header_unicast; + 3w2: parse_fabric_header_multicast; + 3w3: parse_fabric_header_mirror; + 3w5: parse_fabric_header_cpu; + default: accept; + } + } + @name(".parse_fabric_header_cpu") state parse_fabric_header_cpu { + packet.extract(hdr.fabric_header_cpu); + meta._ingress_metadata_bypass_lookups46 = hdr.fabric_header_cpu.reasonCode; + transition select(hdr.fabric_header_cpu.reasonCode) { + 16w0x4: parse_fabric_sflow_header; + default: parse_fabric_payload_header; + } + } + @name(".parse_fabric_header_mirror") state parse_fabric_header_mirror { + packet.extract(hdr.fabric_header_mirror); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_multicast") state parse_fabric_header_multicast { + packet.extract(hdr.fabric_header_multicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_unicast") state parse_fabric_header_unicast { + packet.extract(hdr.fabric_header_unicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_payload_header") state parse_fabric_payload_header { + packet.extract(hdr.fabric_payload_header); + transition select(hdr.fabric_payload_header.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_sflow_header") state parse_fabric_sflow_header { + packet.extract(hdr.fabric_header_sflow); + transition parse_fabric_payload_header; + } + @name(".parse_geneve") state parse_geneve { + packet.extract(hdr.genv); + meta._tunnel_metadata_tunnel_vni138 = hdr.genv.vni; + meta._tunnel_metadata_ingress_tunnel_type137 = 5w4; + transition select(hdr.genv.ver, hdr.genv.optLen, hdr.genv.protoType) { + (2w0x0, 6w0x0, 16w0x6558): parse_inner_ethernet; + (2w0x0, 6w0x0, 16w0x800): parse_inner_ipv4; + (2w0x0, 6w0x0, 16w0x86dd): parse_inner_ipv6; + default: accept; + } + } + @name(".parse_gpe_int_header") state parse_gpe_int_header { + packet.extract(hdr.vxlan_gpe_int_header); + meta._int_metadata_gpe_int_hdr_len51 = (bit<16>)hdr.vxlan_gpe_int_header.len; + transition parse_int_header; + } + @name(".parse_gre") state parse_gre { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x1, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x6558): parse_nvgre; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x86dd): parse_gre_ipv6; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x22eb): parse_erspan_t3; + default: accept; + } + } + @name(".parse_gre_ipv4") state parse_gre_ipv4 { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w2; + transition parse_inner_ipv4; + } + @name(".parse_gre_ipv6") state parse_gre_ipv6 { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w2; + transition parse_inner_ipv6; + } + @name(".parse_icmp") state parse_icmp { + packet.extract(hdr.icmp); + meta._l3_metadata_lkp_outer_l4_sport87 = hdr.icmp.typeCode; + transition select(hdr.icmp.typeCode) { + 16w0x8200 &&& 16w0xfe00: parse_set_prio_med; + 16w0x8400 &&& 16w0xfc00: parse_set_prio_med; + 16w0x8800 &&& 16w0xff00: parse_set_prio_med; + default: accept; + } + } + @name(".parse_inner_ethernet") state parse_inner_ethernet { + packet.extract(hdr.inner_ethernet); + meta._l2_metadata_lkp_mac_sa65 = hdr.inner_ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.inner_ethernet.dstAddr; + transition select(hdr.inner_ethernet.etherType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_inner_icmp") state parse_inner_icmp { + packet.extract(hdr.inner_icmp); + meta._l3_metadata_lkp_l4_sport85 = hdr.inner_icmp.typeCode; + transition accept; + } + @name(".parse_inner_ipv4") state parse_inner_ipv4 { + packet.extract(hdr.inner_ipv4); + meta._ipv4_metadata_lkp_ipv4_sa56 = hdr.inner_ipv4.srcAddr; + meta._ipv4_metadata_lkp_ipv4_da57 = hdr.inner_ipv4.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.inner_ipv4.protocol; + meta._l3_metadata_lkp_ip_ttl84 = hdr.inner_ipv4.ttl; + transition select(hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ihl, hdr.inner_ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_inner_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_inner_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_ipv6") state parse_inner_ipv6 { + packet.extract(hdr.inner_ipv6); + meta._ipv6_metadata_lkp_ipv6_sa60 = hdr.inner_ipv6.srcAddr; + meta._ipv6_metadata_lkp_ipv6_da61 = hdr.inner_ipv6.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.inner_ipv6.nextHdr; + meta._l3_metadata_lkp_ip_ttl84 = hdr.inner_ipv6.hopLimit; + transition select(hdr.inner_ipv6.nextHdr) { + 8w58: parse_inner_icmp; + 8w6: parse_inner_tcp; + 8w17: parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_tcp") state parse_inner_tcp { + packet.extract(hdr.inner_tcp); + meta._l3_metadata_lkp_l4_sport85 = hdr.inner_tcp.srcPort; + meta._l3_metadata_lkp_l4_dport86 = hdr.inner_tcp.dstPort; + transition accept; + } + @name(".parse_inner_udp") state parse_inner_udp { + packet.extract(hdr.inner_udp); + meta._l3_metadata_lkp_l4_sport85 = hdr.inner_udp.srcPort; + meta._l3_metadata_lkp_l4_dport86 = hdr.inner_udp.dstPort; + transition accept; + } + @name(".parse_int_header") state parse_int_header { + packet.extract(hdr.int_header); + meta._int_metadata_instruction_cnt53 = (bit<16>)hdr.int_header.ins_cnt; + transition select(hdr.int_header.rsvd1, hdr.int_header.total_hop_cnt) { + (5w0x0, 8w0x0): accept; + (5w0x0 &&& 5w0xf, 8w0x0 &&& 8w0x0): parse_int_val; + default: accept; + } + } + @name(".parse_int_val") state parse_int_val { + packet.extract(hdr.int_val.next); + transition select(hdr.int_val.last.bos) { + 1w0: parse_int_val; + 1w1: parse_inner_ethernet; + default: noMatch; + } + } + @name(".parse_ipv4") state parse_ipv4 { + packet.extract(hdr.ipv4); + transition select(hdr.ipv4.fragOffset, hdr.ipv4.ihl, hdr.ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_udp; + (13w0x0, 4w0x5, 8w0x2f): parse_gre; + (13w0x0, 4w0x5, 8w0x4): parse_ipv4_in_ip; + (13w0x0, 4w0x5, 8w0x29): parse_ipv6_in_ip; + (13w0, 4w0, 8w2): parse_set_prio_med; + (13w0, 4w0, 8w88): parse_set_prio_med; + (13w0, 4w0, 8w89): parse_set_prio_med; + (13w0, 4w0, 8w103): parse_set_prio_med; + (13w0, 4w0, 8w112): parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv4_in_ip") state parse_ipv4_in_ip { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w3; + transition parse_inner_ipv4; + } + @name(".parse_ipv6") state parse_ipv6 { + packet.extract(hdr.ipv6); + transition select(hdr.ipv6.nextHdr) { + 8w58: parse_icmp; + 8w6: parse_tcp; + 8w4: parse_ipv4_in_ip; + 8w17: parse_udp; + 8w47: parse_gre; + 8w41: parse_ipv6_in_ip; + 8w88: parse_set_prio_med; + 8w89: parse_set_prio_med; + 8w103: parse_set_prio_med; + 8w112: parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv6_in_ip") state parse_ipv6_in_ip { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w3; + transition parse_inner_ipv6; + } + @name(".parse_llc_header") state parse_llc_header { + packet.extract(hdr.llc_header); + transition select(hdr.llc_header.dsap, hdr.llc_header.ssap) { + (8w0xaa, 8w0xaa): parse_snap_header; + (8w0xfe, 8w0xfe): parse_set_prio_med; + default: accept; + } + } + @name(".parse_mpls") state parse_mpls { + packet.extract(hdr.mpls.next); + transition select(hdr.mpls.last.bos) { + 1w0: parse_mpls; + 1w1: parse_mpls_bos; + default: accept; + } + } + @name(".parse_mpls_bos") state parse_mpls_bos { + tmp_0 = packet.lookahead>(); + transition select(tmp_0) { + 4w0x4: parse_mpls_inner_ipv4; + 4w0x6: parse_mpls_inner_ipv6; + default: parse_eompls; + } + } + @name(".parse_mpls_inner_ipv4") state parse_mpls_inner_ipv4 { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w9; + transition parse_inner_ipv4; + } + @name(".parse_mpls_inner_ipv6") state parse_mpls_inner_ipv6 { + meta._tunnel_metadata_ingress_tunnel_type137 = 5w9; + transition parse_inner_ipv6; + } + @name(".parse_nvgre") state parse_nvgre { + packet.extract(hdr.nvgre); + meta._tunnel_metadata_ingress_tunnel_type137 = 5w5; + meta._tunnel_metadata_tunnel_vni138 = hdr.nvgre.tni; + transition parse_inner_ethernet; + } + @name(".parse_qinq") state parse_qinq { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8100: parse_qinq_vlan; + default: accept; + } + } + @name(".parse_qinq_vlan") state parse_qinq_vlan { + packet.extract(hdr.vlan_tag_[1]); + transition select(hdr.vlan_tag_[1].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_set_prio_high") state parse_set_prio_high { + standard_metadata.priority = 3w5; + transition accept; + } + @name(".parse_set_prio_med") state parse_set_prio_med { + standard_metadata.priority = 3w3; + transition accept; + } + @name(".parse_sflow") state parse_sflow { + packet.extract(hdr.sflow); + transition accept; + } + @name(".parse_snap_header") state parse_snap_header { + packet.extract(hdr.snap_header); + transition select(hdr.snap_header.type_) { + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_tcp") state parse_tcp { + packet.extract(hdr.tcp); + meta._l3_metadata_lkp_outer_l4_sport87 = hdr.tcp.srcPort; + meta._l3_metadata_lkp_outer_l4_dport88 = hdr.tcp.dstPort; + transition select(hdr.tcp.dstPort) { + 16w179: parse_set_prio_med; + 16w639: parse_set_prio_med; + default: accept; + } + } + @name(".parse_udp") state parse_udp { + packet.extract(hdr.udp); + meta._l3_metadata_lkp_outer_l4_sport87 = hdr.udp.srcPort; + meta._l3_metadata_lkp_outer_l4_dport88 = hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w4789: parse_vxlan; + 16w6081: parse_geneve; + 16w4790: parse_vxlan_gpe; + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + 16w6343: parse_sflow; + default: accept; + } + } + @name(".parse_vlan") state parse_vlan { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_vxlan") state parse_vxlan { + packet.extract(hdr.vxlan); + meta._tunnel_metadata_ingress_tunnel_type137 = 5w1; + meta._tunnel_metadata_tunnel_vni138 = hdr.vxlan.vni; + transition parse_inner_ethernet; + } + @name(".parse_vxlan_gpe") state parse_vxlan_gpe { + packet.extract(hdr.vxlan_gpe); + meta._tunnel_metadata_ingress_tunnel_type137 = 5w12; + meta._tunnel_metadata_tunnel_vni138 = hdr.vxlan_gpe.vni; + transition select(hdr.vxlan_gpe.flags, hdr.vxlan_gpe.next_proto) { + (8w0x8 &&& 8w0x8, 8w0x5): parse_gpe_int_header; + default: parse_inner_ethernet; + } + } + @name(".start") state start { + transition parse_ethernet; + } + state noMatch { + verify(false, error.NoMatch); + transition reject; + } +} + +@name(".bd_action_profile") action_profile(32w1024) bd_action_profile; +@name(".ecmp_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w10) ecmp_action_profile; +@name(".fabric_lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) fabric_lag_action_profile; +@name(".lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) lag_action_profile; +control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @noWarn("unused") @name(".NoAction") action NoAction_2() { + } + @noWarn("unused") @name(".NoAction") action NoAction_3() { + } + @noWarn("unused") @name(".NoAction") action NoAction_4() { + } + @noWarn("unused") @name(".NoAction") action NoAction_5() { + } + @noWarn("unused") @name(".NoAction") action NoAction_6() { + } + @noWarn("unused") @name(".NoAction") action NoAction_7() { + } + @noWarn("unused") @name(".NoAction") action NoAction_8() { + } + @noWarn("unused") @name(".NoAction") action NoAction_9() { + } + @noWarn("unused") @name(".NoAction") action NoAction_10() { + } + @noWarn("unused") @name(".NoAction") action NoAction_11() { + } + @noWarn("unused") @name(".NoAction") action NoAction_12() { + } + @noWarn("unused") @name(".NoAction") action NoAction_13() { + } + @noWarn("unused") @name(".NoAction") action NoAction_14() { + } + @noWarn("unused") @name(".NoAction") action NoAction_15() { + } + @noWarn("unused") @name(".NoAction") action NoAction_16() { + } + @noWarn("unused") @name(".NoAction") action NoAction_17() { + } + @noWarn("unused") @name(".NoAction") action NoAction_18() { + } + @noWarn("unused") @name(".NoAction") action NoAction_19() { + } + @noWarn("unused") @name(".NoAction") action NoAction_20() { + } + @noWarn("unused") @name(".NoAction") action NoAction_21() { + } + @noWarn("unused") @name(".NoAction") action NoAction_22() { + } + @noWarn("unused") @name(".NoAction") action NoAction_23() { + } + @noWarn("unused") @name(".NoAction") action NoAction_24() { + } + @noWarn("unused") @name(".NoAction") action NoAction_25() { + } + @noWarn("unused") @name(".NoAction") action NoAction_26() { + } + @noWarn("unused") @name(".NoAction") action NoAction_27() { + } + @noWarn("unused") @name(".NoAction") action NoAction_28() { + } + @noWarn("unused") @name(".NoAction") action NoAction_29() { + } + @noWarn("unused") @name(".NoAction") action NoAction_30() { + } + @noWarn("unused") @name(".NoAction") action NoAction_31() { + } + @noWarn("unused") @name(".NoAction") action NoAction_32() { + } + @noWarn("unused") @name(".NoAction") action NoAction_33() { + } + @noWarn("unused") @name(".NoAction") action NoAction_34() { + } + @noWarn("unused") @name(".NoAction") action NoAction_35() { + } + @noWarn("unused") @name(".NoAction") action NoAction_36() { + } + @name(".egress.egress_port_type_normal") action egress_port_type_normal(@name("ifindex") bit<16> ifindex_11) { + meta._egress_metadata_port_type16 = 2w0; + meta._egress_metadata_ifindex25 = ifindex_11; + } + @name(".egress.egress_port_type_fabric") action egress_port_type_fabric(@name("ifindex") bit<16> ifindex_12) { + meta._egress_metadata_port_type16 = 2w1; + meta._tunnel_metadata_egress_tunnel_type143 = 5w15; + meta._egress_metadata_ifindex25 = ifindex_12; + } + @name(".egress.egress_port_type_cpu") action egress_port_type_cpu(@name("ifindex") bit<16> ifindex_13) { + meta._egress_metadata_port_type16 = 2w2; + meta._tunnel_metadata_egress_tunnel_type143 = 5w16; + meta._egress_metadata_ifindex25 = ifindex_13; + } + @name(".egress.nop") action nop() { + } + @name(".egress.set_mirror_nhop") action set_mirror_nhop(@name("nhop_idx") bit<16> nhop_idx) { + meta._l3_metadata_nexthop_index100 = nhop_idx; + } + @name(".egress.set_mirror_bd") action set_mirror_bd(@name("bd") bit<16> bd_17) { + meta._egress_metadata_bd19 = bd_17; + } + @name(".egress.sflow_pkt_to_cpu") action sflow_pkt_to_cpu() { + hdr.fabric_header_sflow.setValid(); + hdr.fabric_header_sflow.sflow_session_id = meta._sflow_metadata_sflow_session_id136; + } + @name(".egress_port_mapping") table egress_port_mapping_0 { + actions = { + egress_port_type_normal(); + egress_port_type_fabric(); + egress_port_type_cpu(); + @defaultonly NoAction_2(); + } + key = { + standard_metadata.egress_port: exact @name("standard_metadata.egress_port"); + } + size = 288; + default_action = NoAction_2(); + } + @name(".mirror") table mirror_0 { + actions = { + nop(); + set_mirror_nhop(); + set_mirror_bd(); + sflow_pkt_to_cpu(); + @defaultonly NoAction_3(); + } + key = { + meta._i2e_metadata_mirror_session_id36: exact @name("i2e_metadata.mirror_session_id"); + } + size = 1024; + default_action = NoAction_3(); + } + @name(".process_replication.nop") action _process_replication_nop_0() { + } + @name(".process_replication.nop") action _process_replication_nop_1() { + } + @name(".process_replication.set_replica_copy_bridged") action _process_replication_set_replica_copy_bridged_0() { + meta._egress_metadata_routed22 = 1w0; + } + @name(".process_replication.outer_replica_from_rid") action _process_replication_outer_replica_from_rid_0(@name("bd") bit<16> bd_18, @name("tunnel_index") bit<14> tunnel_index_9, @name("tunnel_type") bit<5> tunnel_type, @name("header_count") bit<4> header_count) { + meta._egress_metadata_bd19 = bd_18; + meta._multicast_metadata_replica126 = 1w1; + meta._multicast_metadata_inner_replica125 = 1w0; + meta._egress_metadata_routed22 = meta._l3_metadata_outer_routed102; + meta._egress_metadata_same_bd_check23 = bd_18 ^ meta._ingress_metadata_outer_bd41; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_9; + meta._tunnel_metadata_egress_tunnel_type143 = tunnel_type; + meta._tunnel_metadata_egress_header_count152 = header_count; + } + @name(".process_replication.inner_replica_from_rid") action _process_replication_inner_replica_from_rid_0(@name("bd") bit<16> bd_19, @name("tunnel_index") bit<14> tunnel_index_10, @name("tunnel_type") bit<5> tunnel_type_8, @name("header_count") bit<4> header_count_6) { + meta._egress_metadata_bd19 = bd_19; + meta._multicast_metadata_replica126 = 1w1; + meta._multicast_metadata_inner_replica125 = 1w1; + meta._egress_metadata_routed22 = meta._l3_metadata_routed101; + meta._egress_metadata_same_bd_check23 = bd_19 ^ meta._ingress_metadata_bd42; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_10; + meta._tunnel_metadata_egress_tunnel_type143 = tunnel_type_8; + meta._tunnel_metadata_egress_header_count152 = header_count_6; + } + @name(".replica_type") table _replica_type { + actions = { + _process_replication_nop_0(); + _process_replication_set_replica_copy_bridged_0(); + @defaultonly NoAction_4(); + } + key = { + meta._multicast_metadata_replica126 : exact @name("multicast_metadata.replica"); + meta._egress_metadata_same_bd_check23: ternary @name("egress_metadata.same_bd_check"); + } + size = 512; + default_action = NoAction_4(); + } + @name(".rid") table _rid { + actions = { + _process_replication_nop_1(); + _process_replication_outer_replica_from_rid_0(); + _process_replication_inner_replica_from_rid_0(); + @defaultonly NoAction_5(); + } + key = { + standard_metadata.egress_rid: exact @name("standard_metadata.egress_rid"); + } + size = 1024; + default_action = NoAction_5(); + } + @name(".process_vlan_decap.nop") action _process_vlan_decap_nop_0() { + } + @name(".process_vlan_decap.remove_vlan_single_tagged") action _process_vlan_decap_remove_vlan_single_tagged_0() { + hdr.ethernet.etherType = hdr.vlan_tag_[0].etherType; + hdr.vlan_tag_[0].setInvalid(); + } + @name(".process_vlan_decap.remove_vlan_double_tagged") action _process_vlan_decap_remove_vlan_double_tagged_0() { + hdr.ethernet.etherType = hdr.vlan_tag_[1].etherType; + hdr.vlan_tag_[0].setInvalid(); + hdr.vlan_tag_[1].setInvalid(); + } + @name(".vlan_decap") table _vlan_decap { + actions = { + _process_vlan_decap_nop_0(); + _process_vlan_decap_remove_vlan_single_tagged_0(); + _process_vlan_decap_remove_vlan_double_tagged_0(); + @defaultonly NoAction_6(); + } + key = { + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 1024; + default_action = NoAction_6(); + } + @name(".process_tunnel_decap.decap_inner_udp") action _process_tunnel_decap_decap_inner_udp_0() { + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_tcp") action _process_tunnel_decap_decap_inner_tcp_0() { + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_icmp") action _process_tunnel_decap_decap_inner_icmp_0() { + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_unknown") action _process_tunnel_decap_decap_inner_unknown_0() { + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv4") action _process_tunnel_decap_decap_vxlan_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.vxlan.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv6") action _process_tunnel_decap_decap_vxlan_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_non_ip") action _process_tunnel_decap_decap_vxlan_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv4") action _process_tunnel_decap_decap_genv_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.genv.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv6") action _process_tunnel_decap_decap_genv_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_non_ip") action _process_tunnel_decap_decap_genv_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv4") action _process_tunnel_decap_decap_nvgre_inner_ipv4_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv6") action _process_tunnel_decap_decap_nvgre_inner_ipv6_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_non_ip") action _process_tunnel_decap_decap_nvgre_inner_non_ip_0() { + hdr.ethernet = hdr.inner_ethernet; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_gre_inner_ipv4") action _process_tunnel_decap_decap_gre_inner_ipv4_0() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_gre_inner_ipv6") action _process_tunnel_decap_decap_gre_inner_ipv6_0() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_gre_inner_non_ip") action _process_tunnel_decap_decap_gre_inner_non_ip_0() { + hdr.ethernet.etherType = hdr.gre.proto; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_ip_inner_ipv4") action _process_tunnel_decap_decap_ip_inner_ipv4_0() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_ip_inner_ipv6") action _process_tunnel_decap_decap_ip_inner_ipv6_0() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop1") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop1") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop1_0() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop2") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop2") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop2_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop3") action _process_tunnel_decap_decap_mpls_inner_ipv4_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop3") action _process_tunnel_decap_decap_mpls_inner_ipv6_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3") action _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop3_0() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".tunnel_decap_process_inner") table _tunnel_decap_process_inner { + actions = { + _process_tunnel_decap_decap_inner_udp_0(); + _process_tunnel_decap_decap_inner_tcp_0(); + _process_tunnel_decap_decap_inner_icmp_0(); + _process_tunnel_decap_decap_inner_unknown_0(); + @defaultonly NoAction_7(); + } + key = { + hdr.inner_tcp.isValid() : exact @name("inner_tcp.$valid$"); + hdr.inner_udp.isValid() : exact @name("inner_udp.$valid$"); + hdr.inner_icmp.isValid(): exact @name("inner_icmp.$valid$"); + } + size = 1024; + default_action = NoAction_7(); + } + @name(".tunnel_decap_process_outer") table _tunnel_decap_process_outer { + actions = { + _process_tunnel_decap_decap_vxlan_inner_ipv4_0(); + _process_tunnel_decap_decap_vxlan_inner_ipv6_0(); + _process_tunnel_decap_decap_vxlan_inner_non_ip_0(); + _process_tunnel_decap_decap_genv_inner_ipv4_0(); + _process_tunnel_decap_decap_genv_inner_ipv6_0(); + _process_tunnel_decap_decap_genv_inner_non_ip_0(); + _process_tunnel_decap_decap_nvgre_inner_ipv4_0(); + _process_tunnel_decap_decap_nvgre_inner_ipv6_0(); + _process_tunnel_decap_decap_nvgre_inner_non_ip_0(); + _process_tunnel_decap_decap_gre_inner_ipv4_0(); + _process_tunnel_decap_decap_gre_inner_ipv6_0(); + _process_tunnel_decap_decap_gre_inner_non_ip_0(); + _process_tunnel_decap_decap_ip_inner_ipv4_0(); + _process_tunnel_decap_decap_ip_inner_ipv6_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop1_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop2_0(); + _process_tunnel_decap_decap_mpls_inner_ipv4_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ipv6_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv4_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_ipv6_pop3_0(); + _process_tunnel_decap_decap_mpls_inner_ethernet_non_ip_pop3_0(); + @defaultonly NoAction_8(); + } + key = { + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_8(); + } + @name(".process_rewrite.nop") action _process_rewrite_nop_0() { + } + @name(".process_rewrite.nop") action _process_rewrite_nop_1() { + } + @name(".process_rewrite.set_l2_rewrite") action _process_rewrite_set_l2_rewrite_0() { + meta._egress_metadata_routed22 = 1w0; + meta._egress_metadata_bd19 = meta._ingress_metadata_bd42; + meta._egress_metadata_outer_bd20 = meta._ingress_metadata_bd42; + } + @name(".process_rewrite.set_l2_rewrite_with_tunnel") action _process_rewrite_set_l2_rewrite_with_tunnel_0(@name("tunnel_index") bit<14> tunnel_index_11, @name("tunnel_type") bit<5> tunnel_type_9) { + meta._egress_metadata_routed22 = 1w0; + meta._egress_metadata_bd19 = meta._ingress_metadata_bd42; + meta._egress_metadata_outer_bd20 = meta._ingress_metadata_bd42; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_11; + meta._tunnel_metadata_egress_tunnel_type143 = tunnel_type_9; + } + @name(".process_rewrite.set_l3_rewrite") action _process_rewrite_set_l3_rewrite_0(@name("bd") bit<16> bd_20, @name("mtu_index") bit<8> mtu_index_1, @name("dmac") bit<48> dmac) { + meta._egress_metadata_routed22 = 1w1; + meta._egress_metadata_mac_da21 = dmac; + meta._egress_metadata_bd19 = bd_20; + meta._egress_metadata_outer_bd20 = bd_20; + meta._l3_metadata_mtu_index103 = mtu_index_1; + } + @name(".process_rewrite.set_l3_rewrite_with_tunnel") action _process_rewrite_set_l3_rewrite_with_tunnel_0(@name("bd") bit<16> bd_21, @name("dmac") bit<48> dmac_0, @name("tunnel_index") bit<14> tunnel_index_12, @name("tunnel_type") bit<5> tunnel_type_10) { + meta._egress_metadata_routed22 = 1w1; + meta._egress_metadata_mac_da21 = dmac_0; + meta._egress_metadata_bd19 = bd_21; + meta._egress_metadata_outer_bd20 = bd_21; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_12; + meta._tunnel_metadata_egress_tunnel_type143 = tunnel_type_10; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l2") action _process_rewrite_set_mpls_swap_push_rewrite_l2_0(@name("label") bit<20> label_2, @name("tunnel_index") bit<14> tunnel_index_13, @name("header_count") bit<4> header_count_7) { + meta._egress_metadata_routed22 = meta._l3_metadata_routed101; + meta._egress_metadata_bd19 = meta._ingress_metadata_bd42; + hdr.mpls[0].label = label_2; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_13; + meta._tunnel_metadata_egress_header_count152 = header_count_7; + meta._tunnel_metadata_egress_tunnel_type143 = 5w13; + } + @name(".process_rewrite.set_mpls_push_rewrite_l2") action _process_rewrite_set_mpls_push_rewrite_l2_0(@name("tunnel_index") bit<14> tunnel_index_14, @name("header_count") bit<4> header_count_8) { + meta._egress_metadata_routed22 = meta._l3_metadata_routed101; + meta._egress_metadata_bd19 = meta._ingress_metadata_bd42; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_14; + meta._tunnel_metadata_egress_header_count152 = header_count_8; + meta._tunnel_metadata_egress_tunnel_type143 = 5w13; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l3") action _process_rewrite_set_mpls_swap_push_rewrite_l3_0(@name("bd") bit<16> bd_22, @name("dmac") bit<48> dmac_6, @name("label") bit<20> label_3, @name("tunnel_index") bit<14> tunnel_index_15, @name("header_count") bit<4> header_count_9) { + meta._egress_metadata_routed22 = meta._l3_metadata_routed101; + meta._egress_metadata_bd19 = bd_22; + hdr.mpls[0].label = label_3; + meta._egress_metadata_mac_da21 = dmac_6; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_15; + meta._tunnel_metadata_egress_header_count152 = header_count_9; + meta._tunnel_metadata_egress_tunnel_type143 = 5w14; + } + @name(".process_rewrite.set_mpls_push_rewrite_l3") action _process_rewrite_set_mpls_push_rewrite_l3_0(@name("bd") bit<16> bd_23, @name("dmac") bit<48> dmac_7, @name("tunnel_index") bit<14> tunnel_index_16, @name("header_count") bit<4> header_count_10) { + meta._egress_metadata_routed22 = meta._l3_metadata_routed101; + meta._egress_metadata_bd19 = bd_23; + meta._egress_metadata_mac_da21 = dmac_7; + meta._tunnel_metadata_tunnel_index144 = tunnel_index_16; + meta._tunnel_metadata_egress_header_count152 = header_count_10; + meta._tunnel_metadata_egress_tunnel_type143 = 5w14; + } + @name(".process_rewrite.rewrite_ipv4_multicast") action _process_rewrite_rewrite_ipv4_multicast_0() { + hdr.ethernet.dstAddr[22:0] = hdr.ipv4.dstAddr[22:0]; + } + @name(".process_rewrite.rewrite_ipv6_multicast") action _process_rewrite_rewrite_ipv6_multicast_0() { + } + @name(".rewrite") table _rewrite { + actions = { + _process_rewrite_nop_0(); + _process_rewrite_set_l2_rewrite_0(); + _process_rewrite_set_l2_rewrite_with_tunnel_0(); + _process_rewrite_set_l3_rewrite_0(); + _process_rewrite_set_l3_rewrite_with_tunnel_0(); + _process_rewrite_set_mpls_swap_push_rewrite_l2_0(); + _process_rewrite_set_mpls_push_rewrite_l2_0(); + _process_rewrite_set_mpls_swap_push_rewrite_l3_0(); + _process_rewrite_set_mpls_push_rewrite_l3_0(); + @defaultonly NoAction_9(); + } + key = { + meta._l3_metadata_nexthop_index100: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction_9(); + } + @name(".rewrite_multicast") table _rewrite_multicast { + actions = { + _process_rewrite_nop_1(); + _process_rewrite_rewrite_ipv4_multicast_0(); + _process_rewrite_rewrite_ipv6_multicast_0(); + @defaultonly NoAction_10(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction_10(); + } + @name(".process_egress_bd.nop") action _process_egress_bd_nop_0() { + } + @name(".process_egress_bd.set_egress_bd_properties") action _process_egress_bd_set_egress_bd_properties_0(@name("smac_idx") bit<9> smac_idx_5) { + meta._egress_metadata_smac_idx18 = smac_idx_5; + } + @name(".egress_bd_map") table _egress_bd_map { + actions = { + _process_egress_bd_nop_0(); + _process_egress_bd_set_egress_bd_properties_0(); + @defaultonly NoAction_11(); + } + key = { + meta._egress_metadata_bd19: exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction_11(); + } + @name(".process_mac_rewrite.nop") action _process_mac_rewrite_nop_0() { + } + @name(".process_mac_rewrite.ipv4_unicast_rewrite") action _process_mac_rewrite_ipv4_unicast_rewrite_0() { + hdr.ethernet.dstAddr = meta._egress_metadata_mac_da21; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv4_multicast_rewrite") action _process_mac_rewrite_ipv4_multicast_rewrite_0() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x1005e000000; + hdr.ipv4.ttl = hdr.ipv4.ttl + 8w255; + } + @name(".process_mac_rewrite.ipv6_unicast_rewrite") action _process_mac_rewrite_ipv6_unicast_rewrite_0() { + hdr.ethernet.dstAddr = meta._egress_metadata_mac_da21; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.ipv6_multicast_rewrite") action _process_mac_rewrite_ipv6_multicast_rewrite_0() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x333300000000; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit + 8w255; + } + @name(".process_mac_rewrite.mpls_rewrite") action _process_mac_rewrite_mpls_rewrite_0() { + hdr.ethernet.dstAddr = meta._egress_metadata_mac_da21; + hdr.mpls[0].ttl = hdr.mpls[0].ttl + 8w255; + } + @name(".process_mac_rewrite.rewrite_smac") action _process_mac_rewrite_rewrite_smac_0(@name("smac") bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".l3_rewrite") table _l3_rewrite { + actions = { + _process_mac_rewrite_nop_0(); + _process_mac_rewrite_ipv4_unicast_rewrite_0(); + _process_mac_rewrite_ipv4_multicast_rewrite_0(); + _process_mac_rewrite_ipv6_unicast_rewrite_0(); + _process_mac_rewrite_ipv6_multicast_rewrite_0(); + _process_mac_rewrite_mpls_rewrite_0(); + @defaultonly NoAction_12(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + hdr.mpls[0].isValid() : exact @name("mpls[0].$valid$"); + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + default_action = NoAction_12(); + } + @name(".smac_rewrite") table _smac_rewrite { + actions = { + _process_mac_rewrite_rewrite_smac_0(); + @defaultonly NoAction_13(); + } + key = { + meta._egress_metadata_smac_idx18: exact @name("egress_metadata.smac_idx"); + } + size = 512; + default_action = NoAction_13(); + } + @name(".process_mtu.mtu_miss") action _process_mtu_mtu_miss_0() { + meta._l3_metadata_l3_mtu_check105 = 16w0xffff; + } + @name(".process_mtu.ipv4_mtu_check") action _process_mtu_ipv4_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu) { + meta._l3_metadata_l3_mtu_check105 = l3_mtu |-| hdr.ipv4.totalLen; + } + @name(".process_mtu.ipv6_mtu_check") action _process_mtu_ipv6_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu_3) { + meta._l3_metadata_l3_mtu_check105 = l3_mtu_3 |-| hdr.ipv6.payloadLen; + } + @name(".mtu") table _mtu { + actions = { + _process_mtu_mtu_miss_0(); + _process_mtu_ipv4_mtu_check_0(); + _process_mtu_ipv6_mtu_check_0(); + @defaultonly NoAction_14(); + } + key = { + meta._l3_metadata_mtu_index103: exact @name("l3_metadata.mtu_index"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.ipv6.isValid() : exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_14(); + } + @name(".process_int_insertion.int_set_header_0_bos") action _process_int_insertion_int_set_header_0_bos_0() { + hdr.int_switch_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_1_bos") action _process_int_insertion_int_set_header_1_bos_0() { + hdr.int_ingress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_2_bos") action _process_int_insertion_int_set_header_2_bos_0() { + hdr.int_hop_latency_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_3_bos") action _process_int_insertion_int_set_header_3_bos_0() { + hdr.int_q_occupancy_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_4_bos") action _process_int_insertion_int_set_header_4_bos_0() { + hdr.int_ingress_tstamp_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_5_bos") action _process_int_insertion_int_set_header_5_bos_0() { + hdr.int_egress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_6_bos") action _process_int_insertion_int_set_header_6_bos_0() { + hdr.int_q_congestion_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_7_bos") action _process_int_insertion_int_set_header_7_bos_0() { + hdr.int_egress_port_tx_utilization_header.bos = 1w1; + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_0() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_1() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_2() { + } + @name(".process_int_insertion.nop") action _process_int_insertion_nop_3() { + } + @name(".process_int_insertion.int_transit") action _process_int_insertion_int_transit_0(@name("switch_id") bit<32> switch_id_2) { + meta._int_metadata_insert_cnt49 = hdr.int_header.max_hop_cnt - hdr.int_header.total_hop_cnt; + meta._int_metadata_switch_id48 = switch_id_2; + meta._int_metadata_insert_byte_cnt50 = meta._int_metadata_instruction_cnt53 << 2; + meta._int_metadata_gpe_int_hdr_len852 = (bit<8>)hdr.int_header.ins_cnt; + } + @name(".process_int_insertion.int_src") action _process_int_insertion_int_src_0(@name("switch_id") bit<32> switch_id_3, @name("hop_cnt") bit<8> hop_cnt, @name("ins_cnt") bit<5> ins_cnt_1, @name("ins_mask0003") bit<4> ins_mask0003, @name("ins_mask0407") bit<4> ins_mask0407, @name("ins_byte_cnt") bit<16> ins_byte_cnt, @name("total_words") bit<8> total_words) { + meta._int_metadata_insert_cnt49 = hop_cnt; + meta._int_metadata_switch_id48 = switch_id_3; + meta._int_metadata_insert_byte_cnt50 = ins_byte_cnt; + meta._int_metadata_gpe_int_hdr_len852 = total_words; + hdr.int_header.setValid(); + hdr.int_header.ver = 2w0; + hdr.int_header.rep = 2w0; + hdr.int_header.c = 1w0; + hdr.int_header.e = 1w0; + hdr.int_header.rsvd1 = 5w0; + hdr.int_header.ins_cnt = ins_cnt_1; + hdr.int_header.max_hop_cnt = hop_cnt; + hdr.int_header.total_hop_cnt = 8w0; + hdr.int_header.instruction_mask_0003 = ins_mask0003; + hdr.int_header.instruction_mask_0407 = ins_mask0407; + hdr.int_header.instruction_mask_0811 = 4w0; + hdr.int_header.instruction_mask_1215 = 4w0; + hdr.int_header.rsvd2 = 16w0; + } + @name(".process_int_insertion.int_reset") action _process_int_insertion_int_reset_0() { + meta._int_metadata_switch_id48 = 32w0; + meta._int_metadata_insert_byte_cnt50 = 16w0; + meta._int_metadata_insert_cnt49 = 8w0; + meta._int_metadata_gpe_int_hdr_len852 = 8w0; + meta._int_metadata_gpe_int_hdr_len51 = 16w0; + meta._int_metadata_instruction_cnt53 = 16w0; + } + @name(".process_int_insertion.int_set_header_0003_i0") action _process_int_insertion_int_set_header_0003_i0_0() { + } + @name(".process_int_insertion.int_set_header_0003_i1") action _process_int_insertion_int_set_header_0003_i1_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + } + @name(".process_int_insertion.int_set_header_0003_i2") action _process_int_insertion_int_set_header_0003_i2_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i3") action _process_int_insertion_int_set_header_0003_i3_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i4") action _process_int_insertion_int_set_header_0003_i4_0() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + } + @name(".process_int_insertion.int_set_header_0003_i5") action _process_int_insertion_int_set_header_0003_i5_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + } + @name(".process_int_insertion.int_set_header_0003_i6") action _process_int_insertion_int_set_header_0003_i6_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + } + @name(".process_int_insertion.int_set_header_0003_i7") action _process_int_insertion_int_set_header_0003_i7_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + } + @name(".process_int_insertion.int_set_header_0003_i8") action _process_int_insertion_int_set_header_0003_i8_0() { + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i9") action _process_int_insertion_int_set_header_0003_i9_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i10") action _process_int_insertion_int_set_header_0003_i10_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i11") action _process_int_insertion_int_set_header_0003_i11_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i12") action _process_int_insertion_int_set_header_0003_i12_0() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i13") action _process_int_insertion_int_set_header_0003_i13_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i14") action _process_int_insertion_int_set_header_0003_i14_0() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0003_i15") action _process_int_insertion_int_set_header_0003_i15_0() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = meta._ingress_metadata_ifindex38; + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta._int_metadata_switch_id48; + } + @name(".process_int_insertion.int_set_header_0407_i0") action _process_int_insertion_int_set_header_0407_i0_0() { + } + @name(".process_int_insertion.int_set_header_0407_i1") action _process_int_insertion_int_set_header_0407_i1_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i2") action _process_int_insertion_int_set_header_0407_i2_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i3") action _process_int_insertion_int_set_header_0407_i3_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i4") action _process_int_insertion_int_set_header_0407_i4_0() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i5") action _process_int_insertion_int_set_header_0407_i5_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i6") action _process_int_insertion_int_set_header_0407_i6_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i7") action _process_int_insertion_int_set_header_0407_i7_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i8") action _process_int_insertion_int_set_header_0407_i8_0() { + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i9") action _process_int_insertion_int_set_header_0407_i9_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i10") action _process_int_insertion_int_set_header_0407_i10_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i11") action _process_int_insertion_int_set_header_0407_i11_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i12") action _process_int_insertion_int_set_header_0407_i12_0() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i13") action _process_int_insertion_int_set_header_0407_i13_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i14") action _process_int_insertion_int_set_header_0407_i14_0() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_header_0407_i15") action _process_int_insertion_int_set_header_0407_i15_0() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta._i2e_metadata_ingress_tstamp35; + } + @name(".process_int_insertion.int_set_e_bit") action _process_int_insertion_int_set_e_bit_0() { + hdr.int_header.e = 1w1; + } + @name(".process_int_insertion.int_update_total_hop_cnt") action _process_int_insertion_int_update_total_hop_cnt_0() { + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 8w1; + } + @name(".int_bos") table _int_bos { + actions = { + _process_int_insertion_int_set_header_0_bos_0(); + _process_int_insertion_int_set_header_1_bos_0(); + _process_int_insertion_int_set_header_2_bos_0(); + _process_int_insertion_int_set_header_3_bos_0(); + _process_int_insertion_int_set_header_4_bos_0(); + _process_int_insertion_int_set_header_5_bos_0(); + _process_int_insertion_int_set_header_6_bos_0(); + _process_int_insertion_int_set_header_7_bos_0(); + _process_int_insertion_nop_0(); + @defaultonly NoAction_15(); + } + key = { + hdr.int_header.total_hop_cnt : ternary @name("int_header.total_hop_cnt"); + hdr.int_header.instruction_mask_0003: ternary @name("int_header.instruction_mask_0003"); + hdr.int_header.instruction_mask_0407: ternary @name("int_header.instruction_mask_0407"); + hdr.int_header.instruction_mask_0811: ternary @name("int_header.instruction_mask_0811"); + hdr.int_header.instruction_mask_1215: ternary @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction_15(); + } + @name(".int_insert") table _int_insert { + actions = { + _process_int_insertion_int_transit_0(); + _process_int_insertion_int_src_0(); + _process_int_insertion_int_reset_0(); + @defaultonly NoAction_16(); + } + key = { + meta._int_metadata_i2e_source55: ternary @name("int_metadata_i2e.source"); + meta._int_metadata_i2e_sink54 : ternary @name("int_metadata_i2e.sink"); + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + } + size = 3; + default_action = NoAction_16(); + } + @name(".int_inst_0003") table _int_inst { + actions = { + _process_int_insertion_int_set_header_0003_i0_0(); + _process_int_insertion_int_set_header_0003_i1_0(); + _process_int_insertion_int_set_header_0003_i2_0(); + _process_int_insertion_int_set_header_0003_i3_0(); + _process_int_insertion_int_set_header_0003_i4_0(); + _process_int_insertion_int_set_header_0003_i5_0(); + _process_int_insertion_int_set_header_0003_i6_0(); + _process_int_insertion_int_set_header_0003_i7_0(); + _process_int_insertion_int_set_header_0003_i8_0(); + _process_int_insertion_int_set_header_0003_i9_0(); + _process_int_insertion_int_set_header_0003_i10_0(); + _process_int_insertion_int_set_header_0003_i11_0(); + _process_int_insertion_int_set_header_0003_i12_0(); + _process_int_insertion_int_set_header_0003_i13_0(); + _process_int_insertion_int_set_header_0003_i14_0(); + _process_int_insertion_int_set_header_0003_i15_0(); + @defaultonly NoAction_17(); + } + key = { + hdr.int_header.instruction_mask_0003: exact @name("int_header.instruction_mask_0003"); + } + size = 17; + default_action = NoAction_17(); + } + @name(".int_inst_0407") table _int_inst_0 { + actions = { + _process_int_insertion_int_set_header_0407_i0_0(); + _process_int_insertion_int_set_header_0407_i1_0(); + _process_int_insertion_int_set_header_0407_i2_0(); + _process_int_insertion_int_set_header_0407_i3_0(); + _process_int_insertion_int_set_header_0407_i4_0(); + _process_int_insertion_int_set_header_0407_i5_0(); + _process_int_insertion_int_set_header_0407_i6_0(); + _process_int_insertion_int_set_header_0407_i7_0(); + _process_int_insertion_int_set_header_0407_i8_0(); + _process_int_insertion_int_set_header_0407_i9_0(); + _process_int_insertion_int_set_header_0407_i10_0(); + _process_int_insertion_int_set_header_0407_i11_0(); + _process_int_insertion_int_set_header_0407_i12_0(); + _process_int_insertion_int_set_header_0407_i13_0(); + _process_int_insertion_int_set_header_0407_i14_0(); + _process_int_insertion_int_set_header_0407_i15_0(); + _process_int_insertion_nop_1(); + @defaultonly NoAction_18(); + } + key = { + hdr.int_header.instruction_mask_0407: exact @name("int_header.instruction_mask_0407"); + } + size = 17; + default_action = NoAction_18(); + } + @name(".int_inst_0811") table _int_inst_1 { + actions = { + _process_int_insertion_nop_2(); + @defaultonly NoAction_19(); + } + key = { + hdr.int_header.instruction_mask_0811: exact @name("int_header.instruction_mask_0811"); + } + size = 16; + default_action = NoAction_19(); + } + @name(".int_inst_1215") table _int_inst_2 { + actions = { + _process_int_insertion_nop_3(); + @defaultonly NoAction_20(); + } + key = { + hdr.int_header.instruction_mask_1215: exact @name("int_header.instruction_mask_1215"); + } + size = 17; + default_action = NoAction_20(); + } + @name(".int_meta_header_update") table _int_meta_header_update { + actions = { + _process_int_insertion_int_set_e_bit_0(); + _process_int_insertion_int_update_total_hop_cnt_0(); + @defaultonly NoAction_21(); + } + key = { + meta._int_metadata_insert_cnt49: ternary @name("int_metadata.insert_cnt"); + } + size = 2; + default_action = NoAction_21(); + } + @min_width(32) @name(".egress_bd_stats") direct_counter(CounterType.packets_and_bytes) _egress_bd_stats; + @name(".process_egress_bd_stats.nop_0") action _process_egress_bd_stats_nop_0() { + _egress_bd_stats.count(); + } + @name(".egress_bd_stats") table _egress_bd_stats_0 { + actions = { + _process_egress_bd_stats_nop_0(); + @defaultonly NoAction_22(); + } + key = { + meta._egress_metadata_bd19 : exact @name("egress_metadata.bd"); + meta._l2_metadata_lkp_pkt_type67: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + counters = _egress_bd_stats; + default_action = NoAction_22(); + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_0() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_1() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_2() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_3() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_4() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_5() { + } + @name(".process_tunnel_encap.nop") action _process_tunnel_encap_nop_6() { + } + @name(".process_tunnel_encap.set_egress_tunnel_vni") action _process_tunnel_encap_set_egress_tunnel_vni_0(@name("vnid") bit<24> vnid_1) { + meta._tunnel_metadata_vnid149 = vnid_1; + } + @name(".process_tunnel_encap.rewrite_tunnel_dmac") action _process_tunnel_encap_rewrite_tunnel_dmac_0(@name("dmac") bit<48> dmac_8) { + hdr.ethernet.dstAddr = dmac_8; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_dst") action _process_tunnel_encap_rewrite_tunnel_ipv4_dst_0(@name("ip") bit<32> ip) { + hdr.ipv4.dstAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_dst") action _process_tunnel_encap_rewrite_tunnel_ipv6_dst_0(@name("ip") bit<128> ip_4) { + hdr.ipv6.dstAddr = ip_4; + } + @name(".process_tunnel_encap.inner_ipv4_udp_rewrite") action _process_tunnel_encap_inner_ipv4_udp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_udp = hdr.udp; + meta._egress_metadata_payload_length17 = hdr.ipv4.totalLen; + hdr.udp.setInvalid(); + hdr.ipv4.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_tcp_rewrite") action _process_tunnel_encap_inner_ipv4_tcp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_tcp = hdr.tcp; + meta._egress_metadata_payload_length17 = hdr.ipv4.totalLen; + hdr.tcp.setInvalid(); + hdr.ipv4.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_icmp_rewrite") action _process_tunnel_encap_inner_ipv4_icmp_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_icmp = hdr.icmp; + meta._egress_metadata_payload_length17 = hdr.ipv4.totalLen; + hdr.icmp.setInvalid(); + hdr.ipv4.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_unknown_rewrite") action _process_tunnel_encap_inner_ipv4_unknown_rewrite_0() { + hdr.inner_ipv4 = hdr.ipv4; + meta._egress_metadata_payload_length17 = hdr.ipv4.totalLen; + hdr.ipv4.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w4; + } + @name(".process_tunnel_encap.inner_ipv6_udp_rewrite") action _process_tunnel_encap_inner_ipv6_udp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_udp = hdr.udp; + meta._egress_metadata_payload_length17 = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_tcp_rewrite") action _process_tunnel_encap_inner_ipv6_tcp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_tcp = hdr.tcp; + meta._egress_metadata_payload_length17 = hdr.ipv6.payloadLen + 16w40; + hdr.tcp.setInvalid(); + hdr.ipv6.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_icmp_rewrite") action _process_tunnel_encap_inner_ipv6_icmp_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_icmp = hdr.icmp; + meta._egress_metadata_payload_length17 = hdr.ipv6.payloadLen + 16w40; + hdr.icmp.setInvalid(); + hdr.ipv6.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_unknown_rewrite") action _process_tunnel_encap_inner_ipv6_unknown_rewrite_0() { + hdr.inner_ipv6 = hdr.ipv6; + meta._egress_metadata_payload_length17 = hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta._tunnel_metadata_inner_ip_proto153 = 8w41; + } + @name(".process_tunnel_encap.inner_non_ip_rewrite") action _process_tunnel_encap_inner_non_ip_rewrite_0() { + meta._egress_metadata_payload_length17 = (bit<16>)standard_metadata.packet_length + 16w65522; + } + @name(".process_tunnel_encap.ipv4_vxlan_rewrite") action _process_tunnel_encap_ipv4_vxlan_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = meta._hash_metadata_entropy_hash34; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta._egress_metadata_payload_length17 + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = meta._tunnel_metadata_vnid149; + hdr.vxlan.reserved2 = 8w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w17; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_genv_rewrite") action _process_tunnel_encap_ipv4_genv_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = meta._hash_metadata_entropy_hash34; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta._egress_metadata_payload_length17 + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = meta._tunnel_metadata_vnid149; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w17; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_nvgre_rewrite") action _process_tunnel_encap_ipv4_nvgre_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = meta._tunnel_metadata_vnid149; + hdr.nvgre.flow_id = meta._hash_metadata_entropy_hash34[7:0]; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w42; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_gre_rewrite") action _process_tunnel_encap_ipv4_gre_rewrite_0() { + hdr.gre.setValid(); + hdr.gre.proto = hdr.ethernet.etherType; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w24; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_ip_rewrite") action _process_tunnel_encap_ipv4_ip_rewrite_0() { + hdr.ipv4.setValid(); + hdr.ipv4.protocol = meta._tunnel_metadata_inner_ip_proto153; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w20; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_erspan_t3_rewrite") action _process_tunnel_encap_ipv4_erspan_t3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = meta._i2e_metadata_ingress_tstamp35; + hdr.erspan_t3_header.span_id = (bit<10>)meta._i2e_metadata_mirror_session_id36; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + hdr.ipv4.setValid(); + hdr.ipv4.protocol = 8w47; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + hdr.ipv4.totalLen = meta._egress_metadata_payload_length17 + 16w50; + } + @name(".process_tunnel_encap.ipv6_gre_rewrite") action _process_tunnel_encap_ipv6_gre_rewrite_0() { + hdr.gre.setValid(); + hdr.gre.proto = hdr.ethernet.etherType; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17 + 16w4; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_ip_rewrite") action _process_tunnel_encap_ipv6_ip_rewrite_0() { + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = meta._tunnel_metadata_inner_ip_proto153; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_nvgre_rewrite") action _process_tunnel_encap_ipv6_nvgre_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = meta._tunnel_metadata_vnid149; + hdr.nvgre.flow_id = meta._hash_metadata_entropy_hash34[7:0]; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17 + 16w22; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_vxlan_rewrite") action _process_tunnel_encap_ipv6_vxlan_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = meta._hash_metadata_entropy_hash34; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta._egress_metadata_payload_length17 + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = meta._tunnel_metadata_vnid149; + hdr.vxlan.reserved2 = 8w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w17; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17 + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_genv_rewrite") action _process_tunnel_encap_ipv6_genv_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = meta._hash_metadata_entropy_hash34; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = meta._egress_metadata_payload_length17 + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = meta._tunnel_metadata_vnid149; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w17; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17 + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_erspan_t3_rewrite") action _process_tunnel_encap_ipv6_erspan_t3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = meta._i2e_metadata_ingress_tstamp35; + hdr.erspan_t3_header.span_id = (bit<10>)meta._i2e_metadata_mirror_session_id36; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = 8w47; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + hdr.ipv6.payloadLen = meta._egress_metadata_payload_length17 + 16w26; + } + @name(".process_tunnel_encap.mpls_ethernet_push1_rewrite") action _process_tunnel_encap_mpls_ethernet_push1_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push1_rewrite") action _process_tunnel_encap_mpls_ip_push1_rewrite_0() { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push2_rewrite") action _process_tunnel_encap_mpls_ethernet_push2_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push2_rewrite") action _process_tunnel_encap_mpls_ip_push2_rewrite_0() { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push3_rewrite") action _process_tunnel_encap_mpls_ethernet_push3_rewrite_0() { + hdr.inner_ethernet = hdr.ethernet; + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push3_rewrite") action _process_tunnel_encap_mpls_ip_push3_rewrite_0() { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.fabric_rewrite") action _process_tunnel_encap_fabric_rewrite_0(@name("tunnel_index") bit<14> tunnel_index_17) { + meta._tunnel_metadata_tunnel_index144 = tunnel_index_17; + } + @name(".process_tunnel_encap.tunnel_mtu_check") action _process_tunnel_encap_tunnel_mtu_check_0(@name("l3_mtu") bit<16> l3_mtu_4) { + meta._l3_metadata_l3_mtu_check105 = l3_mtu_4 |-| meta._egress_metadata_payload_length17; + } + @name(".process_tunnel_encap.tunnel_mtu_miss") action _process_tunnel_encap_tunnel_mtu_miss_0() { + meta._l3_metadata_l3_mtu_check105 = 16w0xffff; + } + @name(".process_tunnel_encap.set_tunnel_rewrite_details") action _process_tunnel_encap_set_tunnel_rewrite_details_0(@name("outer_bd") bit<16> outer_bd_1, @name("smac_idx") bit<9> smac_idx_6, @name("dmac_idx") bit<14> dmac_idx, @name("sip_index") bit<9> sip_index, @name("dip_index") bit<14> dip_index) { + meta._egress_metadata_outer_bd20 = outer_bd_1; + meta._tunnel_metadata_tunnel_smac_index146 = smac_idx_6; + meta._tunnel_metadata_tunnel_dmac_index148 = dmac_idx; + meta._tunnel_metadata_tunnel_src_index145 = sip_index; + meta._tunnel_metadata_tunnel_dst_index147 = dip_index; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push1") action _process_tunnel_encap_set_mpls_rewrite_push1_0(@name("label1") bit<20> label1, @name("exp1") bit<3> exp1, @name("ttl1") bit<8> ttl1, @name("smac_idx") bit<9> smac_idx_7, @name("dmac_idx") bit<14> dmac_idx_4) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].bos = 1w0x1; + hdr.mpls[0].ttl = ttl1; + meta._tunnel_metadata_tunnel_smac_index146 = smac_idx_7; + meta._tunnel_metadata_tunnel_dmac_index148 = dmac_idx_4; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push2") action _process_tunnel_encap_set_mpls_rewrite_push2_0(@name("label1") bit<20> label1_3, @name("exp1") bit<3> exp1_3, @name("ttl1") bit<8> ttl1_3, @name("label2") bit<20> label2, @name("exp2") bit<3> exp2, @name("ttl2") bit<8> ttl2, @name("smac_idx") bit<9> smac_idx_8, @name("dmac_idx") bit<14> dmac_idx_5) { + hdr.mpls[0].label = label1_3; + hdr.mpls[0].exp = exp1_3; + hdr.mpls[0].ttl = ttl1_3; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x1; + meta._tunnel_metadata_tunnel_smac_index146 = smac_idx_8; + meta._tunnel_metadata_tunnel_dmac_index148 = dmac_idx_5; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push3") action _process_tunnel_encap_set_mpls_rewrite_push3_0(@name("label1") bit<20> label1_4, @name("exp1") bit<3> exp1_4, @name("ttl1") bit<8> ttl1_4, @name("label2") bit<20> label2_2, @name("exp2") bit<3> exp2_2, @name("ttl2") bit<8> ttl2_2, @name("label3") bit<20> label3, @name("exp3") bit<3> exp3, @name("ttl3") bit<8> ttl3, @name("smac_idx") bit<9> smac_idx_9, @name("dmac_idx") bit<14> dmac_idx_6) { + hdr.mpls[0].label = label1_4; + hdr.mpls[0].exp = exp1_4; + hdr.mpls[0].ttl = ttl1_4; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2_2; + hdr.mpls[1].exp = exp2_2; + hdr.mpls[1].ttl = ttl2_2; + hdr.mpls[1].bos = 1w0x0; + hdr.mpls[2].label = label3; + hdr.mpls[2].exp = exp3; + hdr.mpls[2].ttl = ttl3; + hdr.mpls[2].bos = 1w0x1; + meta._tunnel_metadata_tunnel_smac_index146 = smac_idx_9; + meta._tunnel_metadata_tunnel_dmac_index148 = dmac_idx_6; + } + @name(".process_tunnel_encap.cpu_rx_rewrite") action _process_tunnel_encap_cpu_rx_rewrite_0() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w5; + hdr.fabric_header_cpu.setValid(); + hdr.fabric_header_cpu.ingressPort = (bit<16>)meta._ingress_metadata_ingress_port37; + hdr.fabric_header_cpu.ingressIfindex = meta._ingress_metadata_ifindex38; + hdr.fabric_header_cpu.ingressBd = meta._ingress_metadata_bd42; + hdr.fabric_header_cpu.reasonCode = meta._fabric_metadata_reason_code28; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_unicast_rewrite") action _process_tunnel_encap_fabric_unicast_rewrite_0() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w1; + hdr.fabric_header.dstDevice = meta._fabric_metadata_dst_device29; + hdr.fabric_header.dstPortOrGroup = meta._fabric_metadata_dst_port30; + hdr.fabric_header_unicast.setValid(); + hdr.fabric_header_unicast.tunnelTerminate = meta._tunnel_metadata_tunnel_terminate150; + hdr.fabric_header_unicast.routed = meta._l3_metadata_routed101; + hdr.fabric_header_unicast.outerRouted = meta._l3_metadata_outer_routed102; + hdr.fabric_header_unicast.ingressTunnelType = meta._tunnel_metadata_ingress_tunnel_type137; + hdr.fabric_header_unicast.nexthopIndex = meta._l3_metadata_nexthop_index100; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_multicast_rewrite") action _process_tunnel_encap_fabric_multicast_rewrite_0(@name("fabric_mgid") bit<16> fabric_mgid) { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w2; + hdr.fabric_header.dstDevice = 8w127; + hdr.fabric_header.dstPortOrGroup = fabric_mgid; + hdr.fabric_header_multicast.ingressIfindex = meta._ingress_metadata_ifindex38; + hdr.fabric_header_multicast.ingressBd = meta._ingress_metadata_bd42; + hdr.fabric_header_multicast.setValid(); + hdr.fabric_header_multicast.tunnelTerminate = meta._tunnel_metadata_tunnel_terminate150; + hdr.fabric_header_multicast.routed = meta._l3_metadata_routed101; + hdr.fabric_header_multicast.outerRouted = meta._l3_metadata_outer_routed102; + hdr.fabric_header_multicast.ingressTunnelType = meta._tunnel_metadata_ingress_tunnel_type137; + hdr.fabric_header_multicast.mcastGrp = meta._multicast_metadata_mcast_grp127; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.rewrite_tunnel_smac") action _process_tunnel_encap_rewrite_tunnel_smac_0(@name("smac") bit<48> smac_0) { + hdr.ethernet.srcAddr = smac_0; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_src") action _process_tunnel_encap_rewrite_tunnel_ipv4_src_0(@name("ip") bit<32> ip_5) { + hdr.ipv4.srcAddr = ip_5; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_src") action _process_tunnel_encap_rewrite_tunnel_ipv6_src_0(@name("ip") bit<128> ip_6) { + hdr.ipv6.srcAddr = ip_6; + } + @name(".egress_vni") table _egress_vni { + actions = { + _process_tunnel_encap_nop_0(); + _process_tunnel_encap_set_egress_tunnel_vni_0(); + @defaultonly NoAction_23(); + } + key = { + meta._egress_metadata_bd19 : exact @name("egress_metadata.bd"); + meta._tunnel_metadata_egress_tunnel_type143: exact @name("tunnel_metadata.egress_tunnel_type"); + } + size = 1024; + default_action = NoAction_23(); + } + @name(".tunnel_dmac_rewrite") table _tunnel_dmac_rewrite { + actions = { + _process_tunnel_encap_nop_1(); + _process_tunnel_encap_rewrite_tunnel_dmac_0(); + @defaultonly NoAction_24(); + } + key = { + meta._tunnel_metadata_tunnel_dmac_index148: exact @name("tunnel_metadata.tunnel_dmac_index"); + } + size = 1024; + default_action = NoAction_24(); + } + @name(".tunnel_dst_rewrite") table _tunnel_dst_rewrite { + actions = { + _process_tunnel_encap_nop_2(); + _process_tunnel_encap_rewrite_tunnel_ipv4_dst_0(); + _process_tunnel_encap_rewrite_tunnel_ipv6_dst_0(); + @defaultonly NoAction_25(); + } + key = { + meta._tunnel_metadata_tunnel_dst_index147: exact @name("tunnel_metadata.tunnel_dst_index"); + } + size = 1024; + default_action = NoAction_25(); + } + @name(".tunnel_encap_process_inner") table _tunnel_encap_process_inner { + actions = { + _process_tunnel_encap_inner_ipv4_udp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_tcp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_icmp_rewrite_0(); + _process_tunnel_encap_inner_ipv4_unknown_rewrite_0(); + _process_tunnel_encap_inner_ipv6_udp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_tcp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_icmp_rewrite_0(); + _process_tunnel_encap_inner_ipv6_unknown_rewrite_0(); + _process_tunnel_encap_inner_non_ip_rewrite_0(); + @defaultonly NoAction_26(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + hdr.tcp.isValid() : exact @name("tcp.$valid$"); + hdr.udp.isValid() : exact @name("udp.$valid$"); + hdr.icmp.isValid(): exact @name("icmp.$valid$"); + } + size = 1024; + default_action = NoAction_26(); + } + @name(".tunnel_encap_process_outer") table _tunnel_encap_process_outer { + actions = { + _process_tunnel_encap_nop_3(); + _process_tunnel_encap_ipv4_vxlan_rewrite_0(); + _process_tunnel_encap_ipv4_genv_rewrite_0(); + _process_tunnel_encap_ipv4_nvgre_rewrite_0(); + _process_tunnel_encap_ipv4_gre_rewrite_0(); + _process_tunnel_encap_ipv4_ip_rewrite_0(); + _process_tunnel_encap_ipv4_erspan_t3_rewrite_0(); + _process_tunnel_encap_ipv6_gre_rewrite_0(); + _process_tunnel_encap_ipv6_ip_rewrite_0(); + _process_tunnel_encap_ipv6_nvgre_rewrite_0(); + _process_tunnel_encap_ipv6_vxlan_rewrite_0(); + _process_tunnel_encap_ipv6_genv_rewrite_0(); + _process_tunnel_encap_ipv6_erspan_t3_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push1_rewrite_0(); + _process_tunnel_encap_mpls_ip_push1_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push2_rewrite_0(); + _process_tunnel_encap_mpls_ip_push2_rewrite_0(); + _process_tunnel_encap_mpls_ethernet_push3_rewrite_0(); + _process_tunnel_encap_mpls_ip_push3_rewrite_0(); + _process_tunnel_encap_fabric_rewrite_0(); + @defaultonly NoAction_27(); + } + key = { + meta._tunnel_metadata_egress_tunnel_type143 : exact @name("tunnel_metadata.egress_tunnel_type"); + meta._tunnel_metadata_egress_header_count152: exact @name("tunnel_metadata.egress_header_count"); + meta._multicast_metadata_replica126 : exact @name("multicast_metadata.replica"); + } + size = 1024; + default_action = NoAction_27(); + } + @name(".tunnel_mtu") table _tunnel_mtu { + actions = { + _process_tunnel_encap_tunnel_mtu_check_0(); + _process_tunnel_encap_tunnel_mtu_miss_0(); + @defaultonly NoAction_28(); + } + key = { + meta._tunnel_metadata_tunnel_index144: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction_28(); + } + @name(".tunnel_rewrite") table _tunnel_rewrite { + actions = { + _process_tunnel_encap_nop_4(); + _process_tunnel_encap_set_tunnel_rewrite_details_0(); + _process_tunnel_encap_set_mpls_rewrite_push1_0(); + _process_tunnel_encap_set_mpls_rewrite_push2_0(); + _process_tunnel_encap_set_mpls_rewrite_push3_0(); + _process_tunnel_encap_cpu_rx_rewrite_0(); + _process_tunnel_encap_fabric_unicast_rewrite_0(); + _process_tunnel_encap_fabric_multicast_rewrite_0(); + @defaultonly NoAction_29(); + } + key = { + meta._tunnel_metadata_tunnel_index144: exact @name("tunnel_metadata.tunnel_index"); + } + size = 1024; + default_action = NoAction_29(); + } + @name(".tunnel_smac_rewrite") table _tunnel_smac_rewrite { + actions = { + _process_tunnel_encap_nop_5(); + _process_tunnel_encap_rewrite_tunnel_smac_0(); + @defaultonly NoAction_30(); + } + key = { + meta._tunnel_metadata_tunnel_smac_index146: exact @name("tunnel_metadata.tunnel_smac_index"); + } + size = 1024; + default_action = NoAction_30(); + } + @name(".tunnel_src_rewrite") table _tunnel_src_rewrite { + actions = { + _process_tunnel_encap_nop_6(); + _process_tunnel_encap_rewrite_tunnel_ipv4_src_0(); + _process_tunnel_encap_rewrite_tunnel_ipv6_src_0(); + @defaultonly NoAction_31(); + } + key = { + meta._tunnel_metadata_tunnel_src_index145: exact @name("tunnel_metadata.tunnel_src_index"); + } + size = 1024; + default_action = NoAction_31(); + } + @name(".process_int_outer_encap.int_update_vxlan_gpe_ipv4") action _process_int_outer_encap_int_update_vxlan_gpe_ipv4_0() { + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta._int_metadata_insert_byte_cnt50; + hdr.udp.length_ = hdr.udp.length_ + meta._int_metadata_insert_byte_cnt50; + hdr.vxlan_gpe_int_header.len = hdr.vxlan_gpe_int_header.len + meta._int_metadata_gpe_int_hdr_len852; + } + @name(".process_int_outer_encap.int_add_update_vxlan_gpe_ipv4") action _process_int_outer_encap_int_add_update_vxlan_gpe_ipv4_0() { + hdr.vxlan_gpe_int_header.setValid(); + hdr.vxlan_gpe_int_header.int_type = 8w0x1; + hdr.vxlan_gpe_int_header.next_proto = 8w3; + hdr.vxlan_gpe.next_proto = 8w5; + hdr.vxlan_gpe_int_header.len = meta._int_metadata_gpe_int_hdr_len852; + hdr.ipv4.totalLen = hdr.ipv4.totalLen + meta._int_metadata_insert_byte_cnt50; + hdr.udp.length_ = hdr.udp.length_ + meta._int_metadata_insert_byte_cnt50; + } + @name(".process_int_outer_encap.nop") action _process_int_outer_encap_nop_0() { + } + @name(".int_outer_encap") table _int_outer_encap { + actions = { + _process_int_outer_encap_int_update_vxlan_gpe_ipv4_0(); + _process_int_outer_encap_int_add_update_vxlan_gpe_ipv4_0(); + _process_int_outer_encap_nop_0(); + @defaultonly NoAction_32(); + } + key = { + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + hdr.vxlan_gpe.isValid() : exact @name("vxlan_gpe.$valid$"); + meta._int_metadata_i2e_source55 : exact @name("int_metadata_i2e.source"); + meta._tunnel_metadata_egress_tunnel_type143: ternary @name("tunnel_metadata.egress_tunnel_type"); + } + size = 8; + default_action = NoAction_32(); + } + @name(".process_vlan_xlate.set_egress_packet_vlan_untagged") action _process_vlan_xlate_set_egress_packet_vlan_untagged_0() { + } + @name(".process_vlan_xlate.set_egress_packet_vlan_tagged") action _process_vlan_xlate_set_egress_packet_vlan_tagged_0(@name("vlan_id") bit<12> vlan_id) { + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[0].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[0].vid = vlan_id; + hdr.ethernet.etherType = 16w0x8100; + } + @name(".process_vlan_xlate.set_egress_packet_vlan_double_tagged") action _process_vlan_xlate_set_egress_packet_vlan_double_tagged_0(@name("s_tag") bit<12> s_tag, @name("c_tag") bit<12> c_tag) { + hdr.vlan_tag_[1].setValid(); + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[1].etherType = hdr.ethernet.etherType; + hdr.vlan_tag_[1].vid = c_tag; + hdr.vlan_tag_[0].etherType = 16w0x8100; + hdr.vlan_tag_[0].vid = s_tag; + hdr.ethernet.etherType = 16w0x9100; + } + @name(".egress_vlan_xlate") table _egress_vlan_xlate { + actions = { + _process_vlan_xlate_set_egress_packet_vlan_untagged_0(); + _process_vlan_xlate_set_egress_packet_vlan_tagged_0(); + _process_vlan_xlate_set_egress_packet_vlan_double_tagged_0(); + @defaultonly NoAction_33(); + } + key = { + meta._egress_metadata_ifindex25: exact @name("egress_metadata.ifindex"); + meta._egress_metadata_bd19 : exact @name("egress_metadata.bd"); + } + size = 1024; + default_action = NoAction_33(); + } + @name(".process_egress_filter.egress_filter_check") action _process_egress_filter_egress_filter_check_0() { + meta._egress_filter_metadata_ifindex_check12 = meta._ingress_metadata_ifindex38 ^ meta._egress_metadata_ifindex25; + meta._egress_filter_metadata_bd13 = meta._ingress_metadata_outer_bd41 ^ meta._egress_metadata_outer_bd20; + meta._egress_filter_metadata_inner_bd14 = meta._ingress_metadata_bd42 ^ meta._egress_metadata_bd19; + } + @name(".process_egress_filter.set_egress_filter_drop") action _process_egress_filter_set_egress_filter_drop_0() { + mark_to_drop(standard_metadata); + } + @name(".egress_filter") table _egress_filter { + actions = { + _process_egress_filter_egress_filter_check_0(); + @defaultonly NoAction_34(); + } + default_action = NoAction_34(); + } + @name(".egress_filter_drop") table _egress_filter_drop { + actions = { + _process_egress_filter_set_egress_filter_drop_0(); + @defaultonly NoAction_35(); + } + default_action = NoAction_35(); + } + @name(".process_egress_acl.nop") action _process_egress_acl_nop_0() { + } + @name(".process_egress_acl.egress_mirror") action _process_egress_acl_egress_mirror_0(@name("session_id") bit<32> session_id) { + meta._i2e_metadata_mirror_session_id36 = (bit<16>)session_id; + clone_preserving_field_list(CloneType.E2E, session_id, 8w3); + } + @name(".process_egress_acl.egress_mirror_drop") action _process_egress_acl_egress_mirror_drop_0(@name("session_id") bit<32> session_id_6) { + meta._i2e_metadata_mirror_session_id36 = (bit<16>)session_id_6; + clone_preserving_field_list(CloneType.E2E, session_id_6, 8w3); + mark_to_drop(standard_metadata); + } + @name(".process_egress_acl.egress_redirect_to_cpu") action _process_egress_acl_egress_redirect_to_cpu_0(@name("reason_code") bit<16> reason_code_0) { + meta._fabric_metadata_reason_code28 = reason_code_0; + clone_preserving_field_list(CloneType.E2E, 32w250, 8w2); + mark_to_drop(standard_metadata); + } + @name(".egress_acl") table _egress_acl { + actions = { + _process_egress_acl_nop_0(); + _process_egress_acl_egress_mirror_0(); + _process_egress_acl_egress_mirror_drop_0(); + _process_egress_acl_egress_redirect_to_cpu_0(); + @defaultonly NoAction_36(); + } + key = { + standard_metadata.egress_port : ternary @name("standard_metadata.egress_port"); + meta._l3_metadata_l3_mtu_check105: ternary @name("l3_metadata.l3_mtu_check"); + } + size = 512; + default_action = NoAction_36(); + } + apply { + if (meta._egress_metadata_bypass15 == 1w0) { + if (standard_metadata.instance_type != 32w0 && standard_metadata.instance_type != 32w5) { + mirror_0.apply(); + } else if (standard_metadata.egress_rid != 16w0) { + _rid.apply(); + _replica_type.apply(); + } + switch (egress_port_mapping_0.apply().action_run) { + egress_port_type_normal: { + if (standard_metadata.instance_type == 32w0 || standard_metadata.instance_type == 32w5) { + _vlan_decap.apply(); + } + if (meta._tunnel_metadata_tunnel_terminate150 == 1w1) { + if (meta._multicast_metadata_inner_replica125 == 1w1 || meta._multicast_metadata_replica126 == 1w0) { + _tunnel_decap_process_outer.apply(); + _tunnel_decap_process_inner.apply(); + } + } + if (meta._egress_metadata_routed22 == 1w0 || meta._l3_metadata_nexthop_index100 != 16w0) { + _rewrite.apply(); + } else { + _rewrite_multicast.apply(); + } + _egress_bd_map.apply(); + if (meta._egress_metadata_routed22 == 1w1) { + _l3_rewrite.apply(); + _smac_rewrite.apply(); + } + _mtu.apply(); + switch (_int_insert.apply().action_run) { + _process_int_insertion_int_transit_0: { + if (meta._int_metadata_insert_cnt49 != 8w0) { + _int_inst.apply(); + _int_inst_0.apply(); + _int_inst_1.apply(); + _int_inst_2.apply(); + _int_bos.apply(); + } + _int_meta_header_update.apply(); + } + default: { + } + } + _egress_bd_stats_0.apply(); + } + default: { + } + } + if (meta._fabric_metadata_fabric_header_present27 == 1w0 && meta._tunnel_metadata_egress_tunnel_type143 != 5w0) { + _egress_vni.apply(); + if (meta._tunnel_metadata_egress_tunnel_type143 != 5w15 && meta._tunnel_metadata_egress_tunnel_type143 != 5w16) { + _tunnel_encap_process_inner.apply(); + } + _tunnel_encap_process_outer.apply(); + _tunnel_rewrite.apply(); + _tunnel_mtu.apply(); + _tunnel_src_rewrite.apply(); + _tunnel_dst_rewrite.apply(); + _tunnel_smac_rewrite.apply(); + _tunnel_dmac_rewrite.apply(); + } + if (meta._int_metadata_insert_cnt49 != 8w0) { + _int_outer_encap.apply(); + } + if (meta._egress_metadata_port_type16 == 2w0) { + _egress_vlan_xlate.apply(); + } + _egress_filter.apply(); + if (meta._multicast_metadata_inner_replica125 == 1w1) { + if (meta._tunnel_metadata_ingress_tunnel_type137 == 5w0 && meta._tunnel_metadata_egress_tunnel_type143 == 5w0 && meta._egress_filter_metadata_bd13 == 16w0 && meta._egress_filter_metadata_ifindex_check12 == 16w0 || meta._tunnel_metadata_ingress_tunnel_type137 != 5w0 && meta._tunnel_metadata_egress_tunnel_type143 != 5w0 && meta._egress_filter_metadata_inner_bd14 == 16w0) { + _egress_filter_drop.apply(); + } + } + } + if (meta._egress_metadata_bypass15 == 1w0) { + _egress_acl.apply(); + } + } +} + +@name(".storm_control_meter") meter>(32w1024, MeterType.bytes) storm_control_meter; +@name(".ingress_bd_stats_count") @min_width(32) counter>(32w1024, CounterType.packets_and_bytes) ingress_bd_stats_count; +@name(".acl_stats_count") @min_width(16) counter>(32w1024, CounterType.packets_and_bytes) acl_stats_count; +@name("mac_learn_digest") struct mac_learn_digest { + bit<16> bd; + bit<48> lkp_mac_sa; + bit<16> ifindex; +} + +@name(".drop_stats") counter>(32w1024, CounterType.packets) drop_stats; +@name(".drop_stats_2") counter>(32w1024, CounterType.packets) drop_stats_2; +struct tuple_0 { + bit<32> f0; + bit<32> f1; + bit<8> f2; + bit<16> f3; + bit<16> f4; +} + +struct tuple_1 { + bit<48> f0; + bit<48> f1; + bit<32> f2; + bit<32> f3; + bit<8> f4; + bit<16> f5; + bit<16> f6; +} + +struct tuple_2 { + bit<128> f0; + bit<128> f1; + bit<8> f2; + bit<16> f3; + bit<16> f4; +} + +struct tuple_3 { + bit<48> f0; + bit<48> f1; + bit<128> f2; + bit<128> f3; + bit<8> f4; + bit<16> f5; + bit<16> f6; +} + +struct tuple_4 { + bit<16> f0; + bit<48> f1; + bit<48> f2; + bit<16> f3; +} + +control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @noWarn("unused") @name(".NoAction") action NoAction_37() { + } + @noWarn("unused") @name(".NoAction") action NoAction_38() { + } + @noWarn("unused") @name(".NoAction") action NoAction_39() { + } + @noWarn("unused") @name(".NoAction") action NoAction_40() { + } + @noWarn("unused") @name(".NoAction") action NoAction_41() { + } + @noWarn("unused") @name(".NoAction") action NoAction_42() { + } + @noWarn("unused") @name(".NoAction") action NoAction_43() { + } + @noWarn("unused") @name(".NoAction") action NoAction_44() { + } + @noWarn("unused") @name(".NoAction") action NoAction_45() { + } + @noWarn("unused") @name(".NoAction") action NoAction_46() { + } + @noWarn("unused") @name(".NoAction") action NoAction_47() { + } + @noWarn("unused") @name(".NoAction") action NoAction_48() { + } + @noWarn("unused") @name(".NoAction") action NoAction_49() { + } + @noWarn("unused") @name(".NoAction") action NoAction_50() { + } + @noWarn("unused") @name(".NoAction") action NoAction_51() { + } + @noWarn("unused") @name(".NoAction") action NoAction_52() { + } + @noWarn("unused") @name(".NoAction") action NoAction_53() { + } + @noWarn("unused") @name(".NoAction") action NoAction_54() { + } + @noWarn("unused") @name(".NoAction") action NoAction_55() { + } + @noWarn("unused") @name(".NoAction") action NoAction_56() { + } + @noWarn("unused") @name(".NoAction") action NoAction_57() { + } + @noWarn("unused") @name(".NoAction") action NoAction_58() { + } + @noWarn("unused") @name(".NoAction") action NoAction_59() { + } + @noWarn("unused") @name(".NoAction") action NoAction_60() { + } + @noWarn("unused") @name(".NoAction") action NoAction_61() { + } + @noWarn("unused") @name(".NoAction") action NoAction_62() { + } + @noWarn("unused") @name(".NoAction") action NoAction_63() { + } + @noWarn("unused") @name(".NoAction") action NoAction_64() { + } + @noWarn("unused") @name(".NoAction") action NoAction_65() { + } + @noWarn("unused") @name(".NoAction") action NoAction_66() { + } + @noWarn("unused") @name(".NoAction") action NoAction_67() { + } + @noWarn("unused") @name(".NoAction") action NoAction_68() { + } + @noWarn("unused") @name(".NoAction") action NoAction_69() { + } + @noWarn("unused") @name(".NoAction") action NoAction_70() { + } + @noWarn("unused") @name(".NoAction") action NoAction_71() { + } + @noWarn("unused") @name(".NoAction") action NoAction_72() { + } + @noWarn("unused") @name(".NoAction") action NoAction_73() { + } + @noWarn("unused") @name(".NoAction") action NoAction_74() { + } + @noWarn("unused") @name(".NoAction") action NoAction_75() { + } + @noWarn("unused") @name(".NoAction") action NoAction_76() { + } + @noWarn("unused") @name(".NoAction") action NoAction_77() { + } + @noWarn("unused") @name(".NoAction") action NoAction_78() { + } + @noWarn("unused") @name(".NoAction") action NoAction_79() { + } + @noWarn("unused") @name(".NoAction") action NoAction_80() { + } + @noWarn("unused") @name(".NoAction") action NoAction_81() { + } + @noWarn("unused") @name(".NoAction") action NoAction_82() { + } + @noWarn("unused") @name(".NoAction") action NoAction_83() { + } + @noWarn("unused") @name(".NoAction") action NoAction_84() { + } + @noWarn("unused") @name(".NoAction") action NoAction_85() { + } + @noWarn("unused") @name(".NoAction") action NoAction_86() { + } + @noWarn("unused") @name(".NoAction") action NoAction_87() { + } + @noWarn("unused") @name(".NoAction") action NoAction_88() { + } + @noWarn("unused") @name(".NoAction") action NoAction_89() { + } + @noWarn("unused") @name(".NoAction") action NoAction_90() { + } + @noWarn("unused") @name(".NoAction") action NoAction_91() { + } + @noWarn("unused") @name(".NoAction") action NoAction_92() { + } + @noWarn("unused") @name(".NoAction") action NoAction_93() { + } + @noWarn("unused") @name(".NoAction") action NoAction_94() { + } + @noWarn("unused") @name(".NoAction") action NoAction_95() { + } + @noWarn("unused") @name(".NoAction") action NoAction_96() { + } + @noWarn("unused") @name(".NoAction") action NoAction_97() { + } + @noWarn("unused") @name(".NoAction") action NoAction_98() { + } + @noWarn("unused") @name(".NoAction") action NoAction_99() { + } + @noWarn("unused") @name(".NoAction") action NoAction_100() { + } + @noWarn("unused") @name(".NoAction") action NoAction_101() { + } + @noWarn("unused") @name(".NoAction") action NoAction_102() { + } + @noWarn("unused") @name(".NoAction") action NoAction_103() { + } + @noWarn("unused") @name(".NoAction") action NoAction_104() { + } + @noWarn("unused") @name(".NoAction") action NoAction_105() { + } + @noWarn("unused") @name(".NoAction") action NoAction_106() { + } + @noWarn("unused") @name(".NoAction") action NoAction_107() { + } + @noWarn("unused") @name(".NoAction") action NoAction_108() { + } + @noWarn("unused") @name(".NoAction") action NoAction_109() { + } + @noWarn("unused") @name(".NoAction") action NoAction_110() { + } + @noWarn("unused") @name(".NoAction") action NoAction_111() { + } + @noWarn("unused") @name(".NoAction") action NoAction_112() { + } + @noWarn("unused") @name(".NoAction") action NoAction_113() { + } + @noWarn("unused") @name(".NoAction") action NoAction_114() { + } + @name(".ingress.rmac_hit") action rmac_hit_1() { + meta._l3_metadata_rmac_hit91 = 1w1; + } + @name(".ingress.rmac_miss") action rmac_miss() { + meta._l3_metadata_rmac_hit91 = 1w0; + } + @name(".rmac") table rmac_0 { + actions = { + rmac_hit_1(); + rmac_miss(); + @defaultonly NoAction_37(); + } + key = { + meta._l3_metadata_rmac_group90: exact @name("l3_metadata.rmac_group"); + meta._l2_metadata_lkp_mac_da66: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction_37(); + } + @name(".process_ingress_port_mapping.set_ifindex") action _process_ingress_port_mapping_set_ifindex_0(@name("ifindex") bit<16> ifindex_14, @name("port_type") bit<2> port_type_1) { + meta._ingress_metadata_ifindex38 = ifindex_14; + meta._ingress_metadata_port_type40 = port_type_1; + } + @name(".process_ingress_port_mapping.set_ingress_port_properties") action _process_ingress_port_mapping_set_ingress_port_properties_0(@name("if_label") bit<16> if_label_1) { + meta._acl_metadata_if_label9 = if_label_1; + } + @name(".ingress_port_mapping") table _ingress_port_mapping { + actions = { + _process_ingress_port_mapping_set_ifindex_0(); + @defaultonly NoAction_38(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction_38(); + } + @name(".ingress_port_properties") table _ingress_port_properties { + actions = { + _process_ingress_port_mapping_set_ingress_port_properties_0(); + @defaultonly NoAction_39(); + } + key = { + standard_metadata.ingress_port: exact @name("standard_metadata.ingress_port"); + } + size = 288; + default_action = NoAction_39(); + } + @name(".process_validate_outer_header.malformed_outer_ethernet_packet") action _process_validate_outer_header_malformed_outer_ethernet_packet_0(@name("drop_reason") bit<8> drop_reason_5) { + meta._ingress_metadata_drop_flag43 = 1w1; + meta._ingress_metadata_drop_reason44 = drop_reason_5; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_untagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_untagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_single_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_double_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_unicast_packet_qinq_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_untagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_untagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_single_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_double_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_multicast_packet_qinq_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_untagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_untagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w4; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_single_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w4; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_double_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w4; + meta._l2_metadata_lkp_mac_type68 = hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged") action _process_validate_outer_header_set_valid_outer_broadcast_packet_qinq_tagged_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w4; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".validate_outer_ethernet") table _validate_outer_ethernet { + actions = { + _process_validate_outer_header_malformed_outer_ethernet_packet_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_unicast_packet_qinq_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_multicast_packet_qinq_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_untagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_single_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_double_tagged_0(); + _process_validate_outer_header_set_valid_outer_broadcast_packet_qinq_tagged_0(); + @defaultonly NoAction_40(); + } + key = { + hdr.ethernet.srcAddr : ternary @name("ethernet.srcAddr"); + hdr.ethernet.dstAddr : ternary @name("ethernet.dstAddr"); + hdr.vlan_tag_[0].isValid(): exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[1].isValid(): exact @name("vlan_tag_[1].$valid$"); + } + size = 512; + default_action = NoAction_40(); + } + @name(".validate_outer_ipv4_header.set_valid_outer_ipv4_packet") action _validate_outer_ipv4_header_set_valid_outer_ipv4_packet() { + meta._l3_metadata_lkp_ip_type80 = 2w1; + meta._l3_metadata_lkp_ip_tc83 = hdr.ipv4.diffserv; + meta._l3_metadata_lkp_ip_version81 = hdr.ipv4.version; + } + @name(".validate_outer_ipv4_header.set_malformed_outer_ipv4_packet") action _validate_outer_ipv4_header_set_malformed_outer_ipv4_packet(@name("drop_reason") bit<8> drop_reason_6) { + meta._ingress_metadata_drop_flag43 = 1w1; + meta._ingress_metadata_drop_reason44 = drop_reason_6; + } + @name(".validate_outer_ipv4_packet") table _validate_outer_ipv4_packet_0 { + actions = { + _validate_outer_ipv4_header_set_valid_outer_ipv4_packet(); + _validate_outer_ipv4_header_set_malformed_outer_ipv4_packet(); + @defaultonly NoAction_41(); + } + key = { + hdr.ipv4.version : ternary @name("ipv4.version"); + hdr.ipv4.ttl : ternary @name("ipv4.ttl"); + hdr.ipv4.srcAddr[31:24]: ternary @name("ipv4.srcAddr"); + } + size = 512; + default_action = NoAction_41(); + } + @name(".validate_outer_ipv6_header.set_valid_outer_ipv6_packet") action _validate_outer_ipv6_header_set_valid_outer_ipv6_packet() { + meta._l3_metadata_lkp_ip_type80 = 2w2; + meta._l3_metadata_lkp_ip_tc83 = hdr.ipv6.trafficClass; + meta._l3_metadata_lkp_ip_version81 = hdr.ipv6.version; + } + @name(".validate_outer_ipv6_header.set_malformed_outer_ipv6_packet") action _validate_outer_ipv6_header_set_malformed_outer_ipv6_packet(@name("drop_reason") bit<8> drop_reason_7) { + meta._ingress_metadata_drop_flag43 = 1w1; + meta._ingress_metadata_drop_reason44 = drop_reason_7; + } + @name(".validate_outer_ipv6_packet") table _validate_outer_ipv6_packet_0 { + actions = { + _validate_outer_ipv6_header_set_valid_outer_ipv6_packet(); + _validate_outer_ipv6_header_set_malformed_outer_ipv6_packet(); + @defaultonly NoAction_42(); + } + key = { + hdr.ipv6.version : ternary @name("ipv6.version"); + hdr.ipv6.hopLimit : ternary @name("ipv6.hopLimit"); + hdr.ipv6.srcAddr[127:112]: ternary @name("ipv6.srcAddr"); + } + size = 512; + default_action = NoAction_42(); + } + @name(".validate_mpls_header.set_valid_mpls_label1") action _validate_mpls_header_set_valid_mpls_label1() { + meta._tunnel_metadata_mpls_label140 = hdr.mpls[0].label; + meta._tunnel_metadata_mpls_exp141 = hdr.mpls[0].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label2") action _validate_mpls_header_set_valid_mpls_label2() { + meta._tunnel_metadata_mpls_label140 = hdr.mpls[1].label; + meta._tunnel_metadata_mpls_exp141 = hdr.mpls[1].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label3") action _validate_mpls_header_set_valid_mpls_label3() { + meta._tunnel_metadata_mpls_label140 = hdr.mpls[2].label; + meta._tunnel_metadata_mpls_exp141 = hdr.mpls[2].exp; + } + @name(".validate_mpls_packet") table _validate_mpls_packet_0 { + actions = { + _validate_mpls_header_set_valid_mpls_label1(); + _validate_mpls_header_set_valid_mpls_label2(); + _validate_mpls_header_set_valid_mpls_label3(); + @defaultonly NoAction_43(); + } + key = { + hdr.mpls[0].label : ternary @name("mpls[0].label"); + hdr.mpls[0].bos : ternary @name("mpls[0].bos"); + hdr.mpls[0].isValid(): exact @name("mpls[0].$valid$"); + hdr.mpls[1].label : ternary @name("mpls[1].label"); + hdr.mpls[1].bos : ternary @name("mpls[1].bos"); + hdr.mpls[1].isValid(): exact @name("mpls[1].$valid$"); + hdr.mpls[2].label : ternary @name("mpls[2].label"); + hdr.mpls[2].bos : ternary @name("mpls[2].bos"); + hdr.mpls[2].isValid(): exact @name("mpls[2].$valid$"); + } + size = 512; + default_action = NoAction_43(); + } + @name(".process_global_params.set_config_parameters") action _process_global_params_set_config_parameters_0(@name("enable_dod") bit<8> enable_dod_0) { + meta._i2e_metadata_ingress_tstamp35 = (bit<32>)standard_metadata.ingress_global_timestamp; + meta._ingress_metadata_ingress_port37 = standard_metadata.ingress_port; + meta._l2_metadata_same_if_check79 = meta._ingress_metadata_ifindex38; + standard_metadata.egress_spec = 9w511; + random>(meta._ingress_metadata_sflow_take_sample47, 32w0, 32w0x7fffffff); + } + @name(".switch_config_params") table _switch_config_params { + actions = { + _process_global_params_set_config_parameters_0(); + @defaultonly NoAction_44(); + } + size = 1; + default_action = NoAction_44(); + } + @name(".process_port_vlan_mapping.set_bd_properties") action _process_port_vlan_mapping_set_bd_properties_0(@name("bd") bit<16> bd_24, @name("vrf") bit<16> vrf_7, @name("stp_group") bit<10> stp_group_1, @name("learning_enabled") bit<1> learning_enabled_1, @name("bd_label") bit<16> bd_label_4, @name("stats_idx") bit<16> stats_idx, @name("rmac_group") bit<10> rmac_group_5, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_3, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_3, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_3, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_3, @name("igmp_snooping_enabled") bit<1> igmp_snooping_enabled_2, @name("mld_snooping_enabled") bit<1> mld_snooping_enabled_2, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_3, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_3, @name("mrpf_group") bit<16> mrpf_group, @name("ipv4_mcast_key") bit<16> ipv4_mcast_key_1, @name("ipv4_mcast_key_type") bit<1> ipv4_mcast_key_type_1, @name("ipv6_mcast_key") bit<16> ipv6_mcast_key_1, @name("ipv6_mcast_key_type") bit<1> ipv6_mcast_key_type_1) { + meta._ingress_metadata_bd42 = bd_24; + meta._ingress_metadata_outer_bd41 = bd_24; + meta._acl_metadata_bd_label10 = bd_label_4; + meta._l2_metadata_stp_group74 = stp_group_1; + meta._l2_metadata_bd_stats_idx76 = stats_idx; + meta._l2_metadata_learning_enabled77 = learning_enabled_1; + meta._l3_metadata_vrf89 = vrf_7; + meta._ipv4_metadata_ipv4_unicast_enabled58 = ipv4_unicast_enabled_3; + meta._ipv6_metadata_ipv6_unicast_enabled62 = ipv6_unicast_enabled_3; + meta._ipv4_metadata_ipv4_urpf_mode59 = ipv4_urpf_mode_3; + meta._ipv6_metadata_ipv6_urpf_mode64 = ipv6_urpf_mode_3; + meta._l3_metadata_rmac_group90 = rmac_group_5; + meta._multicast_metadata_igmp_snooping_enabled118 = igmp_snooping_enabled_2; + meta._multicast_metadata_mld_snooping_enabled119 = mld_snooping_enabled_2; + meta._multicast_metadata_ipv4_multicast_enabled116 = ipv4_multicast_enabled_3; + meta._multicast_metadata_ipv6_multicast_enabled117 = ipv6_multicast_enabled_3; + meta._multicast_metadata_bd_mrpf_group120 = mrpf_group; + meta._multicast_metadata_ipv4_mcast_key_type108 = ipv4_mcast_key_type_1; + meta._multicast_metadata_ipv4_mcast_key109 = ipv4_mcast_key_1; + meta._multicast_metadata_ipv6_mcast_key_type110 = ipv6_mcast_key_type_1; + meta._multicast_metadata_ipv6_mcast_key111 = ipv6_mcast_key_1; + } + @name(".process_port_vlan_mapping.port_vlan_mapping_miss") action _process_port_vlan_mapping_port_vlan_mapping_miss_0() { + meta._l2_metadata_port_vlan_mapping_miss78 = 1w1; + } + @name(".port_vlan_mapping") table _port_vlan_mapping { + actions = { + _process_port_vlan_mapping_set_bd_properties_0(); + _process_port_vlan_mapping_port_vlan_mapping_miss_0(); + @defaultonly NoAction_45(); + } + key = { + meta._ingress_metadata_ifindex38: exact @name("ingress_metadata.ifindex"); + hdr.vlan_tag_[0].isValid() : exact @name("vlan_tag_[0].$valid$"); + hdr.vlan_tag_[0].vid : exact @name("vlan_tag_[0].vid"); + hdr.vlan_tag_[1].isValid() : exact @name("vlan_tag_[1].$valid$"); + hdr.vlan_tag_[1].vid : exact @name("vlan_tag_[1].vid"); + } + size = 4096; + implementation = bd_action_profile; + default_action = NoAction_45(); + } + @name(".process_spanning_tree.set_stp_state") action _process_spanning_tree_set_stp_state_0(@name("stp_state") bit<3> stp_state_1) { + meta._l2_metadata_stp_state75 = stp_state_1; + } + @name(".spanning_tree") table _spanning_tree { + actions = { + _process_spanning_tree_set_stp_state_0(); + @defaultonly NoAction_46(); + } + key = { + meta._ingress_metadata_ifindex38: exact @name("ingress_metadata.ifindex"); + meta._l2_metadata_stp_group74 : exact @name("l2_metadata.stp_group"); + } + size = 1024; + default_action = NoAction_46(); + } + @name(".process_ip_sourceguard.on_miss") action _process_ip_sourceguard_on_miss_0() { + } + @name(".process_ip_sourceguard.ipsg_miss") action _process_ip_sourceguard_ipsg_miss_0() { + meta._security_metadata_ipsg_check_fail135 = 1w1; + } + @name(".ipsg") table _ipsg { + actions = { + _process_ip_sourceguard_on_miss_0(); + @defaultonly NoAction_47(); + } + key = { + meta._ingress_metadata_ifindex38 : exact @name("ingress_metadata.ifindex"); + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._l2_metadata_lkp_mac_sa65 : exact @name("l2_metadata.lkp_mac_sa"); + meta._ipv4_metadata_lkp_ipv4_sa56: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction_47(); + } + @name(".ipsg_permit_special") table _ipsg_permit_special { + actions = { + _process_ip_sourceguard_ipsg_miss_0(); + @defaultonly NoAction_48(); + } + key = { + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_l4_dport86 : ternary @name("l3_metadata.lkp_l4_dport"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction_48(); + } + @name(".process_int_endpoint.int_sink_update_vxlan_gpe_v4") action _process_int_endpoint_int_sink_update_vxlan_gpe_v4_0() { + hdr.vxlan_gpe.next_proto = hdr.vxlan_gpe_int_header.next_proto; + hdr.vxlan_gpe_int_header.setInvalid(); + hdr.ipv4.totalLen = hdr.ipv4.totalLen - meta._int_metadata_insert_byte_cnt50; + hdr.udp.length_ = hdr.udp.length_ - meta._int_metadata_insert_byte_cnt50; + } + @name(".process_int_endpoint.nop") action _process_int_endpoint_nop_0() { + } + @name(".process_int_endpoint.int_set_src") action _process_int_endpoint_int_set_src_0() { + meta._int_metadata_i2e_source55 = 1w1; + } + @name(".process_int_endpoint.int_set_no_src") action _process_int_endpoint_int_set_no_src_0() { + meta._int_metadata_i2e_source55 = 1w0; + } + @name(".process_int_endpoint.int_sink_gpe") action _process_int_endpoint_int_sink_gpe_0(@name("mirror_id") bit<32> mirror_id) { + meta._int_metadata_insert_byte_cnt50 = meta._int_metadata_gpe_int_hdr_len51 << 2; + meta._int_metadata_i2e_sink54 = 1w1; + meta._i2e_metadata_mirror_session_id36 = (bit<16>)mirror_id; + clone_preserving_field_list(CloneType.I2E, mirror_id, 8w4); + hdr.int_header.setInvalid(); + hdr.int_val[0].setInvalid(); + hdr.int_val[1].setInvalid(); + hdr.int_val[2].setInvalid(); + hdr.int_val[3].setInvalid(); + hdr.int_val[4].setInvalid(); + hdr.int_val[5].setInvalid(); + hdr.int_val[6].setInvalid(); + hdr.int_val[7].setInvalid(); + hdr.int_val[8].setInvalid(); + hdr.int_val[9].setInvalid(); + hdr.int_val[10].setInvalid(); + hdr.int_val[11].setInvalid(); + hdr.int_val[12].setInvalid(); + hdr.int_val[13].setInvalid(); + hdr.int_val[14].setInvalid(); + hdr.int_val[15].setInvalid(); + hdr.int_val[16].setInvalid(); + hdr.int_val[17].setInvalid(); + hdr.int_val[18].setInvalid(); + hdr.int_val[19].setInvalid(); + hdr.int_val[20].setInvalid(); + hdr.int_val[21].setInvalid(); + hdr.int_val[22].setInvalid(); + hdr.int_val[23].setInvalid(); + } + @name(".process_int_endpoint.int_no_sink") action _process_int_endpoint_int_no_sink_0() { + meta._int_metadata_i2e_sink54 = 1w0; + } + @name(".int_sink_update_outer") table _int_sink_update_outer { + actions = { + _process_int_endpoint_int_sink_update_vxlan_gpe_v4_0(); + _process_int_endpoint_nop_0(); + @defaultonly NoAction_49(); + } + key = { + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta._int_metadata_i2e_sink54 : exact @name("int_metadata_i2e.sink"); + } + size = 2; + default_action = NoAction_49(); + } + @name(".int_source") table _int_source { + actions = { + _process_int_endpoint_int_set_src_0(); + _process_int_endpoint_int_set_no_src_0(); + @defaultonly NoAction_50(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta._ipv4_metadata_lkp_ipv4_sa56: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + hdr.inner_ipv4.srcAddr : ternary @name("inner_ipv4.srcAddr"); + } + size = 256; + default_action = NoAction_50(); + } + @name(".int_terminate") table _int_terminate { + actions = { + _process_int_endpoint_int_sink_gpe_0(); + _process_int_endpoint_int_no_sink_0(); + @defaultonly NoAction_51(); + } + key = { + hdr.int_header.isValid() : exact @name("int_header.$valid$"); + hdr.vxlan_gpe_int_header.isValid(): exact @name("vxlan_gpe_int_header.$valid$"); + hdr.ipv4.isValid() : exact @name("ipv4.$valid$"); + meta._ipv4_metadata_lkp_ipv4_da57 : ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv4.dstAddr : ternary @name("inner_ipv4.dstAddr"); + } + size = 256; + default_action = NoAction_51(); + } + @name(".process_tunnel.on_miss") action _process_tunnel_on_miss_0() { + } + @name(".process_tunnel.outer_rmac_hit") action _process_tunnel_outer_rmac_hit_0() { + meta._l3_metadata_rmac_hit91 = 1w1; + } + @name(".process_tunnel.nop") action _process_tunnel_nop_0() { + } + @name(".process_tunnel.tunnel_lookup_miss") action _process_tunnel_tunnel_lookup_miss_0() { + } + @name(".process_tunnel.terminate_tunnel_inner_non_ip") action _process_tunnel_terminate_tunnel_inner_non_ip_0(@name("bd") bit<16> bd_25, @name("bd_label") bit<16> bd_label_5, @name("stats_idx") bit<16> stats_idx_4) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._ingress_metadata_bd42 = bd_25; + meta._acl_metadata_bd_label10 = bd_label_5; + meta._l2_metadata_bd_stats_idx76 = stats_idx_4; + meta._l3_metadata_lkp_ip_type80 = 2w0; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv4") action _process_tunnel_terminate_tunnel_inner_ethernet_ipv4_0(@name("bd") bit<16> bd_26, @name("vrf") bit<16> vrf_8, @name("rmac_group") bit<10> rmac_group_6, @name("bd_label") bit<16> bd_label_6, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_4, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_4, @name("igmp_snooping_enabled") bit<1> igmp_snooping_enabled_3, @name("stats_idx") bit<16> stats_idx_5, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_4, @name("mrpf_group") bit<16> mrpf_group_5) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._ingress_metadata_bd42 = bd_26; + meta._l3_metadata_vrf89 = vrf_8; + meta._qos_metadata_outer_dscp129 = meta._l3_metadata_lkp_ip_tc83; + meta._ipv4_metadata_ipv4_unicast_enabled58 = ipv4_unicast_enabled_4; + meta._ipv4_metadata_ipv4_urpf_mode59 = ipv4_urpf_mode_4; + meta._l3_metadata_rmac_group90 = rmac_group_6; + meta._acl_metadata_bd_label10 = bd_label_6; + meta._l2_metadata_bd_stats_idx76 = stats_idx_5; + meta._l3_metadata_lkp_ip_type80 = 2w1; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv4.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv4.diffserv; + meta._multicast_metadata_igmp_snooping_enabled118 = igmp_snooping_enabled_3; + meta._multicast_metadata_ipv4_multicast_enabled116 = ipv4_multicast_enabled_4; + meta._multicast_metadata_bd_mrpf_group120 = mrpf_group_5; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv4") action _process_tunnel_terminate_tunnel_inner_ipv4_0(@name("vrf") bit<16> vrf_9, @name("rmac_group") bit<10> rmac_group_7, @name("ipv4_urpf_mode") bit<2> ipv4_urpf_mode_5, @name("ipv4_unicast_enabled") bit<1> ipv4_unicast_enabled_5, @name("ipv4_multicast_enabled") bit<1> ipv4_multicast_enabled_5, @name("mrpf_group") bit<16> mrpf_group_6) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._l3_metadata_vrf89 = vrf_9; + meta._qos_metadata_outer_dscp129 = meta._l3_metadata_lkp_ip_tc83; + meta._ipv4_metadata_ipv4_unicast_enabled58 = ipv4_unicast_enabled_5; + meta._ipv4_metadata_ipv4_urpf_mode59 = ipv4_urpf_mode_5; + meta._l3_metadata_rmac_group90 = rmac_group_7; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._l3_metadata_lkp_ip_type80 = 2w1; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv4.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv4.diffserv; + meta._multicast_metadata_bd_mrpf_group120 = mrpf_group_6; + meta._multicast_metadata_ipv4_multicast_enabled116 = ipv4_multicast_enabled_5; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv6") action _process_tunnel_terminate_tunnel_inner_ethernet_ipv6_0(@name("bd") bit<16> bd_27, @name("vrf") bit<16> vrf_10, @name("rmac_group") bit<10> rmac_group_8, @name("bd_label") bit<16> bd_label_7, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_4, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_4, @name("mld_snooping_enabled") bit<1> mld_snooping_enabled_3, @name("stats_idx") bit<16> stats_idx_6, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_4, @name("mrpf_group") bit<16> mrpf_group_7) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._ingress_metadata_bd42 = bd_27; + meta._l3_metadata_vrf89 = vrf_10; + meta._qos_metadata_outer_dscp129 = meta._l3_metadata_lkp_ip_tc83; + meta._ipv6_metadata_ipv6_unicast_enabled62 = ipv6_unicast_enabled_4; + meta._ipv6_metadata_ipv6_urpf_mode64 = ipv6_urpf_mode_4; + meta._l3_metadata_rmac_group90 = rmac_group_8; + meta._acl_metadata_bd_label10 = bd_label_7; + meta._l2_metadata_bd_stats_idx76 = stats_idx_6; + meta._l3_metadata_lkp_ip_type80 = 2w2; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv6.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv6.trafficClass; + meta._multicast_metadata_bd_mrpf_group120 = mrpf_group_7; + meta._multicast_metadata_ipv6_multicast_enabled117 = ipv6_multicast_enabled_4; + meta._multicast_metadata_mld_snooping_enabled119 = mld_snooping_enabled_3; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv6") action _process_tunnel_terminate_tunnel_inner_ipv6_0(@name("vrf") bit<16> vrf_11, @name("rmac_group") bit<10> rmac_group_9, @name("ipv6_unicast_enabled") bit<1> ipv6_unicast_enabled_5, @name("ipv6_urpf_mode") bit<2> ipv6_urpf_mode_5, @name("ipv6_multicast_enabled") bit<1> ipv6_multicast_enabled_5, @name("mrpf_group") bit<16> mrpf_group_8) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._l3_metadata_vrf89 = vrf_11; + meta._qos_metadata_outer_dscp129 = meta._l3_metadata_lkp_ip_tc83; + meta._ipv6_metadata_ipv6_unicast_enabled62 = ipv6_unicast_enabled_5; + meta._ipv6_metadata_ipv6_urpf_mode64 = ipv6_urpf_mode_5; + meta._l3_metadata_rmac_group90 = rmac_group_9; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._l3_metadata_lkp_ip_type80 = 2w2; + meta._ipv6_metadata_lkp_ipv6_sa60 = hdr.inner_ipv6.srcAddr; + meta._ipv6_metadata_lkp_ipv6_da61 = hdr.inner_ipv6.dstAddr; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv6.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv6.trafficClass; + meta._multicast_metadata_bd_mrpf_group120 = mrpf_group_8; + meta._multicast_metadata_ipv6_multicast_enabled117 = ipv6_multicast_enabled_5; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action _process_tunnel_non_ip_tunnel_lookup_miss_0() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action _process_tunnel_non_ip_tunnel_lookup_miss_1() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action _process_tunnel_ipv4_tunnel_lookup_miss_0() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv4_metadata_lkp_ipv4_sa56 = hdr.ipv4.srcAddr; + meta._ipv4_metadata_lkp_ipv4_da57 = hdr.ipv4.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv4.protocol; + meta._l3_metadata_lkp_ip_ttl84 = hdr.ipv4.ttl; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action _process_tunnel_ipv4_tunnel_lookup_miss_1() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv4_metadata_lkp_ipv4_sa56 = hdr.ipv4.srcAddr; + meta._ipv4_metadata_lkp_ipv4_da57 = hdr.ipv4.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv4.protocol; + meta._l3_metadata_lkp_ip_ttl84 = hdr.ipv4.ttl; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action _process_tunnel_ipv6_tunnel_lookup_miss_0() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv6_metadata_lkp_ipv6_sa60 = hdr.ipv6.srcAddr; + meta._ipv6_metadata_lkp_ipv6_da61 = hdr.ipv6.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv6.nextHdr; + meta._l3_metadata_lkp_ip_ttl84 = hdr.ipv6.hopLimit; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action _process_tunnel_ipv6_tunnel_lookup_miss_1() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv6_metadata_lkp_ipv6_sa60 = hdr.ipv6.srcAddr; + meta._ipv6_metadata_lkp_ipv6_da61 = hdr.ipv6.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv6.nextHdr; + meta._l3_metadata_lkp_ip_ttl84 = hdr.ipv6.hopLimit; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + standard_metadata.mcast_grp = 16w0; + } + @name(".outer_rmac") table _outer_rmac { + actions = { + _process_tunnel_on_miss_0(); + _process_tunnel_outer_rmac_hit_0(); + @defaultonly NoAction_52(); + } + key = { + meta._l3_metadata_rmac_group90: exact @name("l3_metadata.rmac_group"); + hdr.ethernet.dstAddr : exact @name("ethernet.dstAddr"); + } + size = 1024; + default_action = NoAction_52(); + } + @name(".tunnel") table _tunnel { + actions = { + _process_tunnel_nop_0(); + _process_tunnel_tunnel_lookup_miss_0(); + _process_tunnel_terminate_tunnel_inner_non_ip_0(); + _process_tunnel_terminate_tunnel_inner_ethernet_ipv4_0(); + _process_tunnel_terminate_tunnel_inner_ipv4_0(); + _process_tunnel_terminate_tunnel_inner_ethernet_ipv6_0(); + _process_tunnel_terminate_tunnel_inner_ipv6_0(); + @defaultonly NoAction_53(); + } + key = { + meta._tunnel_metadata_tunnel_vni138 : exact @name("tunnel_metadata.tunnel_vni"); + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_53(); + } + @name(".tunnel_lookup_miss") table _tunnel_lookup_miss { + actions = { + _process_tunnel_non_ip_tunnel_lookup_miss_0(); + _process_tunnel_ipv4_tunnel_lookup_miss_0(); + _process_tunnel_ipv6_tunnel_lookup_miss_0(); + @defaultonly NoAction_54(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction_54(); + } + @name(".tunnel_miss") table _tunnel_miss { + actions = { + _process_tunnel_non_ip_tunnel_lookup_miss_1(); + _process_tunnel_ipv4_tunnel_lookup_miss_1(); + _process_tunnel_ipv6_tunnel_lookup_miss_1(); + @defaultonly NoAction_55(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + default_action = NoAction_55(); + } + @name(".process_ingress_fabric.nop") action _process_ingress_fabric_nop() { + } + @name(".process_ingress_fabric.nop") action _process_ingress_fabric_nop_1() { + } + @name(".process_ingress_fabric.terminate_cpu_packet") action _process_ingress_fabric_terminate_cpu_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta._egress_metadata_bypass15 = hdr.fabric_header_cpu.txBypass; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_cpu.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_unicast_packet") action _process_ingress_fabric_switch_fabric_unicast_packet() { + meta._fabric_metadata_fabric_header_present27 = 1w1; + meta._fabric_metadata_dst_device29 = hdr.fabric_header.dstDevice; + meta._fabric_metadata_dst_port30 = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_unicast_packet") action _process_ingress_fabric_terminate_fabric_unicast_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta._tunnel_metadata_tunnel_terminate150 = hdr.fabric_header_unicast.tunnelTerminate; + meta._tunnel_metadata_ingress_tunnel_type137 = hdr.fabric_header_unicast.ingressTunnelType; + meta._l3_metadata_nexthop_index100 = hdr.fabric_header_unicast.nexthopIndex; + meta._l3_metadata_routed101 = hdr.fabric_header_unicast.routed; + meta._l3_metadata_outer_routed102 = hdr.fabric_header_unicast.outerRouted; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_unicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_multicast_packet") action _process_ingress_fabric_switch_fabric_multicast_packet() { + meta._fabric_metadata_fabric_header_present27 = 1w1; + standard_metadata.mcast_grp = hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_multicast_packet") action _process_ingress_fabric_terminate_fabric_multicast_packet() { + meta._tunnel_metadata_tunnel_terminate150 = hdr.fabric_header_multicast.tunnelTerminate; + meta._tunnel_metadata_ingress_tunnel_type137 = hdr.fabric_header_multicast.ingressTunnelType; + meta._l3_metadata_nexthop_index100 = 16w0; + meta._l3_metadata_routed101 = hdr.fabric_header_multicast.routed; + meta._l3_metadata_outer_routed102 = hdr.fabric_header_multicast.outerRouted; + standard_metadata.mcast_grp = hdr.fabric_header_multicast.mcastGrp; + hdr.ethernet.etherType = hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_multicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.set_ingress_ifindex_properties") action _process_ingress_fabric_set_ingress_ifindex_properties() { + } + @name(".process_ingress_fabric.non_ip_over_fabric") action _process_ingress_fabric_non_ip_over_fabric() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._l2_metadata_lkp_mac_type68 = hdr.ethernet.etherType; + } + @name(".process_ingress_fabric.ipv4_over_fabric") action _process_ingress_fabric_ipv4_over_fabric() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv4_metadata_lkp_ipv4_sa56 = hdr.ipv4.srcAddr; + meta._ipv4_metadata_lkp_ipv4_da57 = hdr.ipv4.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv4.protocol; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + } + @name(".process_ingress_fabric.ipv6_over_fabric") action _process_ingress_fabric_ipv6_over_fabric() { + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._ipv6_metadata_lkp_ipv6_sa60 = hdr.ipv6.srcAddr; + meta._ipv6_metadata_lkp_ipv6_da61 = hdr.ipv6.dstAddr; + meta._l3_metadata_lkp_ip_proto82 = hdr.ipv6.nextHdr; + meta._l3_metadata_lkp_l4_sport85 = meta._l3_metadata_lkp_outer_l4_sport87; + meta._l3_metadata_lkp_l4_dport86 = meta._l3_metadata_lkp_outer_l4_dport88; + } + @name(".fabric_ingress_dst_lkp") table _fabric_ingress_dst_lkp_0 { + actions = { + _process_ingress_fabric_nop(); + _process_ingress_fabric_terminate_cpu_packet(); + _process_ingress_fabric_switch_fabric_unicast_packet(); + _process_ingress_fabric_terminate_fabric_unicast_packet(); + _process_ingress_fabric_switch_fabric_multicast_packet(); + _process_ingress_fabric_terminate_fabric_multicast_packet(); + @defaultonly NoAction_56(); + } + key = { + hdr.fabric_header.dstDevice: exact @name("fabric_header.dstDevice"); + } + default_action = NoAction_56(); + } + @name(".fabric_ingress_src_lkp") table _fabric_ingress_src_lkp_0 { + actions = { + _process_ingress_fabric_nop_1(); + _process_ingress_fabric_set_ingress_ifindex_properties(); + @defaultonly NoAction_57(); + } + key = { + hdr.fabric_header_multicast.ingressIfindex: exact @name("fabric_header_multicast.ingressIfindex"); + } + size = 1024; + default_action = NoAction_57(); + } + @name(".native_packet_over_fabric") table _native_packet_over_fabric_0 { + actions = { + _process_ingress_fabric_non_ip_over_fabric(); + _process_ingress_fabric_ipv4_over_fabric(); + _process_ingress_fabric_ipv6_over_fabric(); + @defaultonly NoAction_58(); + } + key = { + hdr.ipv4.isValid(): exact @name("ipv4.$valid$"); + hdr.ipv6.isValid(): exact @name("ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_58(); + } + @name(".process_outer_ipv4_multicast.nop") action _process_outer_ipv4_multicast_nop() { + } + @name(".process_outer_ipv4_multicast.nop") action _process_outer_ipv4_multicast_nop_0() { + } + @name(".process_outer_ipv4_multicast.on_miss") action _process_outer_ipv4_multicast_on_miss() { + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_s_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index, @name("mcast_rpf_group") bit<16> mcast_rpf_group_12) { + standard_metadata.mcast_grp = mc_index; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_12 ^ meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit") action _process_outer_ipv4_multicast_outer_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_22) { + standard_metadata.mcast_grp = mc_index_22; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_23, @name("mcast_rpf_group") bit<16> mcast_rpf_group_13) { + meta._multicast_metadata_outer_mcast_mode113 = 2w1; + standard_metadata.mcast_grp = mc_index_23; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_13 ^ meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_24, @name("mcast_rpf_group") bit<16> mcast_rpf_group_14) { + meta._multicast_metadata_outer_mcast_mode113 = 2w2; + standard_metadata.mcast_grp = mc_index_24; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_14 | meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit") action _process_outer_ipv4_multicast_outer_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_25) { + standard_metadata.mcast_grp = mc_index_25; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".outer_ipv4_multicast") table _outer_ipv4_multicast_0 { + actions = { + _process_outer_ipv4_multicast_nop(); + _process_outer_ipv4_multicast_on_miss(); + _process_outer_ipv4_multicast_outer_multicast_route_s_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction_59(); + } + key = { + meta._multicast_metadata_ipv4_mcast_key_type108: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta._multicast_metadata_ipv4_mcast_key109 : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + } + size = 1024; + default_action = NoAction_59(); + } + @name(".outer_ipv4_multicast_star_g") table _outer_ipv4_multicast_star_g_0 { + actions = { + _process_outer_ipv4_multicast_nop_0(); + _process_outer_ipv4_multicast_outer_multicast_route_sm_star_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_route_bidir_star_g_hit(); + _process_outer_ipv4_multicast_outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction_60(); + } + key = { + meta._multicast_metadata_ipv4_mcast_key_type108: exact @name("multicast_metadata.ipv4_mcast_key_type"); + meta._multicast_metadata_ipv4_mcast_key109 : exact @name("multicast_metadata.ipv4_mcast_key"); + hdr.ipv4.dstAddr : ternary @name("ipv4.dstAddr"); + } + size = 512; + default_action = NoAction_60(); + } + @name(".process_outer_ipv6_multicast.nop") action _process_outer_ipv6_multicast_nop() { + } + @name(".process_outer_ipv6_multicast.nop") action _process_outer_ipv6_multicast_nop_0() { + } + @name(".process_outer_ipv6_multicast.on_miss") action _process_outer_ipv6_multicast_on_miss() { + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_s_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_26, @name("mcast_rpf_group") bit<16> mcast_rpf_group_15) { + standard_metadata.mcast_grp = mc_index_26; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_15 ^ meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit") action _process_outer_ipv6_multicast_outer_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_27) { + standard_metadata.mcast_grp = mc_index_27; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_28, @name("mcast_rpf_group") bit<16> mcast_rpf_group_16) { + meta._multicast_metadata_outer_mcast_mode113 = 2w1; + standard_metadata.mcast_grp = mc_index_28; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_16 ^ meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_29, @name("mcast_rpf_group") bit<16> mcast_rpf_group_17) { + meta._multicast_metadata_outer_mcast_mode113 = 2w2; + standard_metadata.mcast_grp = mc_index_29; + meta._multicast_metadata_outer_mcast_route_hit112 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_17 | meta._multicast_metadata_bd_mrpf_group120; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit") action _process_outer_ipv6_multicast_outer_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_30) { + standard_metadata.mcast_grp = mc_index_30; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".outer_ipv6_multicast") table _outer_ipv6_multicast_0 { + actions = { + _process_outer_ipv6_multicast_nop(); + _process_outer_ipv6_multicast_on_miss(); + _process_outer_ipv6_multicast_outer_multicast_route_s_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_bridge_s_g_hit(); + @defaultonly NoAction_61(); + } + key = { + meta._multicast_metadata_ipv6_mcast_key_type110: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta._multicast_metadata_ipv6_mcast_key111 : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + } + size = 1024; + default_action = NoAction_61(); + } + @name(".outer_ipv6_multicast_star_g") table _outer_ipv6_multicast_star_g_0 { + actions = { + _process_outer_ipv6_multicast_nop_0(); + _process_outer_ipv6_multicast_outer_multicast_route_sm_star_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_route_bidir_star_g_hit(); + _process_outer_ipv6_multicast_outer_multicast_bridge_star_g_hit(); + @defaultonly NoAction_62(); + } + key = { + meta._multicast_metadata_ipv6_mcast_key_type110: exact @name("multicast_metadata.ipv6_mcast_key_type"); + meta._multicast_metadata_ipv6_mcast_key111 : exact @name("multicast_metadata.ipv6_mcast_key"); + hdr.ipv6.dstAddr : ternary @name("ipv6.dstAddr"); + } + size = 512; + default_action = NoAction_62(); + } + @name(".process_ipv4_vtep.nop") action _process_ipv4_vtep_nop() { + } + @name(".process_ipv4_vtep.set_tunnel_termination_flag") action _process_ipv4_vtep_set_tunnel_termination_flag() { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + } + @name(".process_ipv4_vtep.set_tunnel_vni_and_termination_flag") action _process_ipv4_vtep_set_tunnel_vni_and_termination_flag(@name("tunnel_vni") bit<24> tunnel_vni_2) { + meta._tunnel_metadata_tunnel_vni138 = tunnel_vni_2; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + } + @name(".process_ipv4_vtep.on_miss") action _process_ipv4_vtep_on_miss() { + } + @name(".process_ipv4_vtep.src_vtep_hit") action _process_ipv4_vtep_src_vtep_hit(@name("ifindex") bit<16> ifindex_15) { + meta._ingress_metadata_ifindex38 = ifindex_15; + } + @name(".ipv4_dest_vtep") table _ipv4_dest_vtep_0 { + actions = { + _process_ipv4_vtep_nop(); + _process_ipv4_vtep_set_tunnel_termination_flag(); + _process_ipv4_vtep_set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction_63(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + hdr.ipv4.dstAddr : exact @name("ipv4.dstAddr"); + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_63(); + } + @name(".ipv4_src_vtep") table _ipv4_src_vtep_0 { + actions = { + _process_ipv4_vtep_on_miss(); + _process_ipv4_vtep_src_vtep_hit(); + @defaultonly NoAction_64(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + hdr.ipv4.srcAddr : exact @name("ipv4.srcAddr"); + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_64(); + } + @name(".process_ipv6_vtep.nop") action _process_ipv6_vtep_nop() { + } + @name(".process_ipv6_vtep.set_tunnel_termination_flag") action _process_ipv6_vtep_set_tunnel_termination_flag() { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + } + @name(".process_ipv6_vtep.set_tunnel_vni_and_termination_flag") action _process_ipv6_vtep_set_tunnel_vni_and_termination_flag(@name("tunnel_vni") bit<24> tunnel_vni_3) { + meta._tunnel_metadata_tunnel_vni138 = tunnel_vni_3; + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + } + @name(".process_ipv6_vtep.on_miss") action _process_ipv6_vtep_on_miss() { + } + @name(".process_ipv6_vtep.src_vtep_hit") action _process_ipv6_vtep_src_vtep_hit(@name("ifindex") bit<16> ifindex_16) { + meta._ingress_metadata_ifindex38 = ifindex_16; + } + @name(".ipv6_dest_vtep") table _ipv6_dest_vtep_0 { + actions = { + _process_ipv6_vtep_nop(); + _process_ipv6_vtep_set_tunnel_termination_flag(); + _process_ipv6_vtep_set_tunnel_vni_and_termination_flag(); + @defaultonly NoAction_65(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + hdr.ipv6.dstAddr : exact @name("ipv6.dstAddr"); + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_65(); + } + @name(".ipv6_src_vtep") table _ipv6_src_vtep_0 { + actions = { + _process_ipv6_vtep_on_miss(); + _process_ipv6_vtep_src_vtep_hit(); + @defaultonly NoAction_66(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + hdr.ipv6.srcAddr : exact @name("ipv6.srcAddr"); + meta._tunnel_metadata_ingress_tunnel_type137: exact @name("tunnel_metadata.ingress_tunnel_type"); + } + size = 1024; + default_action = NoAction_66(); + } + @name(".process_mpls.terminate_eompls") action _process_mpls_terminate_eompls(@name("bd") bit<16> bd_28, @name("tunnel_type") bit<5> tunnel_type_11) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._tunnel_metadata_ingress_tunnel_type137 = tunnel_type_11; + meta._ingress_metadata_bd42 = bd_28; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_vpls") action _process_mpls_terminate_vpls(@name("bd") bit<16> bd_29, @name("tunnel_type") bit<5> tunnel_type_12) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._tunnel_metadata_ingress_tunnel_type137 = tunnel_type_12; + meta._ingress_metadata_bd42 = bd_29; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_ipv4_over_mpls") action _process_mpls_terminate_ipv4_over_mpls(@name("vrf") bit<16> vrf_12, @name("tunnel_type") bit<5> tunnel_type_13) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._tunnel_metadata_ingress_tunnel_type137 = tunnel_type_13; + meta._l3_metadata_vrf89 = vrf_12; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._l3_metadata_lkp_ip_type80 = 2w1; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv4.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv4.diffserv; + } + @name(".process_mpls.terminate_ipv6_over_mpls") action _process_mpls_terminate_ipv6_over_mpls(@name("vrf") bit<16> vrf_13, @name("tunnel_type") bit<5> tunnel_type_14) { + meta._tunnel_metadata_tunnel_terminate150 = 1w1; + meta._tunnel_metadata_ingress_tunnel_type137 = tunnel_type_14; + meta._l3_metadata_vrf89 = vrf_13; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + meta._l3_metadata_lkp_ip_type80 = 2w2; + meta._l2_metadata_lkp_mac_type68 = hdr.inner_ethernet.etherType; + meta._l3_metadata_lkp_ip_version81 = hdr.inner_ipv6.version; + meta._l3_metadata_lkp_ip_tc83 = hdr.inner_ipv6.trafficClass; + } + @name(".process_mpls.terminate_pw") action _process_mpls_terminate_pw(@name("ifindex") bit<16> ifindex_17) { + meta._ingress_metadata_egress_ifindex39 = ifindex_17; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + } + @name(".process_mpls.forward_mpls") action _process_mpls_forward_mpls(@name("nexthop_index") bit<16> nexthop_index_8) { + meta._l3_metadata_fib_nexthop97 = nexthop_index_8; + meta._l3_metadata_fib_nexthop_type98 = 1w0; + meta._l3_metadata_fib_hit96 = 1w1; + meta._l2_metadata_lkp_mac_sa65 = hdr.ethernet.srcAddr; + meta._l2_metadata_lkp_mac_da66 = hdr.ethernet.dstAddr; + } + @name(".mpls") table _mpls_0 { + actions = { + _process_mpls_terminate_eompls(); + _process_mpls_terminate_vpls(); + _process_mpls_terminate_ipv4_over_mpls(); + _process_mpls_terminate_ipv6_over_mpls(); + _process_mpls_terminate_pw(); + _process_mpls_forward_mpls(); + @defaultonly NoAction_67(); + } + key = { + meta._tunnel_metadata_mpls_label140: exact @name("tunnel_metadata.mpls_label"); + hdr.inner_ipv4.isValid() : exact @name("inner_ipv4.$valid$"); + hdr.inner_ipv6.isValid() : exact @name("inner_ipv6.$valid$"); + } + size = 1024; + default_action = NoAction_67(); + } + @name(".sflow_ingress_session_pkt_counter") direct_counter(CounterType.packets) _sflow_ingress_session_pkt_counter; + @name(".process_ingress_sflow.nop") action _process_ingress_sflow_nop_1() { + } + @name(".process_ingress_sflow.sflow_ing_session_enable") action _process_ingress_sflow_sflow_ing_session_enable_0(@name("rate_thr") bit<32> rate_thr, @name("session_id") bit<16> session_id_7) { + meta._ingress_metadata_sflow_take_sample47 = rate_thr |+| meta._ingress_metadata_sflow_take_sample47; + meta._sflow_metadata_sflow_session_id136 = session_id_7; + } + @name(".process_ingress_sflow.nop_1") action _process_ingress_sflow_nop_2() { + _sflow_ingress_session_pkt_counter.count(); + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu_0") action _process_ingress_sflow_sflow_ing_pkt_to_cpu_0(@name("sflow_i2e_mirror_id") bit<32> sflow_i2e_mirror_id, @name("reason_code") bit<16> reason_code_5) { + _sflow_ingress_session_pkt_counter.count(); + meta._fabric_metadata_reason_code28 = reason_code_5; + meta._i2e_metadata_mirror_session_id36 = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, sflow_i2e_mirror_id, 8w6); + } + @name(".sflow_ing_take_sample") table _sflow_ing_take_sample { + actions = { + _process_ingress_sflow_nop_2(); + _process_ingress_sflow_sflow_ing_pkt_to_cpu_0(); + @defaultonly NoAction_68(); + } + key = { + meta._ingress_metadata_sflow_take_sample47: ternary @name("ingress_metadata.sflow_take_sample"); + meta._sflow_metadata_sflow_session_id136 : exact @name("sflow_metadata.sflow_session_id"); + } + counters = _sflow_ingress_session_pkt_counter; + default_action = NoAction_68(); + } + @name(".sflow_ingress") table _sflow_ingress { + actions = { + _process_ingress_sflow_nop_1(); + _process_ingress_sflow_sflow_ing_session_enable_0(); + @defaultonly NoAction_69(); + } + key = { + meta._ingress_metadata_ifindex38 : ternary @name("ingress_metadata.ifindex"); + meta._ipv4_metadata_lkp_ipv4_sa56: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + hdr.sflow.isValid() : exact @name("sflow.$valid$"); + } + size = 512; + default_action = NoAction_69(); + } + @name(".process_storm_control.nop") action _process_storm_control_nop_0() { + } + @name(".process_storm_control.set_storm_control_meter") action _process_storm_control_set_storm_control_meter_0(@name("meter_idx") bit<16> meter_idx) { + storm_control_meter.execute_meter>((bit<10>)meter_idx, meta._meter_metadata_meter_color106); + meta._meter_metadata_meter_index107 = meter_idx; + } + @name(".storm_control") table _storm_control { + actions = { + _process_storm_control_nop_0(); + _process_storm_control_set_storm_control_meter_0(); + @defaultonly NoAction_70(); + } + key = { + standard_metadata.ingress_port : exact @name("standard_metadata.ingress_port"); + meta._l2_metadata_lkp_pkt_type67: ternary @name("l2_metadata.lkp_pkt_type"); + } + size = 512; + default_action = NoAction_70(); + } + @name(".process_validate_packet.nop") action _process_validate_packet_nop_0() { + } + @name(".process_validate_packet.set_unicast") action _process_validate_packet_set_unicast_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + } + @name(".process_validate_packet.set_unicast_and_ipv6_src_is_link_local") action _process_validate_packet_set_unicast_and_ipv6_src_is_link_local_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w1; + meta._ipv6_metadata_ipv6_src_is_link_local63 = 1w1; + } + @name(".process_validate_packet.set_multicast") action _process_validate_packet_set_multicast_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._l2_metadata_bd_stats_idx76 = meta._l2_metadata_bd_stats_idx76 + 16w1; + } + @name(".process_validate_packet.set_multicast_and_ipv6_src_is_link_local") action _process_validate_packet_set_multicast_and_ipv6_src_is_link_local_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w2; + meta._ipv6_metadata_ipv6_src_is_link_local63 = 1w1; + meta._l2_metadata_bd_stats_idx76 = meta._l2_metadata_bd_stats_idx76 + 16w1; + } + @name(".process_validate_packet.set_broadcast") action _process_validate_packet_set_broadcast_0() { + meta._l2_metadata_lkp_pkt_type67 = 3w4; + meta._l2_metadata_bd_stats_idx76 = meta._l2_metadata_bd_stats_idx76 + 16w2; + } + @name(".process_validate_packet.set_malformed_packet") action _process_validate_packet_set_malformed_packet_0(@name("drop_reason") bit<8> drop_reason_8) { + meta._ingress_metadata_drop_flag43 = 1w1; + meta._ingress_metadata_drop_reason44 = drop_reason_8; + } + @name(".validate_packet") table _validate_packet { + actions = { + _process_validate_packet_nop_0(); + _process_validate_packet_set_unicast_0(); + _process_validate_packet_set_unicast_and_ipv6_src_is_link_local_0(); + _process_validate_packet_set_multicast_0(); + _process_validate_packet_set_multicast_and_ipv6_src_is_link_local_0(); + _process_validate_packet_set_broadcast_0(); + _process_validate_packet_set_malformed_packet_0(); + @defaultonly NoAction_71(); + } + key = { + meta._l2_metadata_lkp_mac_sa65[40:40] : ternary @name("l2_metadata.lkp_mac_sa"); + meta._l2_metadata_lkp_mac_da66 : ternary @name("l2_metadata.lkp_mac_da"); + meta._l3_metadata_lkp_ip_type80 : ternary @name("l3_metadata.lkp_ip_type"); + meta._l3_metadata_lkp_ip_ttl84 : ternary @name("l3_metadata.lkp_ip_ttl"); + meta._l3_metadata_lkp_ip_version81 : ternary @name("l3_metadata.lkp_ip_version"); + meta._ipv4_metadata_lkp_ipv4_sa56[31:24] : ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv6_metadata_lkp_ipv6_sa60[127:112]: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction_71(); + } + @name(".process_mac.nop") action _process_mac_nop_0() { + } + @name(".process_mac.nop") action _process_mac_nop_1() { + } + @name(".process_mac.dmac_hit") action _process_mac_dmac_hit_0(@name("ifindex") bit<16> ifindex_18) { + meta._ingress_metadata_egress_ifindex39 = ifindex_18; + meta._l2_metadata_same_if_check79 = meta._l2_metadata_same_if_check79 ^ ifindex_18; + } + @name(".process_mac.dmac_multicast_hit") action _process_mac_dmac_multicast_hit_0(@name("mc_index") bit<16> mc_index_31) { + standard_metadata.mcast_grp = mc_index_31; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_mac.dmac_miss") action _process_mac_dmac_miss_0() { + meta._ingress_metadata_egress_ifindex39 = 16w65535; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_mac.dmac_redirect_nexthop") action _process_mac_dmac_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_9) { + meta._l2_metadata_l2_redirect71 = 1w1; + meta._l2_metadata_l2_nexthop69 = nexthop_index_9; + meta._l2_metadata_l2_nexthop_type70 = 1w0; + } + @name(".process_mac.dmac_redirect_ecmp") action _process_mac_dmac_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index) { + meta._l2_metadata_l2_redirect71 = 1w1; + meta._l2_metadata_l2_nexthop69 = ecmp_index; + meta._l2_metadata_l2_nexthop_type70 = 1w1; + } + @name(".process_mac.dmac_drop") action _process_mac_dmac_drop_0() { + mark_to_drop(standard_metadata); + } + @name(".process_mac.smac_miss") action _process_mac_smac_miss_0() { + meta._l2_metadata_l2_src_miss72 = 1w1; + } + @name(".process_mac.smac_hit") action _process_mac_smac_hit_0(@name("ifindex") bit<16> ifindex_19) { + meta._l2_metadata_l2_src_move73 = meta._ingress_metadata_ifindex38 ^ ifindex_19; + } + @name(".dmac") table _dmac { + support_timeout = true; + actions = { + _process_mac_nop_0(); + _process_mac_dmac_hit_0(); + _process_mac_dmac_multicast_hit_0(); + _process_mac_dmac_miss_0(); + _process_mac_dmac_redirect_nexthop_0(); + _process_mac_dmac_redirect_ecmp_0(); + _process_mac_dmac_drop_0(); + @defaultonly NoAction_72(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._l2_metadata_lkp_mac_da66: exact @name("l2_metadata.lkp_mac_da"); + } + size = 1024; + default_action = NoAction_72(); + } + @name(".smac") table _smac { + actions = { + _process_mac_nop_1(); + _process_mac_smac_miss_0(); + _process_mac_smac_hit_0(); + @defaultonly NoAction_73(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._l2_metadata_lkp_mac_sa65: exact @name("l2_metadata.lkp_mac_sa"); + } + size = 1024; + default_action = NoAction_73(); + } + @name(".process_mac_acl.nop") action _process_mac_acl_nop_0() { + } + @name(".process_mac_acl.acl_deny") action _process_mac_acl_acl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_18, @name("acl_meter_index") bit<16> acl_meter_index, @name("acl_copy") bit<1> acl_copy_16, @name("acl_copy_reason") bit<16> acl_copy_reason) { + meta._acl_metadata_acl_deny0 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_18; + meta._meter_metadata_meter_index107 = acl_meter_index; + meta._acl_metadata_acl_copy1 = acl_copy_16; + meta._fabric_metadata_reason_code28 = acl_copy_reason; + } + @name(".process_mac_acl.acl_permit") action _process_mac_acl_acl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_19, @name("acl_meter_index") bit<16> acl_meter_index_10, @name("acl_copy") bit<1> acl_copy_17, @name("acl_copy_reason") bit<16> acl_copy_reason_16) { + meta._acl_metadata_acl_stats_index11 = acl_stats_index_19; + meta._meter_metadata_meter_index107 = acl_meter_index_10; + meta._acl_metadata_acl_copy1 = acl_copy_17; + meta._fabric_metadata_reason_code28 = acl_copy_reason_16; + } + @name(".process_mac_acl.acl_mirror") action _process_mac_acl_acl_mirror_0(@name("session_id") bit<32> session_id_8, @name("acl_stats_index") bit<14> acl_stats_index_20, @name("acl_meter_index") bit<16> acl_meter_index_11) { + meta._i2e_metadata_mirror_session_id36 = (bit<16>)session_id_8; + meta._i2e_metadata_ingress_tstamp35 = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_8, 8w1); + meta._acl_metadata_acl_stats_index11 = acl_stats_index_20; + meta._meter_metadata_meter_index107 = acl_meter_index_11; + } + @name(".process_mac_acl.acl_redirect_nexthop") action _process_mac_acl_acl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_10, @name("acl_stats_index") bit<14> acl_stats_index_21, @name("acl_meter_index") bit<16> acl_meter_index_12, @name("acl_copy") bit<1> acl_copy_18, @name("acl_copy_reason") bit<16> acl_copy_reason_17) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = nexthop_index_10; + meta._acl_metadata_acl_nexthop_type5 = 1w0; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_21; + meta._meter_metadata_meter_index107 = acl_meter_index_12; + meta._acl_metadata_acl_copy1 = acl_copy_18; + meta._fabric_metadata_reason_code28 = acl_copy_reason_17; + } + @name(".process_mac_acl.acl_redirect_ecmp") action _process_mac_acl_acl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_7, @name("acl_stats_index") bit<14> acl_stats_index_22, @name("acl_meter_index") bit<16> acl_meter_index_13, @name("acl_copy") bit<1> acl_copy_19, @name("acl_copy_reason") bit<16> acl_copy_reason_18) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = ecmp_index_7; + meta._acl_metadata_acl_nexthop_type5 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_22; + meta._meter_metadata_meter_index107 = acl_meter_index_13; + meta._acl_metadata_acl_copy1 = acl_copy_19; + meta._fabric_metadata_reason_code28 = acl_copy_reason_18; + } + @name(".mac_acl") table _mac_acl { + actions = { + _process_mac_acl_nop_0(); + _process_mac_acl_acl_deny_0(); + _process_mac_acl_acl_permit_0(); + _process_mac_acl_acl_mirror_0(); + _process_mac_acl_acl_redirect_nexthop_0(); + _process_mac_acl_acl_redirect_ecmp_0(); + @defaultonly NoAction_74(); + } + key = { + meta._acl_metadata_if_label9 : ternary @name("acl_metadata.if_label"); + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._l2_metadata_lkp_mac_sa65 : ternary @name("l2_metadata.lkp_mac_sa"); + meta._l2_metadata_lkp_mac_da66 : ternary @name("l2_metadata.lkp_mac_da"); + meta._l2_metadata_lkp_mac_type68: ternary @name("l2_metadata.lkp_mac_type"); + } + size = 512; + default_action = NoAction_74(); + } + @name(".process_ip_acl.nop") action _process_ip_acl_nop_0() { + } + @name(".process_ip_acl.nop") action _process_ip_acl_nop_1() { + } + @name(".process_ip_acl.acl_deny") action _process_ip_acl_acl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_23, @name("acl_meter_index") bit<16> acl_meter_index_14, @name("acl_copy") bit<1> acl_copy_20, @name("acl_copy_reason") bit<16> acl_copy_reason_19) { + meta._acl_metadata_acl_deny0 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_23; + meta._meter_metadata_meter_index107 = acl_meter_index_14; + meta._acl_metadata_acl_copy1 = acl_copy_20; + meta._fabric_metadata_reason_code28 = acl_copy_reason_19; + } + @name(".process_ip_acl.acl_deny") action _process_ip_acl_acl_deny_1(@name("acl_stats_index") bit<14> acl_stats_index_24, @name("acl_meter_index") bit<16> acl_meter_index_15, @name("acl_copy") bit<1> acl_copy_21, @name("acl_copy_reason") bit<16> acl_copy_reason_20) { + meta._acl_metadata_acl_deny0 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_24; + meta._meter_metadata_meter_index107 = acl_meter_index_15; + meta._acl_metadata_acl_copy1 = acl_copy_21; + meta._fabric_metadata_reason_code28 = acl_copy_reason_20; + } + @name(".process_ip_acl.acl_permit") action _process_ip_acl_acl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_25, @name("acl_meter_index") bit<16> acl_meter_index_16, @name("acl_copy") bit<1> acl_copy_22, @name("acl_copy_reason") bit<16> acl_copy_reason_21) { + meta._acl_metadata_acl_stats_index11 = acl_stats_index_25; + meta._meter_metadata_meter_index107 = acl_meter_index_16; + meta._acl_metadata_acl_copy1 = acl_copy_22; + meta._fabric_metadata_reason_code28 = acl_copy_reason_21; + } + @name(".process_ip_acl.acl_permit") action _process_ip_acl_acl_permit_1(@name("acl_stats_index") bit<14> acl_stats_index_26, @name("acl_meter_index") bit<16> acl_meter_index_17, @name("acl_copy") bit<1> acl_copy_23, @name("acl_copy_reason") bit<16> acl_copy_reason_22) { + meta._acl_metadata_acl_stats_index11 = acl_stats_index_26; + meta._meter_metadata_meter_index107 = acl_meter_index_17; + meta._acl_metadata_acl_copy1 = acl_copy_23; + meta._fabric_metadata_reason_code28 = acl_copy_reason_22; + } + @name(".process_ip_acl.acl_mirror") action _process_ip_acl_acl_mirror_0(@name("session_id") bit<32> session_id_9, @name("acl_stats_index") bit<14> acl_stats_index_27, @name("acl_meter_index") bit<16> acl_meter_index_18) { + meta._i2e_metadata_mirror_session_id36 = (bit<16>)session_id_9; + meta._i2e_metadata_ingress_tstamp35 = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_9, 8w1); + meta._acl_metadata_acl_stats_index11 = acl_stats_index_27; + meta._meter_metadata_meter_index107 = acl_meter_index_18; + } + @name(".process_ip_acl.acl_mirror") action _process_ip_acl_acl_mirror_1(@name("session_id") bit<32> session_id_10, @name("acl_stats_index") bit<14> acl_stats_index_28, @name("acl_meter_index") bit<16> acl_meter_index_19) { + meta._i2e_metadata_mirror_session_id36 = (bit<16>)session_id_10; + meta._i2e_metadata_ingress_tstamp35 = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, session_id_10, 8w1); + meta._acl_metadata_acl_stats_index11 = acl_stats_index_28; + meta._meter_metadata_meter_index107 = acl_meter_index_19; + } + @name(".process_ip_acl.acl_redirect_nexthop") action _process_ip_acl_acl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_11, @name("acl_stats_index") bit<14> acl_stats_index_29, @name("acl_meter_index") bit<16> acl_meter_index_20, @name("acl_copy") bit<1> acl_copy_24, @name("acl_copy_reason") bit<16> acl_copy_reason_23) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = nexthop_index_11; + meta._acl_metadata_acl_nexthop_type5 = 1w0; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_29; + meta._meter_metadata_meter_index107 = acl_meter_index_20; + meta._acl_metadata_acl_copy1 = acl_copy_24; + meta._fabric_metadata_reason_code28 = acl_copy_reason_23; + } + @name(".process_ip_acl.acl_redirect_nexthop") action _process_ip_acl_acl_redirect_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_12, @name("acl_stats_index") bit<14> acl_stats_index_30, @name("acl_meter_index") bit<16> acl_meter_index_21, @name("acl_copy") bit<1> acl_copy_25, @name("acl_copy_reason") bit<16> acl_copy_reason_24) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = nexthop_index_12; + meta._acl_metadata_acl_nexthop_type5 = 1w0; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_30; + meta._meter_metadata_meter_index107 = acl_meter_index_21; + meta._acl_metadata_acl_copy1 = acl_copy_25; + meta._fabric_metadata_reason_code28 = acl_copy_reason_24; + } + @name(".process_ip_acl.acl_redirect_ecmp") action _process_ip_acl_acl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_8, @name("acl_stats_index") bit<14> acl_stats_index_31, @name("acl_meter_index") bit<16> acl_meter_index_22, @name("acl_copy") bit<1> acl_copy_26, @name("acl_copy_reason") bit<16> acl_copy_reason_25) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = ecmp_index_8; + meta._acl_metadata_acl_nexthop_type5 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_31; + meta._meter_metadata_meter_index107 = acl_meter_index_22; + meta._acl_metadata_acl_copy1 = acl_copy_26; + meta._fabric_metadata_reason_code28 = acl_copy_reason_25; + } + @name(".process_ip_acl.acl_redirect_ecmp") action _process_ip_acl_acl_redirect_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_9, @name("acl_stats_index") bit<14> acl_stats_index_32, @name("acl_meter_index") bit<16> acl_meter_index_23, @name("acl_copy") bit<1> acl_copy_27, @name("acl_copy_reason") bit<16> acl_copy_reason_26) { + meta._acl_metadata_acl_redirect7 = 1w1; + meta._acl_metadata_acl_nexthop3 = ecmp_index_9; + meta._acl_metadata_acl_nexthop_type5 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_32; + meta._meter_metadata_meter_index107 = acl_meter_index_23; + meta._acl_metadata_acl_copy1 = acl_copy_27; + meta._fabric_metadata_reason_code28 = acl_copy_reason_26; + } + @name(".ip_acl") table _ip_acl { + actions = { + _process_ip_acl_nop_0(); + _process_ip_acl_acl_deny_0(); + _process_ip_acl_acl_permit_0(); + _process_ip_acl_acl_mirror_0(); + _process_ip_acl_acl_redirect_nexthop_0(); + _process_ip_acl_acl_redirect_ecmp_0(); + @defaultonly NoAction_75(); + } + key = { + meta._acl_metadata_if_label9 : ternary @name("acl_metadata.if_label"); + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._ipv4_metadata_lkp_ipv4_sa56: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_l4_sport85 : ternary @name("l3_metadata.lkp_l4_sport"); + meta._l3_metadata_lkp_l4_dport86 : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta._l3_metadata_lkp_ip_ttl84 : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction_75(); + } + @name(".ipv6_acl") table _ipv6_acl { + actions = { + _process_ip_acl_nop_1(); + _process_ip_acl_acl_deny_1(); + _process_ip_acl_acl_permit_1(); + _process_ip_acl_acl_mirror_1(); + _process_ip_acl_acl_redirect_nexthop_1(); + _process_ip_acl_acl_redirect_ecmp_1(); + @defaultonly NoAction_76(); + } + key = { + meta._acl_metadata_if_label9 : ternary @name("acl_metadata.if_label"); + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._ipv6_metadata_lkp_ipv6_sa60: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta._ipv6_metadata_lkp_ipv6_da61: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_l4_sport85 : ternary @name("l3_metadata.lkp_l4_sport"); + meta._l3_metadata_lkp_l4_dport86 : ternary @name("l3_metadata.lkp_l4_dport"); + hdr.tcp.flags : ternary @name("tcp.flags"); + meta._l3_metadata_lkp_ip_ttl84 : ternary @name("l3_metadata.lkp_ip_ttl"); + } + size = 512; + default_action = NoAction_76(); + } + @name(".process_qos.nop") action _process_qos_nop_0() { + } + @name(".process_qos.apply_cos_marking") action _process_qos_apply_cos_marking_0(@name("cos") bit<3> cos) { + meta._qos_metadata_marked_cos130 = cos; + } + @name(".process_qos.apply_dscp_marking") action _process_qos_apply_dscp_marking_0(@name("dscp") bit<8> dscp) { + meta._qos_metadata_marked_dscp131 = dscp; + } + @name(".process_qos.apply_tc_marking") action _process_qos_apply_tc_marking_0(@name("tc") bit<3> tc) { + meta._qos_metadata_marked_exp132 = tc; + } + @name(".qos") table _qos { + actions = { + _process_qos_nop_0(); + _process_qos_apply_cos_marking_0(); + _process_qos_apply_dscp_marking_0(); + _process_qos_apply_tc_marking_0(); + @defaultonly NoAction_77(); + } + key = { + meta._acl_metadata_if_label9 : ternary @name("acl_metadata.if_label"); + meta._ipv4_metadata_lkp_ipv4_sa56: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_ip_tc83 : ternary @name("l3_metadata.lkp_ip_tc"); + meta._tunnel_metadata_mpls_exp141: ternary @name("tunnel_metadata.mpls_exp"); + meta._qos_metadata_outer_dscp129 : ternary @name("qos_metadata.outer_dscp"); + } + size = 512; + default_action = NoAction_77(); + } + @name(".ipv4_multicast_route_s_g_stats") direct_counter(CounterType.packets) _ipv4_multicast_route_s_g_stats_0; + @name(".ipv4_multicast_route_star_g_stats") direct_counter(CounterType.packets) _ipv4_multicast_route_star_g_stats_0; + @name(".process_ipv4_multicast.on_miss") action _process_ipv4_multicast_on_miss() { + } + @name(".process_ipv4_multicast.multicast_bridge_s_g_hit") action _process_ipv4_multicast_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_32) { + meta._multicast_metadata_multicast_bridge_mc_index124 = mc_index_32; + meta._multicast_metadata_mcast_bridge_hit115 = 1w1; + } + @name(".process_ipv4_multicast.nop") action _process_ipv4_multicast_nop() { + } + @name(".process_ipv4_multicast.multicast_bridge_star_g_hit") action _process_ipv4_multicast_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_33) { + meta._multicast_metadata_multicast_bridge_mc_index124 = mc_index_33; + meta._multicast_metadata_mcast_bridge_hit115 = 1w1; + } + @name(".ipv4_multicast_bridge") table _ipv4_multicast_bridge_0 { + actions = { + _process_ipv4_multicast_on_miss(); + _process_ipv4_multicast_multicast_bridge_s_g_hit(); + @defaultonly NoAction_78(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._ipv4_metadata_lkp_ipv4_sa56: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_78(); + } + @name(".ipv4_multicast_bridge_star_g") table _ipv4_multicast_bridge_star_g_0 { + actions = { + _process_ipv4_multicast_nop(); + _process_ipv4_multicast_multicast_bridge_star_g_hit(); + @defaultonly NoAction_79(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._ipv4_metadata_lkp_ipv4_da57: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_79(); + } + @name(".process_ipv4_multicast.on_miss_0") action _process_ipv4_multicast_on_miss_0() { + _ipv4_multicast_route_s_g_stats_0.count(); + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit_0") action _process_ipv4_multicast_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_34, @name("mcast_rpf_group") bit<16> mcast_rpf_group_18) { + _ipv4_multicast_route_s_g_stats_0.count(); + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_34; + meta._multicast_metadata_mcast_mode122 = 2w1; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_18 ^ meta._multicast_metadata_bd_mrpf_group120; + } + @name(".ipv4_multicast_route") table _ipv4_multicast_route_0 { + actions = { + _process_ipv4_multicast_on_miss_0(); + _process_ipv4_multicast_multicast_route_s_g_hit(); + @defaultonly NoAction_80(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_sa56: exact @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = _ipv4_multicast_route_s_g_stats_0; + default_action = NoAction_80(); + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss_0") action _process_ipv4_multicast_multicast_route_star_g_miss() { + _ipv4_multicast_route_star_g_stats_0.count(); + meta._l3_metadata_l3_copy104 = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit_0") action _process_ipv4_multicast_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_35, @name("mcast_rpf_group") bit<16> mcast_rpf_group_19) { + _ipv4_multicast_route_star_g_stats_0.count(); + meta._multicast_metadata_mcast_mode122 = 2w1; + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_35; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_19 ^ meta._multicast_metadata_bd_mrpf_group120; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit_0") action _process_ipv4_multicast_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_36, @name("mcast_rpf_group") bit<16> mcast_rpf_group_20) { + _ipv4_multicast_route_star_g_stats_0.count(); + meta._multicast_metadata_mcast_mode122 = 2w2; + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_36; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_20 | meta._multicast_metadata_bd_mrpf_group120; + } + @name(".ipv4_multicast_route_star_g") table _ipv4_multicast_route_star_g_0 { + actions = { + _process_ipv4_multicast_multicast_route_star_g_miss(); + _process_ipv4_multicast_multicast_route_sm_star_g_hit(); + _process_ipv4_multicast_multicast_route_bidir_star_g_hit(); + @defaultonly NoAction_81(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_da57: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + counters = _ipv4_multicast_route_star_g_stats_0; + default_action = NoAction_81(); + } + @name(".ipv6_multicast_route_s_g_stats") direct_counter(CounterType.packets) _ipv6_multicast_route_s_g_stats_0; + @name(".ipv6_multicast_route_star_g_stats") direct_counter(CounterType.packets) _ipv6_multicast_route_star_g_stats_0; + @name(".process_ipv6_multicast.on_miss") action _process_ipv6_multicast_on_miss() { + } + @name(".process_ipv6_multicast.multicast_bridge_s_g_hit") action _process_ipv6_multicast_multicast_bridge_s_g_hit(@name("mc_index") bit<16> mc_index_37) { + meta._multicast_metadata_multicast_bridge_mc_index124 = mc_index_37; + meta._multicast_metadata_mcast_bridge_hit115 = 1w1; + } + @name(".process_ipv6_multicast.nop") action _process_ipv6_multicast_nop() { + } + @name(".process_ipv6_multicast.multicast_bridge_star_g_hit") action _process_ipv6_multicast_multicast_bridge_star_g_hit(@name("mc_index") bit<16> mc_index_38) { + meta._multicast_metadata_multicast_bridge_mc_index124 = mc_index_38; + meta._multicast_metadata_mcast_bridge_hit115 = 1w1; + } + @name(".ipv6_multicast_bridge") table _ipv6_multicast_bridge_0 { + actions = { + _process_ipv6_multicast_on_miss(); + _process_ipv6_multicast_multicast_bridge_s_g_hit(); + @defaultonly NoAction_82(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._ipv6_metadata_lkp_ipv6_sa60: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta._ipv6_metadata_lkp_ipv6_da61: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_82(); + } + @name(".ipv6_multicast_bridge_star_g") table _ipv6_multicast_bridge_star_g_0 { + actions = { + _process_ipv6_multicast_nop(); + _process_ipv6_multicast_multicast_bridge_star_g_hit(); + @defaultonly NoAction_83(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._ipv6_metadata_lkp_ipv6_da61: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_83(); + } + @name(".process_ipv6_multicast.on_miss_1") action _process_ipv6_multicast_on_miss_0() { + _ipv6_multicast_route_s_g_stats_0.count(); + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit_1") action _process_ipv6_multicast_multicast_route_s_g_hit(@name("mc_index") bit<16> mc_index_39, @name("mcast_rpf_group") bit<16> mcast_rpf_group_21) { + _ipv6_multicast_route_s_g_stats_0.count(); + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_39; + meta._multicast_metadata_mcast_mode122 = 2w1; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_21 ^ meta._multicast_metadata_bd_mrpf_group120; + } + @name(".ipv6_multicast_route") table _ipv6_multicast_route_0 { + actions = { + _process_ipv6_multicast_on_miss_0(); + _process_ipv6_multicast_multicast_route_s_g_hit(); + @defaultonly NoAction_84(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_sa60: exact @name("ipv6_metadata.lkp_ipv6_sa"); + meta._ipv6_metadata_lkp_ipv6_da61: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = _ipv6_multicast_route_s_g_stats_0; + default_action = NoAction_84(); + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss_1") action _process_ipv6_multicast_multicast_route_star_g_miss() { + _ipv6_multicast_route_star_g_stats_0.count(); + meta._l3_metadata_l3_copy104 = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit_1") action _process_ipv6_multicast_multicast_route_sm_star_g_hit(@name("mc_index") bit<16> mc_index_40, @name("mcast_rpf_group") bit<16> mcast_rpf_group_22) { + _ipv6_multicast_route_star_g_stats_0.count(); + meta._multicast_metadata_mcast_mode122 = 2w1; + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_40; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_22 ^ meta._multicast_metadata_bd_mrpf_group120; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit_1") action _process_ipv6_multicast_multicast_route_bidir_star_g_hit(@name("mc_index") bit<16> mc_index_41, @name("mcast_rpf_group") bit<16> mcast_rpf_group_23) { + _ipv6_multicast_route_star_g_stats_0.count(); + meta._multicast_metadata_mcast_mode122 = 2w2; + meta._multicast_metadata_multicast_route_mc_index123 = mc_index_41; + meta._multicast_metadata_mcast_route_hit114 = 1w1; + meta._multicast_metadata_mcast_rpf_group121 = mcast_rpf_group_23 | meta._multicast_metadata_bd_mrpf_group120; + } + @name(".ipv6_multicast_route_star_g") table _ipv6_multicast_route_star_g_0 { + actions = { + _process_ipv6_multicast_multicast_route_star_g_miss(); + _process_ipv6_multicast_multicast_route_sm_star_g_hit(); + _process_ipv6_multicast_multicast_route_bidir_star_g_hit(); + @defaultonly NoAction_85(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_da61: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + counters = _ipv6_multicast_route_star_g_stats_0; + default_action = NoAction_85(); + } + @name(".process_ipv4_racl.nop") action _process_ipv4_racl_nop_0() { + } + @name(".process_ipv4_racl.racl_deny") action _process_ipv4_racl_racl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_33, @name("acl_copy") bit<1> acl_copy_28, @name("acl_copy_reason") bit<16> acl_copy_reason_27) { + meta._acl_metadata_racl_deny2 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_33; + meta._acl_metadata_acl_copy1 = acl_copy_28; + meta._fabric_metadata_reason_code28 = acl_copy_reason_27; + } + @name(".process_ipv4_racl.racl_permit") action _process_ipv4_racl_racl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_34, @name("acl_copy") bit<1> acl_copy_29, @name("acl_copy_reason") bit<16> acl_copy_reason_28) { + meta._acl_metadata_acl_stats_index11 = acl_stats_index_34; + meta._acl_metadata_acl_copy1 = acl_copy_29; + meta._fabric_metadata_reason_code28 = acl_copy_reason_28; + } + @name(".process_ipv4_racl.racl_redirect_nexthop") action _process_ipv4_racl_racl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_13, @name("acl_stats_index") bit<14> acl_stats_index_35, @name("acl_copy") bit<1> acl_copy_30, @name("acl_copy_reason") bit<16> acl_copy_reason_29) { + meta._acl_metadata_racl_redirect8 = 1w1; + meta._acl_metadata_racl_nexthop4 = nexthop_index_13; + meta._acl_metadata_racl_nexthop_type6 = 1w0; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_35; + meta._acl_metadata_acl_copy1 = acl_copy_30; + meta._fabric_metadata_reason_code28 = acl_copy_reason_29; + } + @name(".process_ipv4_racl.racl_redirect_ecmp") action _process_ipv4_racl_racl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_10, @name("acl_stats_index") bit<14> acl_stats_index_36, @name("acl_copy") bit<1> acl_copy_31, @name("acl_copy_reason") bit<16> acl_copy_reason_30) { + meta._acl_metadata_racl_redirect8 = 1w1; + meta._acl_metadata_racl_nexthop4 = ecmp_index_10; + meta._acl_metadata_racl_nexthop_type6 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_36; + meta._acl_metadata_acl_copy1 = acl_copy_31; + meta._fabric_metadata_reason_code28 = acl_copy_reason_30; + } + @name(".ipv4_racl") table _ipv4_racl { + actions = { + _process_ipv4_racl_nop_0(); + _process_ipv4_racl_racl_deny_0(); + _process_ipv4_racl_racl_permit_0(); + _process_ipv4_racl_racl_redirect_nexthop_0(); + _process_ipv4_racl_racl_redirect_ecmp_0(); + @defaultonly NoAction_86(); + } + key = { + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._ipv4_metadata_lkp_ipv4_sa56: ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta._ipv4_metadata_lkp_ipv4_da57: ternary @name("ipv4_metadata.lkp_ipv4_da"); + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_l4_sport85 : ternary @name("l3_metadata.lkp_l4_sport"); + meta._l3_metadata_lkp_l4_dport86 : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction_86(); + } + @name(".process_ipv4_urpf.on_miss") action _process_ipv4_urpf_on_miss_0() { + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action _process_ipv4_urpf_ipv4_urpf_hit_0(@name("urpf_bd_group") bit<16> urpf_bd_group_2) { + meta._l3_metadata_urpf_hit93 = 1w1; + meta._l3_metadata_urpf_bd_group95 = urpf_bd_group_2; + meta._l3_metadata_urpf_mode92 = meta._ipv4_metadata_ipv4_urpf_mode59; + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action _process_ipv4_urpf_ipv4_urpf_hit_1(@name("urpf_bd_group") bit<16> urpf_bd_group_3) { + meta._l3_metadata_urpf_hit93 = 1w1; + meta._l3_metadata_urpf_bd_group95 = urpf_bd_group_3; + meta._l3_metadata_urpf_mode92 = meta._ipv4_metadata_ipv4_urpf_mode59; + } + @name(".process_ipv4_urpf.urpf_miss") action _process_ipv4_urpf_urpf_miss_0() { + meta._l3_metadata_urpf_check_fail94 = 1w1; + } + @name(".ipv4_urpf") table _ipv4_urpf { + actions = { + _process_ipv4_urpf_on_miss_0(); + _process_ipv4_urpf_ipv4_urpf_hit_0(); + @defaultonly NoAction_87(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_sa56: exact @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 1024; + default_action = NoAction_87(); + } + @name(".ipv4_urpf_lpm") table _ipv4_urpf_lpm { + actions = { + _process_ipv4_urpf_ipv4_urpf_hit_1(); + _process_ipv4_urpf_urpf_miss_0(); + @defaultonly NoAction_88(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_sa56: lpm @name("ipv4_metadata.lkp_ipv4_sa"); + } + size = 512; + default_action = NoAction_88(); + } + @name(".process_ipv4_fib.on_miss") action _process_ipv4_fib_on_miss_0() { + } + @name(".process_ipv4_fib.on_miss") action _process_ipv4_fib_on_miss_1() { + } + @name(".process_ipv4_fib.fib_hit_nexthop") action _process_ipv4_fib_fib_hit_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_14) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = nexthop_index_14; + meta._l3_metadata_fib_nexthop_type98 = 1w0; + } + @name(".process_ipv4_fib.fib_hit_nexthop") action _process_ipv4_fib_fib_hit_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_15) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = nexthop_index_15; + meta._l3_metadata_fib_nexthop_type98 = 1w0; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action _process_ipv4_fib_fib_hit_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_11) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = ecmp_index_11; + meta._l3_metadata_fib_nexthop_type98 = 1w1; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action _process_ipv4_fib_fib_hit_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_12) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = ecmp_index_12; + meta._l3_metadata_fib_nexthop_type98 = 1w1; + } + @name(".ipv4_fib") table _ipv4_fib { + actions = { + _process_ipv4_fib_on_miss_0(); + _process_ipv4_fib_fib_hit_nexthop_0(); + _process_ipv4_fib_fib_hit_ecmp_0(); + @defaultonly NoAction_89(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_da57: exact @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 1024; + default_action = NoAction_89(); + } + @name(".ipv4_fib_lpm") table _ipv4_fib_lpm { + actions = { + _process_ipv4_fib_on_miss_1(); + _process_ipv4_fib_fib_hit_nexthop_1(); + _process_ipv4_fib_fib_hit_ecmp_1(); + @defaultonly NoAction_90(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv4_metadata_lkp_ipv4_da57: lpm @name("ipv4_metadata.lkp_ipv4_da"); + } + size = 512; + default_action = NoAction_90(); + } + @name(".process_ipv6_racl.nop") action _process_ipv6_racl_nop_0() { + } + @name(".process_ipv6_racl.racl_deny") action _process_ipv6_racl_racl_deny_0(@name("acl_stats_index") bit<14> acl_stats_index_37, @name("acl_copy") bit<1> acl_copy_32, @name("acl_copy_reason") bit<16> acl_copy_reason_31) { + meta._acl_metadata_racl_deny2 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_37; + meta._acl_metadata_acl_copy1 = acl_copy_32; + meta._fabric_metadata_reason_code28 = acl_copy_reason_31; + } + @name(".process_ipv6_racl.racl_permit") action _process_ipv6_racl_racl_permit_0(@name("acl_stats_index") bit<14> acl_stats_index_38, @name("acl_copy") bit<1> acl_copy_33, @name("acl_copy_reason") bit<16> acl_copy_reason_32) { + meta._acl_metadata_acl_stats_index11 = acl_stats_index_38; + meta._acl_metadata_acl_copy1 = acl_copy_33; + meta._fabric_metadata_reason_code28 = acl_copy_reason_32; + } + @name(".process_ipv6_racl.racl_redirect_nexthop") action _process_ipv6_racl_racl_redirect_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_16, @name("acl_stats_index") bit<14> acl_stats_index_39, @name("acl_copy") bit<1> acl_copy_34, @name("acl_copy_reason") bit<16> acl_copy_reason_33) { + meta._acl_metadata_racl_redirect8 = 1w1; + meta._acl_metadata_racl_nexthop4 = nexthop_index_16; + meta._acl_metadata_racl_nexthop_type6 = 1w0; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_39; + meta._acl_metadata_acl_copy1 = acl_copy_34; + meta._fabric_metadata_reason_code28 = acl_copy_reason_33; + } + @name(".process_ipv6_racl.racl_redirect_ecmp") action _process_ipv6_racl_racl_redirect_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_13, @name("acl_stats_index") bit<14> acl_stats_index_40, @name("acl_copy") bit<1> acl_copy_35, @name("acl_copy_reason") bit<16> acl_copy_reason_34) { + meta._acl_metadata_racl_redirect8 = 1w1; + meta._acl_metadata_racl_nexthop4 = ecmp_index_13; + meta._acl_metadata_racl_nexthop_type6 = 1w1; + meta._acl_metadata_acl_stats_index11 = acl_stats_index_40; + meta._acl_metadata_acl_copy1 = acl_copy_35; + meta._fabric_metadata_reason_code28 = acl_copy_reason_34; + } + @name(".ipv6_racl") table _ipv6_racl { + actions = { + _process_ipv6_racl_nop_0(); + _process_ipv6_racl_racl_deny_0(); + _process_ipv6_racl_racl_permit_0(); + _process_ipv6_racl_racl_redirect_nexthop_0(); + _process_ipv6_racl_racl_redirect_ecmp_0(); + @defaultonly NoAction_91(); + } + key = { + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._ipv6_metadata_lkp_ipv6_sa60: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + meta._ipv6_metadata_lkp_ipv6_da61: ternary @name("ipv6_metadata.lkp_ipv6_da"); + meta._l3_metadata_lkp_ip_proto82 : ternary @name("l3_metadata.lkp_ip_proto"); + meta._l3_metadata_lkp_l4_sport85 : ternary @name("l3_metadata.lkp_l4_sport"); + meta._l3_metadata_lkp_l4_dport86 : ternary @name("l3_metadata.lkp_l4_dport"); + } + size = 512; + default_action = NoAction_91(); + } + @name(".process_ipv6_urpf.on_miss") action _process_ipv6_urpf_on_miss_0() { + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action _process_ipv6_urpf_ipv6_urpf_hit_0(@name("urpf_bd_group") bit<16> urpf_bd_group_4) { + meta._l3_metadata_urpf_hit93 = 1w1; + meta._l3_metadata_urpf_bd_group95 = urpf_bd_group_4; + meta._l3_metadata_urpf_mode92 = meta._ipv6_metadata_ipv6_urpf_mode64; + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action _process_ipv6_urpf_ipv6_urpf_hit_1(@name("urpf_bd_group") bit<16> urpf_bd_group_5) { + meta._l3_metadata_urpf_hit93 = 1w1; + meta._l3_metadata_urpf_bd_group95 = urpf_bd_group_5; + meta._l3_metadata_urpf_mode92 = meta._ipv6_metadata_ipv6_urpf_mode64; + } + @name(".process_ipv6_urpf.urpf_miss") action _process_ipv6_urpf_urpf_miss_0() { + meta._l3_metadata_urpf_check_fail94 = 1w1; + } + @name(".ipv6_urpf") table _ipv6_urpf { + actions = { + _process_ipv6_urpf_on_miss_0(); + _process_ipv6_urpf_ipv6_urpf_hit_0(); + @defaultonly NoAction_92(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_sa60: exact @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 1024; + default_action = NoAction_92(); + } + @name(".ipv6_urpf_lpm") table _ipv6_urpf_lpm { + actions = { + _process_ipv6_urpf_ipv6_urpf_hit_1(); + _process_ipv6_urpf_urpf_miss_0(); + @defaultonly NoAction_93(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_sa60: lpm @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + default_action = NoAction_93(); + } + @name(".process_ipv6_fib.on_miss") action _process_ipv6_fib_on_miss_0() { + } + @name(".process_ipv6_fib.on_miss") action _process_ipv6_fib_on_miss_1() { + } + @name(".process_ipv6_fib.fib_hit_nexthop") action _process_ipv6_fib_fib_hit_nexthop_0(@name("nexthop_index") bit<16> nexthop_index_17) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = nexthop_index_17; + meta._l3_metadata_fib_nexthop_type98 = 1w0; + } + @name(".process_ipv6_fib.fib_hit_nexthop") action _process_ipv6_fib_fib_hit_nexthop_1(@name("nexthop_index") bit<16> nexthop_index_18) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = nexthop_index_18; + meta._l3_metadata_fib_nexthop_type98 = 1w0; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action _process_ipv6_fib_fib_hit_ecmp_0(@name("ecmp_index") bit<16> ecmp_index_14) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = ecmp_index_14; + meta._l3_metadata_fib_nexthop_type98 = 1w1; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action _process_ipv6_fib_fib_hit_ecmp_1(@name("ecmp_index") bit<16> ecmp_index_15) { + meta._l3_metadata_fib_hit96 = 1w1; + meta._l3_metadata_fib_nexthop97 = ecmp_index_15; + meta._l3_metadata_fib_nexthop_type98 = 1w1; + } + @name(".ipv6_fib") table _ipv6_fib { + actions = { + _process_ipv6_fib_on_miss_0(); + _process_ipv6_fib_fib_hit_nexthop_0(); + _process_ipv6_fib_fib_hit_ecmp_0(); + @defaultonly NoAction_94(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_da61: exact @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 1024; + default_action = NoAction_94(); + } + @name(".ipv6_fib_lpm") table _ipv6_fib_lpm { + actions = { + _process_ipv6_fib_on_miss_1(); + _process_ipv6_fib_fib_hit_nexthop_1(); + _process_ipv6_fib_fib_hit_ecmp_1(); + @defaultonly NoAction_95(); + } + key = { + meta._l3_metadata_vrf89 : exact @name("l3_metadata.vrf"); + meta._ipv6_metadata_lkp_ipv6_da61: lpm @name("ipv6_metadata.lkp_ipv6_da"); + } + size = 512; + default_action = NoAction_95(); + } + @name(".process_urpf_bd.nop") action _process_urpf_bd_nop_0() { + } + @name(".process_urpf_bd.urpf_bd_miss") action _process_urpf_bd_urpf_bd_miss_0() { + meta._l3_metadata_urpf_check_fail94 = 1w1; + } + @name(".urpf_bd") table _urpf_bd { + actions = { + _process_urpf_bd_nop_0(); + _process_urpf_bd_urpf_bd_miss_0(); + @defaultonly NoAction_96(); + } + key = { + meta._l3_metadata_urpf_bd_group95: exact @name("l3_metadata.urpf_bd_group"); + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + } + size = 1024; + default_action = NoAction_96(); + } + @name(".meter_index") direct_meter>(MeterType.bytes) _meter_index; + @name(".process_meter_index.nop_2") action _process_meter_index_nop_0() { + _meter_index.read(meta._meter_metadata_meter_color106); + } + @name(".meter_index") table _meter_index_0 { + actions = { + _process_meter_index_nop_0(); + @defaultonly NoAction_97(); + } + key = { + meta._meter_metadata_meter_index107: exact @name("meter_metadata.meter_index"); + } + size = 1024; + meters = _meter_index; + default_action = NoAction_97(); + } + @name(".process_hashes.compute_lkp_ipv4_hash") action _process_hashes_compute_lkp_ipv4_hash_0() { + hash, bit<16>, tuple_0, bit<32>>(meta._hash_metadata_hash132, HashAlgorithm.crc16, 16w0, (tuple_0){f0 = meta._ipv4_metadata_lkp_ipv4_sa56,f1 = meta._ipv4_metadata_lkp_ipv4_da57,f2 = meta._l3_metadata_lkp_ip_proto82,f3 = meta._l3_metadata_lkp_l4_sport85,f4 = meta._l3_metadata_lkp_l4_dport86}, 32w65536); + hash, bit<16>, tuple_1, bit<32>>(meta._hash_metadata_hash233, HashAlgorithm.crc16, 16w0, (tuple_1){f0 = meta._l2_metadata_lkp_mac_sa65,f1 = meta._l2_metadata_lkp_mac_da66,f2 = meta._ipv4_metadata_lkp_ipv4_sa56,f3 = meta._ipv4_metadata_lkp_ipv4_da57,f4 = meta._l3_metadata_lkp_ip_proto82,f5 = meta._l3_metadata_lkp_l4_sport85,f6 = meta._l3_metadata_lkp_l4_dport86}, 32w65536); + } + @name(".process_hashes.compute_lkp_ipv6_hash") action _process_hashes_compute_lkp_ipv6_hash_0() { + hash, bit<16>, tuple_2, bit<32>>(meta._hash_metadata_hash132, HashAlgorithm.crc16, 16w0, (tuple_2){f0 = meta._ipv6_metadata_lkp_ipv6_sa60,f1 = meta._ipv6_metadata_lkp_ipv6_da61,f2 = meta._l3_metadata_lkp_ip_proto82,f3 = meta._l3_metadata_lkp_l4_sport85,f4 = meta._l3_metadata_lkp_l4_dport86}, 32w65536); + hash, bit<16>, tuple_3, bit<32>>(meta._hash_metadata_hash233, HashAlgorithm.crc16, 16w0, (tuple_3){f0 = meta._l2_metadata_lkp_mac_sa65,f1 = meta._l2_metadata_lkp_mac_da66,f2 = meta._ipv6_metadata_lkp_ipv6_sa60,f3 = meta._ipv6_metadata_lkp_ipv6_da61,f4 = meta._l3_metadata_lkp_ip_proto82,f5 = meta._l3_metadata_lkp_l4_sport85,f6 = meta._l3_metadata_lkp_l4_dport86}, 32w65536); + } + @name(".process_hashes.compute_lkp_non_ip_hash") action _process_hashes_compute_lkp_non_ip_hash_0() { + hash, bit<16>, tuple_4, bit<32>>(meta._hash_metadata_hash233, HashAlgorithm.crc16, 16w0, (tuple_4){f0 = meta._ingress_metadata_ifindex38,f1 = meta._l2_metadata_lkp_mac_sa65,f2 = meta._l2_metadata_lkp_mac_da66,f3 = meta._l2_metadata_lkp_mac_type68}, 32w65536); + } + @name(".process_hashes.computed_two_hashes") action _process_hashes_computed_two_hashes_0() { + meta._hash_metadata_entropy_hash34 = meta._hash_metadata_hash233; + } + @name(".process_hashes.computed_one_hash") action _process_hashes_computed_one_hash_0() { + meta._hash_metadata_hash132 = meta._hash_metadata_hash233; + meta._hash_metadata_entropy_hash34 = meta._hash_metadata_hash233; + } + @name(".compute_ipv4_hashes") table _compute_ipv4_hashes { + actions = { + _process_hashes_compute_lkp_ipv4_hash_0(); + @defaultonly NoAction_98(); + } + key = { + meta._ingress_metadata_drop_flag43: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_98(); + } + @name(".compute_ipv6_hashes") table _compute_ipv6_hashes { + actions = { + _process_hashes_compute_lkp_ipv6_hash_0(); + @defaultonly NoAction_99(); + } + key = { + meta._ingress_metadata_drop_flag43: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_99(); + } + @name(".compute_non_ip_hashes") table _compute_non_ip_hashes { + actions = { + _process_hashes_compute_lkp_non_ip_hash_0(); + @defaultonly NoAction_100(); + } + key = { + meta._ingress_metadata_drop_flag43: exact @name("ingress_metadata.drop_flag"); + } + default_action = NoAction_100(); + } + @name(".compute_other_hashes") table _compute_other_hashes { + actions = { + _process_hashes_computed_two_hashes_0(); + _process_hashes_computed_one_hash_0(); + @defaultonly NoAction_101(); + } + key = { + meta._hash_metadata_hash132: exact @name("hash_metadata.hash1"); + } + default_action = NoAction_101(); + } + @name(".meter_stats") direct_counter(CounterType.packets) _meter_stats; + @name(".process_meter_action.meter_permit_0") action _process_meter_action_meter_permit_0() { + _meter_stats.count(); + } + @name(".process_meter_action.meter_deny_0") action _process_meter_action_meter_deny_0() { + _meter_stats.count(); + mark_to_drop(standard_metadata); + } + @name(".meter_action") table _meter_action { + actions = { + _process_meter_action_meter_permit_0(); + _process_meter_action_meter_deny_0(); + @defaultonly NoAction_102(); + } + key = { + meta._meter_metadata_meter_color106: exact @name("meter_metadata.meter_color"); + meta._meter_metadata_meter_index107: exact @name("meter_metadata.meter_index"); + } + size = 1024; + counters = _meter_stats; + default_action = NoAction_102(); + } + @name(".process_ingress_bd_stats.update_ingress_bd_stats") action _process_ingress_bd_stats_update_ingress_bd_stats_0() { + ingress_bd_stats_count.count((bit<10>)meta._l2_metadata_bd_stats_idx76); + } + @name(".ingress_bd_stats") table _ingress_bd_stats { + actions = { + _process_ingress_bd_stats_update_ingress_bd_stats_0(); + @defaultonly NoAction_103(); + } + size = 1024; + default_action = NoAction_103(); + } + @name(".process_ingress_acl_stats.acl_stats_update") action _process_ingress_acl_stats_acl_stats_update_0() { + acl_stats_count.count((bit<10>)meta._acl_metadata_acl_stats_index11); + } + @name(".acl_stats") table _acl_stats { + actions = { + _process_ingress_acl_stats_acl_stats_update_0(); + @defaultonly NoAction_104(); + } + size = 1024; + default_action = NoAction_104(); + } + @name(".storm_control_stats") direct_counter(CounterType.packets) _storm_control_stats; + @name(".process_storm_control_stats.nop_3") action _process_storm_control_stats_nop_0() { + _storm_control_stats.count(); + } + @name(".storm_control_stats") table _storm_control_stats_0 { + actions = { + _process_storm_control_stats_nop_0(); + @defaultonly NoAction_105(); + } + key = { + meta._meter_metadata_meter_color106: exact @name("meter_metadata.meter_color"); + standard_metadata.ingress_port : exact @name("standard_metadata.ingress_port"); + } + size = 1024; + counters = _storm_control_stats; + default_action = NoAction_105(); + } + @name(".process_fwd_results.nop") action _process_fwd_results_nop_0() { + } + @name(".process_fwd_results.set_l2_redirect_action") action _process_fwd_results_set_l2_redirect_action_0() { + meta._l3_metadata_nexthop_index100 = meta._l2_metadata_l2_nexthop69; + meta._nexthop_metadata_nexthop_type128 = meta._l2_metadata_l2_nexthop_type70; + meta._ingress_metadata_egress_ifindex39 = 16w0; + standard_metadata.mcast_grp = 16w0; + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_fwd_results.set_fib_redirect_action") action _process_fwd_results_set_fib_redirect_action_0() { + meta._l3_metadata_nexthop_index100 = meta._l3_metadata_fib_nexthop97; + meta._nexthop_metadata_nexthop_type128 = meta._l3_metadata_fib_nexthop_type98; + meta._l3_metadata_routed101 = 1w1; + standard_metadata.mcast_grp = 16w0; + meta._fabric_metadata_reason_code28 = 16w0x217; + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_fwd_results.set_cpu_redirect_action") action _process_fwd_results_set_cpu_redirect_action_0() { + meta._l3_metadata_routed101 = 1w0; + standard_metadata.mcast_grp = 16w0; + standard_metadata.egress_spec = 9w64; + meta._ingress_metadata_egress_ifindex39 = 16w0; + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_fwd_results.set_acl_redirect_action") action _process_fwd_results_set_acl_redirect_action_0() { + meta._l3_metadata_nexthop_index100 = meta._acl_metadata_acl_nexthop3; + meta._nexthop_metadata_nexthop_type128 = meta._acl_metadata_acl_nexthop_type5; + meta._ingress_metadata_egress_ifindex39 = 16w0; + standard_metadata.mcast_grp = 16w0; + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_fwd_results.set_racl_redirect_action") action _process_fwd_results_set_racl_redirect_action_0() { + meta._l3_metadata_nexthop_index100 = meta._acl_metadata_racl_nexthop4; + meta._nexthop_metadata_nexthop_type128 = meta._acl_metadata_racl_nexthop_type6; + meta._l3_metadata_routed101 = 1w1; + meta._ingress_metadata_egress_ifindex39 = 16w0; + standard_metadata.mcast_grp = 16w0; + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_fwd_results.set_multicast_route_action") action _process_fwd_results_set_multicast_route_action_0() { + meta._fabric_metadata_dst_device29 = 8w127; + meta._ingress_metadata_egress_ifindex39 = 16w0; + standard_metadata.mcast_grp = meta._multicast_metadata_multicast_route_mc_index123; + meta._l3_metadata_routed101 = 1w1; + meta._l3_metadata_same_bd_check99 = 16w0xffff; + } + @name(".process_fwd_results.set_multicast_bridge_action") action _process_fwd_results_set_multicast_bridge_action_0() { + meta._fabric_metadata_dst_device29 = 8w127; + meta._ingress_metadata_egress_ifindex39 = 16w0; + standard_metadata.mcast_grp = meta._multicast_metadata_multicast_bridge_mc_index124; + } + @name(".process_fwd_results.set_multicast_flood") action _process_fwd_results_set_multicast_flood_0() { + meta._fabric_metadata_dst_device29 = 8w127; + meta._ingress_metadata_egress_ifindex39 = 16w65535; + } + @name(".process_fwd_results.set_multicast_drop") action _process_fwd_results_set_multicast_drop_0() { + meta._ingress_metadata_drop_flag43 = 1w1; + meta._ingress_metadata_drop_reason44 = 8w44; + } + @name(".fwd_result") table _fwd_result { + actions = { + _process_fwd_results_nop_0(); + _process_fwd_results_set_l2_redirect_action_0(); + _process_fwd_results_set_fib_redirect_action_0(); + _process_fwd_results_set_cpu_redirect_action_0(); + _process_fwd_results_set_acl_redirect_action_0(); + _process_fwd_results_set_racl_redirect_action_0(); + _process_fwd_results_set_multicast_route_action_0(); + _process_fwd_results_set_multicast_bridge_action_0(); + _process_fwd_results_set_multicast_flood_0(); + _process_fwd_results_set_multicast_drop_0(); + @defaultonly NoAction_106(); + } + key = { + meta._l2_metadata_l2_redirect71 : ternary @name("l2_metadata.l2_redirect"); + meta._acl_metadata_acl_redirect7 : ternary @name("acl_metadata.acl_redirect"); + meta._acl_metadata_racl_redirect8 : ternary @name("acl_metadata.racl_redirect"); + meta._l3_metadata_rmac_hit91 : ternary @name("l3_metadata.rmac_hit"); + meta._l3_metadata_fib_hit96 : ternary @name("l3_metadata.fib_hit"); + meta._l2_metadata_lkp_pkt_type67 : ternary @name("l2_metadata.lkp_pkt_type"); + meta._l3_metadata_lkp_ip_type80 : ternary @name("l3_metadata.lkp_ip_type"); + meta._multicast_metadata_igmp_snooping_enabled118: ternary @name("multicast_metadata.igmp_snooping_enabled"); + meta._multicast_metadata_mld_snooping_enabled119 : ternary @name("multicast_metadata.mld_snooping_enabled"); + meta._multicast_metadata_mcast_route_hit114 : ternary @name("multicast_metadata.mcast_route_hit"); + meta._multicast_metadata_mcast_bridge_hit115 : ternary @name("multicast_metadata.mcast_bridge_hit"); + meta._multicast_metadata_mcast_rpf_group121 : ternary @name("multicast_metadata.mcast_rpf_group"); + meta._multicast_metadata_mcast_mode122 : ternary @name("multicast_metadata.mcast_mode"); + } + size = 512; + default_action = NoAction_106(); + } + @name(".process_nexthop.nop") action _process_nexthop_nop_0() { + } + @name(".process_nexthop.nop") action _process_nexthop_nop_1() { + } + @name(".process_nexthop.set_ecmp_nexthop_details") action _process_nexthop_set_ecmp_nexthop_details_0(@name("ifindex") bit<16> ifindex_20, @name("bd") bit<16> bd_30, @name("nhop_index") bit<16> nhop_index, @name("tunnel") bit<1> tunnel) { + meta._ingress_metadata_egress_ifindex39 = ifindex_20; + meta._l3_metadata_nexthop_index100 = nhop_index; + meta._l3_metadata_same_bd_check99 = meta._ingress_metadata_bd42 ^ bd_30; + meta._l2_metadata_same_if_check79 = meta._l2_metadata_same_if_check79 ^ ifindex_20; + meta._tunnel_metadata_tunnel_if_check151 = meta._tunnel_metadata_tunnel_terminate150 ^ tunnel; + } + @name(".process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood") action _process_nexthop_set_ecmp_nexthop_details_for_post_routed_flood_0(@name("bd") bit<16> bd_31, @name("uuc_mc_index") bit<16> uuc_mc_index, @name("nhop_index") bit<16> nhop_index_2) { + standard_metadata.mcast_grp = uuc_mc_index; + meta._l3_metadata_nexthop_index100 = nhop_index_2; + meta._ingress_metadata_egress_ifindex39 = 16w0; + meta._l3_metadata_same_bd_check99 = meta._ingress_metadata_bd42 ^ bd_31; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".process_nexthop.set_nexthop_details") action _process_nexthop_set_nexthop_details_0(@name("ifindex") bit<16> ifindex_21, @name("bd") bit<16> bd_32, @name("tunnel") bit<1> tunnel_0) { + meta._ingress_metadata_egress_ifindex39 = ifindex_21; + meta._l3_metadata_same_bd_check99 = meta._ingress_metadata_bd42 ^ bd_32; + meta._l2_metadata_same_if_check79 = meta._l2_metadata_same_if_check79 ^ ifindex_21; + meta._tunnel_metadata_tunnel_if_check151 = meta._tunnel_metadata_tunnel_terminate150 ^ tunnel_0; + } + @name(".process_nexthop.set_nexthop_details_for_post_routed_flood") action _process_nexthop_set_nexthop_details_for_post_routed_flood_0(@name("bd") bit<16> bd_33, @name("uuc_mc_index") bit<16> uuc_mc_index_2) { + standard_metadata.mcast_grp = uuc_mc_index_2; + meta._ingress_metadata_egress_ifindex39 = 16w0; + meta._l3_metadata_same_bd_check99 = meta._ingress_metadata_bd42 ^ bd_33; + meta._fabric_metadata_dst_device29 = 8w127; + } + @name(".ecmp_group") table _ecmp_group { + actions = { + _process_nexthop_nop_0(); + _process_nexthop_set_ecmp_nexthop_details_0(); + _process_nexthop_set_ecmp_nexthop_details_for_post_routed_flood_0(); + @defaultonly NoAction_107(); + } + key = { + meta._l3_metadata_nexthop_index100: exact @name("l3_metadata.nexthop_index"); + meta._hash_metadata_hash132 : selector @name("hash_metadata.hash1"); + } + size = 1024; + implementation = ecmp_action_profile; + default_action = NoAction_107(); + } + @name(".nexthop") table _nexthop { + actions = { + _process_nexthop_nop_1(); + _process_nexthop_set_nexthop_details_0(); + _process_nexthop_set_nexthop_details_for_post_routed_flood_0(); + @defaultonly NoAction_108(); + } + key = { + meta._l3_metadata_nexthop_index100: exact @name("l3_metadata.nexthop_index"); + } + size = 1024; + default_action = NoAction_108(); + } + @name(".process_multicast_flooding.nop") action _process_multicast_flooding_nop_0() { + } + @name(".process_multicast_flooding.set_bd_flood_mc_index") action _process_multicast_flooding_set_bd_flood_mc_index_0(@name("mc_index") bit<16> mc_index_42) { + standard_metadata.mcast_grp = mc_index_42; + } + @name(".bd_flood") table _bd_flood { + actions = { + _process_multicast_flooding_nop_0(); + _process_multicast_flooding_set_bd_flood_mc_index_0(); + @defaultonly NoAction_109(); + } + key = { + meta._ingress_metadata_bd42 : exact @name("ingress_metadata.bd"); + meta._l2_metadata_lkp_pkt_type67: exact @name("l2_metadata.lkp_pkt_type"); + } + size = 1024; + default_action = NoAction_109(); + } + @name(".process_lag.set_lag_miss") action _process_lag_set_lag_miss_0() { + } + @name(".process_lag.set_lag_port") action _process_lag_set_lag_port_0(@name("port") bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_lag.set_lag_remote_port") action _process_lag_set_lag_remote_port_0(@name("device") bit<8> device, @name("port") bit<16> port_3) { + meta._fabric_metadata_dst_device29 = device; + meta._fabric_metadata_dst_port30 = port_3; + } + @name(".lag_group") table _lag_group { + actions = { + _process_lag_set_lag_miss_0(); + _process_lag_set_lag_port_0(); + _process_lag_set_lag_remote_port_0(); + @defaultonly NoAction_110(); + } + key = { + meta._ingress_metadata_egress_ifindex39: exact @name("ingress_metadata.egress_ifindex"); + meta._hash_metadata_hash233 : selector @name("hash_metadata.hash2"); + } + size = 1024; + implementation = lag_action_profile; + default_action = NoAction_110(); + } + @name(".process_mac_learning.nop") action _process_mac_learning_nop_0() { + } + @name(".process_mac_learning.generate_learn_notify") action _process_mac_learning_generate_learn_notify_0() { + digest(32w1024, (mac_learn_digest){bd = meta._ingress_metadata_bd42,lkp_mac_sa = meta._l2_metadata_lkp_mac_sa65,ifindex = meta._ingress_metadata_ifindex38}); + } + @name(".learn_notify") table _learn_notify { + actions = { + _process_mac_learning_nop_0(); + _process_mac_learning_generate_learn_notify_0(); + @defaultonly NoAction_111(); + } + key = { + meta._l2_metadata_l2_src_miss72: ternary @name("l2_metadata.l2_src_miss"); + meta._l2_metadata_l2_src_move73: ternary @name("l2_metadata.l2_src_move"); + meta._l2_metadata_stp_state75 : ternary @name("l2_metadata.stp_state"); + } + size = 512; + default_action = NoAction_111(); + } + @name(".process_fabric_lag.nop") action _process_fabric_lag_nop_0() { + } + @name(".process_fabric_lag.set_fabric_lag_port") action _process_fabric_lag_set_fabric_lag_port_0(@name("port") bit<9> port_4) { + standard_metadata.egress_spec = port_4; + } + @name(".process_fabric_lag.set_fabric_multicast") action _process_fabric_lag_set_fabric_multicast_0(@name("fabric_mgid") bit<8> fabric_mgid_2) { + meta._multicast_metadata_mcast_grp127 = standard_metadata.mcast_grp; + } + @name(".fabric_lag") table _fabric_lag { + actions = { + _process_fabric_lag_nop_0(); + _process_fabric_lag_set_fabric_lag_port_0(); + _process_fabric_lag_set_fabric_multicast_0(); + @defaultonly NoAction_112(); + } + key = { + meta._fabric_metadata_dst_device29: exact @name("fabric_metadata.dst_device"); + meta._hash_metadata_hash233 : selector @name("hash_metadata.hash2"); + } + implementation = fabric_lag_action_profile; + default_action = NoAction_112(); + } + @name(".process_system_acl.drop_stats_update") action _process_system_acl_drop_stats_update_0() { + drop_stats_2.count((bit<10>)meta._ingress_metadata_drop_reason44); + } + @name(".process_system_acl.nop") action _process_system_acl_nop_0() { + } + @name(".process_system_acl.copy_to_cpu_with_reason") action _process_system_acl_copy_to_cpu_with_reason_0(@name("reason_code") bit<16> reason_code_6) { + meta._fabric_metadata_reason_code28 = reason_code_6; + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.redirect_to_cpu") action _process_system_acl_redirect_to_cpu_0(@name("reason_code") bit<16> reason_code_7) { + meta._fabric_metadata_reason_code28 = reason_code_7; + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + mark_to_drop(standard_metadata); + meta._fabric_metadata_dst_device29 = 8w0; + } + @name(".process_system_acl.copy_to_cpu") action _process_system_acl_copy_to_cpu_0() { + clone_preserving_field_list(CloneType.I2E, 32w250, 8w2); + } + @name(".process_system_acl.drop_packet") action _process_system_acl_drop_packet_0() { + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.drop_packet_with_reason") action _process_system_acl_drop_packet_with_reason_0(@name("drop_reason") bit<10> drop_reason_9) { + drop_stats.count(drop_reason_9); + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.negative_mirror") action _process_system_acl_negative_mirror_0(@name("session_id") bit<32> session_id_11) { + clone_preserving_field_list(CloneType.I2E, session_id_11, 8w5); + mark_to_drop(standard_metadata); + } + @name(".drop_stats") table _drop_stats { + actions = { + _process_system_acl_drop_stats_update_0(); + @defaultonly NoAction_113(); + } + size = 1024; + default_action = NoAction_113(); + } + @name(".system_acl") table _system_acl { + actions = { + _process_system_acl_nop_0(); + _process_system_acl_redirect_to_cpu_0(); + _process_system_acl_copy_to_cpu_with_reason_0(); + _process_system_acl_copy_to_cpu_0(); + _process_system_acl_drop_packet_0(); + _process_system_acl_drop_packet_with_reason_0(); + _process_system_acl_negative_mirror_0(); + @defaultonly NoAction_114(); + } + key = { + meta._acl_metadata_if_label9 : ternary @name("acl_metadata.if_label"); + meta._acl_metadata_bd_label10 : ternary @name("acl_metadata.bd_label"); + meta._l2_metadata_lkp_mac_sa65 : ternary @name("l2_metadata.lkp_mac_sa"); + meta._l2_metadata_lkp_mac_da66 : ternary @name("l2_metadata.lkp_mac_da"); + meta._l2_metadata_lkp_mac_type68 : ternary @name("l2_metadata.lkp_mac_type"); + meta._ingress_metadata_ifindex38 : ternary @name("ingress_metadata.ifindex"); + meta._l2_metadata_port_vlan_mapping_miss78 : ternary @name("l2_metadata.port_vlan_mapping_miss"); + meta._security_metadata_ipsg_check_fail135 : ternary @name("security_metadata.ipsg_check_fail"); + meta._security_metadata_storm_control_color133: ternary @name("security_metadata.storm_control_color"); + meta._acl_metadata_acl_deny0 : ternary @name("acl_metadata.acl_deny"); + meta._acl_metadata_racl_deny2 : ternary @name("acl_metadata.racl_deny"); + meta._l3_metadata_urpf_check_fail94 : ternary @name("l3_metadata.urpf_check_fail"); + meta._ingress_metadata_drop_flag43 : ternary @name("ingress_metadata.drop_flag"); + meta._acl_metadata_acl_copy1 : ternary @name("acl_metadata.acl_copy"); + meta._l3_metadata_l3_copy104 : ternary @name("l3_metadata.l3_copy"); + meta._l3_metadata_rmac_hit91 : ternary @name("l3_metadata.rmac_hit"); + meta._l3_metadata_routed101 : ternary @name("l3_metadata.routed"); + meta._ipv6_metadata_ipv6_src_is_link_local63 : ternary @name("ipv6_metadata.ipv6_src_is_link_local"); + meta._l2_metadata_same_if_check79 : ternary @name("l2_metadata.same_if_check"); + meta._tunnel_metadata_tunnel_if_check151 : ternary @name("tunnel_metadata.tunnel_if_check"); + meta._l3_metadata_same_bd_check99 : ternary @name("l3_metadata.same_bd_check"); + meta._l3_metadata_lkp_ip_ttl84 : ternary @name("l3_metadata.lkp_ip_ttl"); + meta._l2_metadata_stp_state75 : ternary @name("l2_metadata.stp_state"); + meta._ingress_metadata_control_frame45 : ternary @name("ingress_metadata.control_frame"); + meta._ipv4_metadata_ipv4_unicast_enabled58 : ternary @name("ipv4_metadata.ipv4_unicast_enabled"); + meta._ipv6_metadata_ipv6_unicast_enabled62 : ternary @name("ipv6_metadata.ipv6_unicast_enabled"); + meta._ingress_metadata_egress_ifindex39 : ternary @name("ingress_metadata.egress_ifindex"); + } + size = 512; + default_action = NoAction_114(); + } + apply { + _ingress_port_mapping.apply(); + _ingress_port_properties.apply(); + switch (_validate_outer_ethernet.apply().action_run) { + _process_validate_outer_header_malformed_outer_ethernet_packet_0: { + } + default: { + if (hdr.ipv4.isValid()) { + _validate_outer_ipv4_packet_0.apply(); + } else if (hdr.ipv6.isValid()) { + _validate_outer_ipv6_packet_0.apply(); + } else if (hdr.mpls[0].isValid()) { + _validate_mpls_packet_0.apply(); + } + } + } + _switch_config_params.apply(); + _port_vlan_mapping.apply(); + if (meta._ingress_metadata_port_type40 == 2w0 && meta._l2_metadata_stp_group74 != 10w0) { + _spanning_tree.apply(); + } + if (meta._ingress_metadata_port_type40 == 2w0 && meta._security_metadata_ipsg_enabled134 == 1w1) { + switch (_ipsg.apply().action_run) { + _process_ip_sourceguard_on_miss_0: { + _ipsg_permit_special.apply(); + } + default: { + } + } + } + if (hdr.int_header.isValid()) { + _int_terminate.apply(); + _int_sink_update_outer.apply(); + } else { + _int_source.apply(); + } + if (meta._ingress_metadata_port_type40 != 2w0) { + _fabric_ingress_dst_lkp_0.apply(); + if (meta._ingress_metadata_port_type40 == 2w1) { + if (hdr.fabric_header_multicast.isValid()) { + _fabric_ingress_src_lkp_0.apply(); + } + if (meta._tunnel_metadata_tunnel_terminate150 == 1w0) { + _native_packet_over_fabric_0.apply(); + } + } + } + if (meta._tunnel_metadata_ingress_tunnel_type137 != 5w0) { + switch (_outer_rmac.apply().action_run) { + _process_tunnel_on_miss_0: { + if (hdr.ipv4.isValid()) { + switch (_outer_ipv4_multicast_0.apply().action_run) { + _process_outer_ipv4_multicast_on_miss: { + _outer_ipv4_multicast_star_g_0.apply(); + } + default: { + } + } + } else if (hdr.ipv6.isValid()) { + switch (_outer_ipv6_multicast_0.apply().action_run) { + _process_outer_ipv6_multicast_on_miss: { + _outer_ipv6_multicast_star_g_0.apply(); + } + default: { + } + } + } + } + default: { + if (hdr.ipv4.isValid()) { + switch (_ipv4_src_vtep_0.apply().action_run) { + _process_ipv4_vtep_src_vtep_hit: { + _ipv4_dest_vtep_0.apply(); + } + default: { + } + } + } else if (hdr.ipv6.isValid()) { + switch (_ipv6_src_vtep_0.apply().action_run) { + _process_ipv6_vtep_src_vtep_hit: { + _ipv6_dest_vtep_0.apply(); + } + default: { + } + } + } else if (hdr.mpls[0].isValid()) { + _mpls_0.apply(); + } + } + } + } + if (meta._tunnel_metadata_tunnel_terminate150 == 1w1 || meta._multicast_metadata_outer_mcast_route_hit112 == 1w1 && (meta._multicast_metadata_outer_mcast_mode113 == 2w1 && meta._multicast_metadata_mcast_rpf_group121 == 16w0 || meta._multicast_metadata_outer_mcast_mode113 == 2w2 && meta._multicast_metadata_mcast_rpf_group121 != 16w0)) { + switch (_tunnel.apply().action_run) { + _process_tunnel_tunnel_lookup_miss_0: { + _tunnel_lookup_miss.apply(); + } + default: { + } + } + } else { + _tunnel_miss.apply(); + } + _sflow_ingress.apply(); + _sflow_ing_take_sample.apply(); + if (meta._ingress_metadata_port_type40 == 2w0) { + _storm_control.apply(); + } + if (meta._ingress_metadata_port_type40 != 2w1) { + if (hdr.mpls[0].isValid() && meta._l3_metadata_fib_hit96 == 1w1) { + ; + } else { + if (meta._ingress_metadata_drop_flag43 == 1w0) { + _validate_packet.apply(); + } + if (meta._ingress_metadata_port_type40 == 2w0) { + _smac.apply(); + } + if (meta._ingress_metadata_bypass_lookups46 & 16w0x1 == 16w0) { + _dmac.apply(); + } + if (meta._l3_metadata_lkp_ip_type80 == 2w0) { + if (meta._ingress_metadata_bypass_lookups46 & 16w0x4 == 16w0) { + _mac_acl.apply(); + } + } else if (meta._ingress_metadata_bypass_lookups46 & 16w0x4 == 16w0) { + if (meta._l3_metadata_lkp_ip_type80 == 2w1) { + _ip_acl.apply(); + } else if (meta._l3_metadata_lkp_ip_type80 == 2w2) { + _ipv6_acl.apply(); + } + } + _qos.apply(); + switch (rmac_0.apply().action_run) { + rmac_miss: { + if (meta._l3_metadata_lkp_ip_type80 == 2w1) { + if (meta._ingress_metadata_bypass_lookups46 & 16w0x1 == 16w0) { + switch (_ipv4_multicast_bridge_0.apply().action_run) { + _process_ipv4_multicast_on_miss: { + _ipv4_multicast_bridge_star_g_0.apply(); + } + default: { + } + } + } + if (meta._ingress_metadata_bypass_lookups46 & 16w0x2 == 16w0 && meta._multicast_metadata_ipv4_multicast_enabled116 == 1w1) { + switch (_ipv4_multicast_route_0.apply().action_run) { + _process_ipv4_multicast_on_miss_0: { + _ipv4_multicast_route_star_g_0.apply(); + } + default: { + } + } + } + } else if (meta._l3_metadata_lkp_ip_type80 == 2w2) { + if (meta._ingress_metadata_bypass_lookups46 & 16w0x1 == 16w0) { + switch (_ipv6_multicast_bridge_0.apply().action_run) { + _process_ipv6_multicast_on_miss: { + _ipv6_multicast_bridge_star_g_0.apply(); + } + default: { + } + } + } + if (meta._ingress_metadata_bypass_lookups46 & 16w0x2 == 16w0 && meta._multicast_metadata_ipv6_multicast_enabled117 == 1w1) { + switch (_ipv6_multicast_route_0.apply().action_run) { + _process_ipv6_multicast_on_miss_0: { + _ipv6_multicast_route_star_g_0.apply(); + } + default: { + } + } + } + } + } + default: { + if (meta._ingress_metadata_bypass_lookups46 & 16w0x2 == 16w0) { + if (meta._l3_metadata_lkp_ip_type80 == 2w1 && meta._ipv4_metadata_ipv4_unicast_enabled58 == 1w1) { + _ipv4_racl.apply(); + if (meta._ipv4_metadata_ipv4_urpf_mode59 != 2w0) { + switch (_ipv4_urpf.apply().action_run) { + _process_ipv4_urpf_on_miss_0: { + _ipv4_urpf_lpm.apply(); + } + default: { + } + } + } + switch (_ipv4_fib.apply().action_run) { + _process_ipv4_fib_on_miss_0: { + _ipv4_fib_lpm.apply(); + } + default: { + } + } + } else if (meta._l3_metadata_lkp_ip_type80 == 2w2 && meta._ipv6_metadata_ipv6_unicast_enabled62 == 1w1) { + _ipv6_racl.apply(); + if (meta._ipv6_metadata_ipv6_urpf_mode64 != 2w0) { + switch (_ipv6_urpf.apply().action_run) { + _process_ipv6_urpf_on_miss_0: { + _ipv6_urpf_lpm.apply(); + } + default: { + } + } + } + switch (_ipv6_fib.apply().action_run) { + _process_ipv6_fib_on_miss_0: { + _ipv6_fib_lpm.apply(); + } + default: { + } + } + } + if (meta._l3_metadata_urpf_mode92 == 2w2 && meta._l3_metadata_urpf_hit93 == 1w1) { + _urpf_bd.apply(); + } + } + } + } + } + } + if (meta._ingress_metadata_bypass_lookups46 & 16w0x10 == 16w0) { + _meter_index_0.apply(); + } + if (meta._tunnel_metadata_tunnel_terminate150 == 1w0 && hdr.ipv4.isValid() || meta._tunnel_metadata_tunnel_terminate150 == 1w1 && hdr.inner_ipv4.isValid()) { + _compute_ipv4_hashes.apply(); + } else if (meta._tunnel_metadata_tunnel_terminate150 == 1w0 && hdr.ipv6.isValid() || meta._tunnel_metadata_tunnel_terminate150 == 1w1 && hdr.inner_ipv6.isValid()) { + _compute_ipv6_hashes.apply(); + } else { + _compute_non_ip_hashes.apply(); + } + _compute_other_hashes.apply(); + if (meta._ingress_metadata_bypass_lookups46 & 16w0x10 == 16w0) { + _meter_action.apply(); + } + if (meta._ingress_metadata_port_type40 != 2w1) { + _ingress_bd_stats.apply(); + _acl_stats.apply(); + _storm_control_stats_0.apply(); + if (meta._ingress_metadata_bypass_lookups46 != 16w0xffff) { + _fwd_result.apply(); + } + if (meta._nexthop_metadata_nexthop_type128 == 1w1) { + _ecmp_group.apply(); + } else { + _nexthop.apply(); + } + if (meta._ingress_metadata_egress_ifindex39 == 16w65535) { + _bd_flood.apply(); + } else { + _lag_group.apply(); + } + if (meta._l2_metadata_learning_enabled77 == 1w1) { + _learn_notify.apply(); + } + } + _fabric_lag.apply(); + if (meta._ingress_metadata_port_type40 != 2w1) { + if (meta._ingress_metadata_bypass_lookups46 & 16w0x20 == 16w0) { + _system_acl.apply(); + if (meta._ingress_metadata_drop_flag43 == 1w1) { + _drop_stats.apply(); + } + } + } + } +} + +control DeparserImpl(packet_out packet, in headers hdr) { + apply { + packet.emit(hdr.ethernet); + packet.emit(hdr.fabric_header); + packet.emit(hdr.fabric_header_cpu); + packet.emit(hdr.fabric_header_sflow); + packet.emit(hdr.fabric_header_mirror); + packet.emit(hdr.fabric_header_multicast); + packet.emit(hdr.fabric_header_unicast); + packet.emit(hdr.fabric_payload_header); + packet.emit(hdr.llc_header); + packet.emit(hdr.snap_header); + packet.emit(hdr.vlan_tag_[0]); + packet.emit(hdr.vlan_tag_[1]); + packet.emit(hdr.arp_rarp); + packet.emit(hdr.arp_rarp_ipv4); + packet.emit(hdr.ipv6); + packet.emit(hdr.ipv4); + packet.emit(hdr.gre); + packet.emit(hdr.erspan_t3_header); + packet.emit(hdr.nvgre); + packet.emit(hdr.udp); + packet.emit(hdr.sflow); + packet.emit(hdr.vxlan_gpe); + packet.emit(hdr.vxlan_gpe_int_header); + packet.emit(hdr.int_header); + packet.emit(hdr.int_switch_id_header); + packet.emit(hdr.int_ingress_port_id_header); + packet.emit(hdr.int_hop_latency_header); + packet.emit(hdr.int_q_occupancy_header); + packet.emit(hdr.int_ingress_tstamp_header); + packet.emit(hdr.int_egress_port_id_header); + packet.emit(hdr.int_q_congestion_header); + packet.emit(hdr.int_egress_port_tx_utilization_header); + packet.emit(hdr.int_val[0]); + packet.emit(hdr.int_val[1]); + packet.emit(hdr.int_val[2]); + packet.emit(hdr.int_val[3]); + packet.emit(hdr.int_val[4]); + packet.emit(hdr.int_val[5]); + packet.emit(hdr.int_val[6]); + packet.emit(hdr.int_val[7]); + packet.emit(hdr.int_val[8]); + packet.emit(hdr.int_val[9]); + packet.emit(hdr.int_val[10]); + packet.emit(hdr.int_val[11]); + packet.emit(hdr.int_val[12]); + packet.emit(hdr.int_val[13]); + packet.emit(hdr.int_val[14]); + packet.emit(hdr.int_val[15]); + packet.emit(hdr.int_val[16]); + packet.emit(hdr.int_val[17]); + packet.emit(hdr.int_val[18]); + packet.emit(hdr.int_val[19]); + packet.emit(hdr.int_val[20]); + packet.emit(hdr.int_val[21]); + packet.emit(hdr.int_val[22]); + packet.emit(hdr.int_val[23]); + packet.emit(hdr.genv); + packet.emit(hdr.vxlan); + packet.emit(hdr.tcp); + packet.emit(hdr.icmp); + packet.emit(hdr.mpls[0]); + packet.emit(hdr.mpls[1]); + packet.emit(hdr.mpls[2]); + packet.emit(hdr.inner_ethernet); + packet.emit(hdr.inner_ipv6); + packet.emit(hdr.inner_ipv4); + packet.emit(hdr.inner_udp); + packet.emit(hdr.inner_tcp); + packet.emit(hdr.inner_icmp); + } +} + +struct tuple_5 { + bit<4> f0; + bit<4> f1; + bit<8> f2; + bit<16> f3; + bit<16> f4; + bit<3> f5; + bit<13> f6; + bit<8> f7; + bit<8> f8; + bit<32> f9; + bit<32> f10; +} + +control verifyChecksum(inout headers hdr, inout metadata meta) { + apply { + verify_checksum>(hdr.inner_ipv4.ihl == 4w5, (tuple_5){f0 = hdr.inner_ipv4.version,f1 = hdr.inner_ipv4.ihl,f2 = hdr.inner_ipv4.diffserv,f3 = hdr.inner_ipv4.totalLen,f4 = hdr.inner_ipv4.identification,f5 = hdr.inner_ipv4.flags,f6 = hdr.inner_ipv4.fragOffset,f7 = hdr.inner_ipv4.ttl,f8 = hdr.inner_ipv4.protocol,f9 = hdr.inner_ipv4.srcAddr,f10 = hdr.inner_ipv4.dstAddr}, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + verify_checksum>(hdr.ipv4.ihl == 4w5, (tuple_5){f0 = hdr.ipv4.version,f1 = hdr.ipv4.ihl,f2 = hdr.ipv4.diffserv,f3 = hdr.ipv4.totalLen,f4 = hdr.ipv4.identification,f5 = hdr.ipv4.flags,f6 = hdr.ipv4.fragOffset,f7 = hdr.ipv4.ttl,f8 = hdr.ipv4.protocol,f9 = hdr.ipv4.srcAddr,f10 = hdr.ipv4.dstAddr}, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +control computeChecksum(inout headers hdr, inout metadata meta) { + apply { + update_checksum>(hdr.inner_ipv4.ihl == 4w5, (tuple_5){f0 = hdr.inner_ipv4.version,f1 = hdr.inner_ipv4.ihl,f2 = hdr.inner_ipv4.diffserv,f3 = hdr.inner_ipv4.totalLen,f4 = hdr.inner_ipv4.identification,f5 = hdr.inner_ipv4.flags,f6 = hdr.inner_ipv4.fragOffset,f7 = hdr.inner_ipv4.ttl,f8 = hdr.inner_ipv4.protocol,f9 = hdr.inner_ipv4.srcAddr,f10 = hdr.inner_ipv4.dstAddr}, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + update_checksum>(hdr.ipv4.ihl == 4w5, (tuple_5){f0 = hdr.ipv4.version,f1 = hdr.ipv4.ihl,f2 = hdr.ipv4.diffserv,f3 = hdr.ipv4.totalLen,f4 = hdr.ipv4.identification,f5 = hdr.ipv4.flags,f6 = hdr.ipv4.fragOffset,f7 = hdr.ipv4.ttl,f8 = hdr.ipv4.protocol,f9 = hdr.ipv4.srcAddr,f10 = hdr.ipv4.dstAddr}, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +V1Switch(ParserImpl(), verifyChecksum(), ingress(), egress(), computeChecksum(), DeparserImpl()) main; diff --git a/testdata/p4_16_samples_outputs/switch_p4_16.p4 b/testdata/p4_16_samples_outputs/switch_p4_16.p4 new file mode 100644 index 00000000000..db6c3d2cf38 --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16.p4 @@ -0,0 +1,5884 @@ +#include +#define V1MODEL_VERSION 20200408 +#include + +enum bit<8> FieldLists { + none = 0, + i2e_mirror_info = 1, + cpu_info = 2, + e2e_mirror_info = 3, + int_i2e_mirror_info = 4, + mirror_info = 5, + sflow_cpu_info = 6 +} + +struct acl_metadata_t { + bit<1> acl_deny; + bit<1> acl_copy; + bit<1> racl_deny; + bit<16> acl_nexthop; + bit<16> racl_nexthop; + bit<1> acl_nexthop_type; + bit<1> racl_nexthop_type; + bit<1> acl_redirect; + bit<1> racl_redirect; + bit<16> if_label; + bit<16> bd_label; + bit<14> acl_stats_index; +} + +struct egress_filter_metadata_t { + bit<16> ifindex_check; + bit<16> bd; + bit<16> inner_bd; +} + +struct egress_metadata_t { + bit<1> bypass; + bit<2> port_type; + bit<16> payload_length; + bit<9> smac_idx; + bit<16> bd; + bit<16> outer_bd; + bit<48> mac_da; + bit<1> routed; + bit<16> same_bd_check; + bit<8> drop_reason; + bit<16> ifindex; +} + +struct fabric_metadata_t { + bit<3> packetType; + bit<1> fabric_header_present; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> reason_code; + bit<8> dst_device; + bit<16> dst_port; +} + +struct global_config_metadata_t { + bit<1> enable_dod; +} + +struct hash_metadata_t { + bit<16> hash1; + bit<16> hash2; + bit<16> entropy_hash; +} + +struct i2e_metadata_t { + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info) + bit<32> ingress_tstamp; + @field_list(FieldLists.i2e_mirror_info, FieldLists.e2e_mirror_info, FieldLists.int_i2e_mirror_info) + bit<16> mirror_session_id; +} + +struct ingress_metadata_t { + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<9> ingress_port; + @field_list(FieldLists.cpu_info, FieldLists.mirror_info, FieldLists.sflow_cpu_info) + bit<16> ifindex; + bit<16> egress_ifindex; + bit<2> port_type; + bit<16> outer_bd; + @field_list(FieldLists.cpu_info, FieldLists.sflow_cpu_info) + bit<16> bd; + bit<1> drop_flag; + @field_list(FieldLists.mirror_info) + bit<8> drop_reason; + bit<1> control_frame; + bit<16> bypass_lookups; + @saturating + bit<32> sflow_take_sample; +} + +struct int_metadata_t { + bit<32> switch_id; + bit<8> insert_cnt; + bit<16> insert_byte_cnt; + bit<16> gpe_int_hdr_len; + bit<8> gpe_int_hdr_len8; + bit<16> instruction_cnt; +} + +struct int_metadata_i2e_t { + @field_list(FieldLists.int_i2e_mirror_info) + bit<1> sink; + bit<1> source; +} + +struct ingress_intrinsic_metadata_t { + bit<48> ingress_global_timestamp; + bit<16> mcast_grp; + bit<16> egress_rid; + bit<3> priority; +} + +struct ipv4_metadata_t { + bit<32> lkp_ipv4_sa; + bit<32> lkp_ipv4_da; + bit<1> ipv4_unicast_enabled; + bit<2> ipv4_urpf_mode; +} + +struct ipv6_metadata_t { + bit<128> lkp_ipv6_sa; + bit<128> lkp_ipv6_da; + bit<1> ipv6_unicast_enabled; + bit<1> ipv6_src_is_link_local; + bit<2> ipv6_urpf_mode; +} + +struct l2_metadata_t { + bit<48> lkp_mac_sa; + bit<48> lkp_mac_da; + bit<3> lkp_pkt_type; + bit<16> lkp_mac_type; + bit<16> l2_nexthop; + bit<1> l2_nexthop_type; + bit<1> l2_redirect; + bit<1> l2_src_miss; + bit<16> l2_src_move; + bit<10> stp_group; + bit<3> stp_state; + bit<16> bd_stats_idx; + bit<1> learning_enabled; + bit<1> port_vlan_mapping_miss; + bit<16> same_if_check; +} + +struct l3_metadata_t { + bit<2> lkp_ip_type; + bit<4> lkp_ip_version; + bit<8> lkp_ip_proto; + bit<8> lkp_ip_tc; + bit<8> lkp_ip_ttl; + bit<16> lkp_l4_sport; + bit<16> lkp_l4_dport; + bit<16> lkp_outer_l4_sport; + bit<16> lkp_outer_l4_dport; + bit<16> vrf; + bit<10> rmac_group; + bit<1> rmac_hit; + bit<2> urpf_mode; + bit<1> urpf_hit; + bit<1> urpf_check_fail; + bit<16> urpf_bd_group; + bit<1> fib_hit; + bit<16> fib_nexthop; + bit<1> fib_nexthop_type; + bit<16> same_bd_check; + bit<16> nexthop_index; + bit<1> routed; + bit<1> outer_routed; + bit<8> mtu_index; + bit<1> l3_copy; + @saturating + bit<16> l3_mtu_check; +} + +struct meter_metadata_t { + bit<2> meter_color; + bit<16> meter_index; +} + +struct multicast_metadata_t { + bit<1> ipv4_mcast_key_type; + bit<16> ipv4_mcast_key; + bit<1> ipv6_mcast_key_type; + bit<16> ipv6_mcast_key; + bit<1> outer_mcast_route_hit; + bit<2> outer_mcast_mode; + bit<1> mcast_route_hit; + bit<1> mcast_bridge_hit; + bit<1> ipv4_multicast_enabled; + bit<1> ipv6_multicast_enabled; + bit<1> igmp_snooping_enabled; + bit<1> mld_snooping_enabled; + bit<16> bd_mrpf_group; + bit<16> mcast_rpf_group; + bit<2> mcast_mode; + bit<16> multicast_route_mc_index; + bit<16> multicast_bridge_mc_index; + bit<1> inner_replica; + bit<1> replica; + bit<16> mcast_grp; +} + +struct nexthop_metadata_t { + bit<1> nexthop_type; +} + +struct qos_metadata_t { + bit<8> outer_dscp; + bit<3> marked_cos; + bit<8> marked_dscp; + bit<3> marked_exp; +} + +struct queueing_metadata_t { + bit<48> enq_timestamp; + bit<16> enq_qdepth; + bit<32> deq_timedelta; + bit<16> deq_qdepth; +} + +struct security_metadata_t { + bit<1> storm_control_color; + bit<1> ipsg_enabled; + bit<1> ipsg_check_fail; +} + +struct sflow_meta_t { + bit<16> sflow_session_id; +} + +struct tunnel_metadata_t { + bit<5> ingress_tunnel_type; + bit<24> tunnel_vni; + bit<1> mpls_enabled; + bit<20> mpls_label; + bit<3> mpls_exp; + bit<8> mpls_ttl; + bit<5> egress_tunnel_type; + bit<14> tunnel_index; + bit<9> tunnel_src_index; + bit<9> tunnel_smac_index; + bit<14> tunnel_dst_index; + bit<14> tunnel_dmac_index; + bit<24> vnid; + bit<1> tunnel_terminate; + bit<1> tunnel_if_check; + bit<4> egress_header_count; + bit<8> inner_ip_proto; +} + +header arp_rarp_t { + bit<16> hwType; + bit<16> protoType; + bit<8> hwAddrLen; + bit<8> protoAddrLen; + bit<16> opcode; +} + +header arp_rarp_ipv4_t { + bit<48> srcHwAddr; + bit<32> srcProtoAddr; + bit<48> dstHwAddr; + bit<32> dstProtoAddr; +} + +header bfd_t { + bit<3> version; + bit<5> diag; + bit<2> state; + bit<1> p; + bit<1> f; + bit<1> c; + bit<1> a; + bit<1> d; + bit<1> m; + bit<8> detectMult; + bit<8> len; + bit<32> myDiscriminator; + bit<32> yourDiscriminator; + bit<32> desiredMinTxInterval; + bit<32> requiredMinRxInterval; + bit<32> requiredMinEchoRxInterval; +} + +header eompls_t { + bit<4> zero; + bit<12> reserved; + bit<16> seqNo; +} + +@name("erspan_header_t3_t") header erspan_header_t3_t_0 { + bit<4> version; + bit<12> vlan; + bit<6> priority; + bit<10> span_id; + bit<32> timestamp; + bit<32> sgt_other; +} + +header ethernet_t { + bit<48> dstAddr; + bit<48> srcAddr; + bit<16> etherType; +} + +header fabric_header_t { + bit<3> packetType; + bit<2> headerVersion; + bit<2> packetVersion; + bit<1> pad1; + bit<3> fabricColor; + bit<5> fabricQos; + bit<8> dstDevice; + bit<16> dstPortOrGroup; +} + +header fabric_header_cpu_t { + bit<5> egressQueue; + bit<1> txBypass; + bit<2> reserved; + bit<16> ingressPort; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> reasonCode; +} + +header fabric_header_mirror_t { + bit<16> rewriteIndex; + bit<10> egressPort; + bit<5> egressQueue; + bit<1> pad; +} + +header fabric_header_multicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> ingressIfindex; + bit<16> ingressBd; + bit<16> mcastGrp; +} + +header fabric_header_sflow_t { + bit<16> sflow_session_id; +} + +header fabric_header_unicast_t { + bit<1> routed; + bit<1> outerRouted; + bit<1> tunnelTerminate; + bit<5> ingressTunnelType; + bit<16> nexthopIndex; +} + +header fabric_payload_header_t { + bit<16> etherType; +} + +header fcoe_header_t { + bit<4> version; + bit<4> type_; + bit<8> sof; + bit<32> rsvd1; + bit<32> ts_upper; + bit<32> ts_lower; + bit<32> size_; + bit<8> eof; + bit<24> rsvd2; +} + +header genv_t { + bit<2> ver; + bit<6> optLen; + bit<1> oam; + bit<1> critical; + bit<6> reserved; + bit<16> protoType; + bit<24> vni; + bit<8> reserved2; +} + +header gre_t { + bit<1> C; + bit<1> R; + bit<1> K; + bit<1> S; + bit<1> s; + bit<3> recurse; + bit<5> flags; + bit<3> ver; + bit<16> proto; +} + +header icmp_t { + bit<16> typeCode; + bit<16> hdrChecksum; +} + +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; + bit<32> srcAddr; + bit<32> dstAddr; +} + +header ipv6_t { + bit<4> version; + bit<8> trafficClass; + bit<20> flowLabel; + bit<16> payloadLen; + bit<8> nextHdr; + bit<8> hopLimit; + bit<128> srcAddr; + bit<128> dstAddr; +} + +header sctp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> verifTag; + bit<32> checksum; +} + +header tcp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<32> seqNo; + bit<32> ackNo; + bit<4> dataOffset; + bit<4> res; + bit<8> flags; + bit<16> window; + bit<16> checksum; + bit<16> urgentPtr; +} + +header udp_t { + bit<16> srcPort; + bit<16> dstPort; + bit<16> length_; + bit<16> checksum; +} + +header int_egress_port_id_header_t { + bit<1> bos; + bit<31> egress_port_id; +} + +header int_egress_port_tx_utilization_header_t { + bit<1> bos; + bit<31> egress_port_tx_utilization; +} + +header int_header_t { + bit<2> ver; + bit<2> rep; + bit<1> c; + bit<1> e; + bit<5> rsvd1; + bit<5> ins_cnt; + bit<8> max_hop_cnt; + bit<8> total_hop_cnt; + bit<4> instruction_mask_0003; + bit<4> instruction_mask_0407; + bit<4> instruction_mask_0811; + bit<4> instruction_mask_1215; + bit<16> rsvd2; +} + +header int_hop_latency_header_t { + bit<1> bos; + bit<31> hop_latency; +} + +header int_ingress_port_id_header_t { + bit<1> bos; + bit<15> ingress_port_id_1; + bit<16> ingress_port_id_0; +} + +header int_ingress_tstamp_header_t { + bit<1> bos; + bit<31> ingress_tstamp; +} + +header int_q_congestion_header_t { + bit<1> bos; + bit<31> q_congestion; +} + +header int_q_occupancy_header_t { + bit<1> bos; + bit<7> q_occupancy1; + bit<24> q_occupancy0; +} + +header int_switch_id_header_t { + bit<1> bos; + bit<31> switch_id; +} + +header lisp_t { + bit<8> flags; + bit<24> nonce; + bit<32> lsbsInstanceId; +} + +header llc_header_t { + bit<8> dsap; + bit<8> ssap; + bit<8> control_; +} + +header nsh_t { + bit<1> oam; + bit<1> context; + bit<6> flags; + bit<8> reserved; + bit<16> protoType; + bit<24> spath; + bit<8> sindex; +} + +header nsh_context_t { + bit<32> network_platform; + bit<32> network_shared; + bit<32> service_platform; + bit<32> service_shared; +} + +header nvgre_t { + bit<24> tni; + bit<8> flow_id; +} + +header roce_header_t { + bit<320> ib_grh; + bit<96> ib_bth; +} + +header roce_v2_header_t { + bit<96> ib_bth; +} + +header sflow_hdr_t { + bit<32> version; + bit<32> addrType; + bit<32> ipAddress; + bit<32> subAgentId; + bit<32> seqNumber; + bit<32> uptime; + bit<32> numSamples; +} + +header sflow_raw_hdr_record_t { + bit<20> enterprise; + bit<12> format; + bit<32> flowDataLength; + bit<32> headerProtocol; + bit<32> frameLength; + bit<32> bytesRemoved; + bit<32> headerSize; +} + +header sflow_sample_t { + bit<20> enterprise; + bit<12> format; + bit<32> sampleLength; + bit<32> seqNumer; + bit<8> srcIdType; + bit<24> srcIdIndex; + bit<32> samplingRate; + bit<32> samplePool; + bit<32> numDrops; + bit<32> inputIfindex; + bit<32> outputIfindex; + bit<32> numFlowRecords; +} + +header snap_header_t { + bit<24> oui; + bit<16> type_; +} + +header trill_t { + bit<2> version; + bit<2> reserved; + bit<1> multiDestination; + bit<5> optLength; + bit<6> hopCount; + bit<16> egressRbridge; + bit<16> ingressRbridge; +} + +header vntag_t { + bit<1> direction; + bit<1> pointer; + bit<14> destVif; + bit<1> looped; + bit<1> reserved; + bit<2> version; + bit<12> srcVif; +} + +header vxlan_t { + bit<8> flags; + bit<24> reserved; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_t { + bit<8> flags; + bit<16> reserved; + bit<8> next_proto; + bit<24> vni; + bit<8> reserved2; +} + +header vxlan_gpe_int_header_t { + bit<8> int_type; + bit<8> rsvd; + bit<8> len; + bit<8> next_proto; +} + +header int_value_t { + bit<1> bos; + bit<31> val; +} + +header mpls_t { + bit<20> label; + bit<3> exp; + bit<1> bos; + bit<8> ttl; +} + +header vlan_tag_t { + bit<3> pcp; + bit<1> cfi; + bit<12> vid; + bit<16> etherType; +} + +struct metadata { + @name(".acl_metadata") + acl_metadata_t acl_metadata; + @name(".egress_filter_metadata") + egress_filter_metadata_t egress_filter_metadata; + @name(".egress_metadata") + egress_metadata_t egress_metadata; + @name(".fabric_metadata") + fabric_metadata_t fabric_metadata; + @name(".global_config_metadata") + global_config_metadata_t global_config_metadata; + @name(".hash_metadata") + hash_metadata_t hash_metadata; + @name(".i2e_metadata") + i2e_metadata_t i2e_metadata; + @name(".ingress_metadata") + ingress_metadata_t ingress_metadata; + @name(".int_metadata") + int_metadata_t int_metadata; + @name(".int_metadata_i2e") + int_metadata_i2e_t int_metadata_i2e; + @name(".ipv4_metadata") + ipv4_metadata_t ipv4_metadata; + @name(".ipv6_metadata") + ipv6_metadata_t ipv6_metadata; + @name(".l2_metadata") + l2_metadata_t l2_metadata; + @name(".l3_metadata") + l3_metadata_t l3_metadata; + @name(".meter_metadata") + meter_metadata_t meter_metadata; + @name(".multicast_metadata") + multicast_metadata_t multicast_metadata; + @name(".nexthop_metadata") + nexthop_metadata_t nexthop_metadata; + @name(".qos_metadata") + qos_metadata_t qos_metadata; + @name(".security_metadata") + security_metadata_t security_metadata; + @name(".sflow_metadata") + sflow_meta_t sflow_metadata; + @name(".tunnel_metadata") + tunnel_metadata_t tunnel_metadata; +} + +struct headers { + @name(".arp_rarp") + arp_rarp_t arp_rarp; + @name(".arp_rarp_ipv4") + arp_rarp_ipv4_t arp_rarp_ipv4; + @name(".bfd") + bfd_t bfd; + @name(".eompls") + eompls_t eompls; + @name(".erspan_t3_header") + erspan_header_t3_t_0 erspan_t3_header; + @name(".ethernet") + ethernet_t ethernet; + @name(".fabric_header") + fabric_header_t fabric_header; + @name(".fabric_header_cpu") + fabric_header_cpu_t fabric_header_cpu; + @name(".fabric_header_mirror") + fabric_header_mirror_t fabric_header_mirror; + @name(".fabric_header_multicast") + fabric_header_multicast_t fabric_header_multicast; + @name(".fabric_header_sflow") + fabric_header_sflow_t fabric_header_sflow; + @name(".fabric_header_unicast") + fabric_header_unicast_t fabric_header_unicast; + @name(".fabric_payload_header") + fabric_payload_header_t fabric_payload_header; + @name(".fcoe") + fcoe_header_t fcoe; + @name(".genv") + genv_t genv; + @name(".gre") + gre_t gre; + @name(".icmp") + icmp_t icmp; + @name(".inner_ethernet") + ethernet_t inner_ethernet; + @name(".inner_icmp") + icmp_t inner_icmp; + @name(".inner_ipv4") + ipv4_t inner_ipv4; + @name(".inner_ipv6") + ipv6_t inner_ipv6; + @name(".inner_sctp") + sctp_t inner_sctp; + @name(".inner_tcp") + tcp_t inner_tcp; + @name(".inner_udp") + udp_t inner_udp; + @name(".int_egress_port_id_header") + int_egress_port_id_header_t int_egress_port_id_header; + @name(".int_egress_port_tx_utilization_header") + int_egress_port_tx_utilization_header_t int_egress_port_tx_utilization_header; + @name(".int_header") + int_header_t int_header; + @name(".int_hop_latency_header") + int_hop_latency_header_t int_hop_latency_header; + @name(".int_ingress_port_id_header") + int_ingress_port_id_header_t int_ingress_port_id_header; + @name(".int_ingress_tstamp_header") + int_ingress_tstamp_header_t int_ingress_tstamp_header; + @name(".int_q_congestion_header") + int_q_congestion_header_t int_q_congestion_header; + @name(".int_q_occupancy_header") + int_q_occupancy_header_t int_q_occupancy_header; + @name(".int_switch_id_header") + int_switch_id_header_t int_switch_id_header; + @name(".ipv4") + ipv4_t ipv4; + @name(".ipv6") + ipv6_t ipv6; + @name(".lisp") + lisp_t lisp; + @name(".llc_header") + llc_header_t llc_header; + @name(".nsh") + nsh_t nsh; + @name(".nsh_context") + nsh_context_t nsh_context; + @name(".nvgre") + nvgre_t nvgre; + @name(".outer_udp") + udp_t outer_udp; + @name(".roce") + roce_header_t roce; + @name(".roce_v2") + roce_v2_header_t roce_v2; + @name(".sctp") + sctp_t sctp; + @name(".sflow") + sflow_hdr_t sflow; + @name(".sflow_raw_hdr_record") + sflow_raw_hdr_record_t sflow_raw_hdr_record; + @name(".sflow_sample") + sflow_sample_t sflow_sample; + @name(".snap_header") + snap_header_t snap_header; + @name(".tcp") + tcp_t tcp; + @name(".trill") + trill_t trill; + @name(".udp") + udp_t udp; + @name(".vntag") + vntag_t vntag; + @name(".vxlan") + vxlan_t vxlan; + @name(".vxlan_gpe") + vxlan_gpe_t vxlan_gpe; + @name(".vxlan_gpe_int_header") + vxlan_gpe_int_header_t vxlan_gpe_int_header; + @name(".int_val") + int_value_t[24] int_val; + @name(".mpls") + mpls_t[3] mpls; + @name(".vlan_tag_") + vlan_tag_t[2] vlan_tag_; +} + +parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".parse_all_int_meta_value_heders") state parse_all_int_meta_value_heders { + packet.extract(hdr.int_switch_id_header); + packet.extract(hdr.int_ingress_port_id_header); + packet.extract(hdr.int_hop_latency_header); + packet.extract(hdr.int_q_occupancy_header); + packet.extract(hdr.int_ingress_tstamp_header); + packet.extract(hdr.int_egress_port_id_header); + packet.extract(hdr.int_q_congestion_header); + packet.extract(hdr.int_egress_port_tx_utilization_header); + transition parse_int_val; + } + @name(".parse_arp_rarp") state parse_arp_rarp { + packet.extract(hdr.arp_rarp); + transition select(hdr.arp_rarp.protoType) { + 16w0x800: parse_arp_rarp_ipv4; + default: accept; + } + } + @name(".parse_arp_rarp_ipv4") state parse_arp_rarp_ipv4 { + packet.extract(hdr.arp_rarp_ipv4); + transition parse_set_prio_med; + } + @name(".parse_bfd") state parse_bfd { + packet.extract(hdr.bfd); + transition parse_set_prio_max; + } + @name(".parse_eompls") state parse_eompls { + meta.tunnel_metadata.ingress_tunnel_type = 5w6; + transition parse_inner_ethernet; + } + @name(".parse_erspan_t3") state parse_erspan_t3 { + packet.extract(hdr.erspan_t3_header); + transition parse_inner_ethernet; + } + @name(".parse_ethernet") state parse_ethernet { + packet.extract(hdr.ethernet); + transition select(hdr.ethernet.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x9000: parse_fabric_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_header") state parse_fabric_header { + packet.extract(hdr.fabric_header); + transition select(hdr.fabric_header.packetType) { + 3w1: parse_fabric_header_unicast; + 3w2: parse_fabric_header_multicast; + 3w3: parse_fabric_header_mirror; + 3w5: parse_fabric_header_cpu; + default: accept; + } + } + @name(".parse_fabric_header_cpu") state parse_fabric_header_cpu { + packet.extract(hdr.fabric_header_cpu); + meta.ingress_metadata.bypass_lookups = (bit<16>)hdr.fabric_header_cpu.reasonCode; + transition select(hdr.fabric_header_cpu.reasonCode) { + 16w0x4: parse_fabric_sflow_header; + default: parse_fabric_payload_header; + } + } + @name(".parse_fabric_header_mirror") state parse_fabric_header_mirror { + packet.extract(hdr.fabric_header_mirror); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_multicast") state parse_fabric_header_multicast { + packet.extract(hdr.fabric_header_multicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_header_unicast") state parse_fabric_header_unicast { + packet.extract(hdr.fabric_header_unicast); + transition parse_fabric_payload_header; + } + @name(".parse_fabric_payload_header") state parse_fabric_payload_header { + packet.extract(hdr.fabric_payload_header); + transition select(hdr.fabric_payload_header.etherType) { + 16w0 &&& 16w0xfe00: parse_llc_header; + 16w0 &&& 16w0xfa00: parse_llc_header; + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_fabric_sflow_header") state parse_fabric_sflow_header { + packet.extract(hdr.fabric_header_sflow); + transition parse_fabric_payload_header; + } + @name(".parse_fcoe") state parse_fcoe { + packet.extract(hdr.fcoe); + transition accept; + } + @name(".parse_geneve") state parse_geneve { + packet.extract(hdr.genv); + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.genv.vni; + meta.tunnel_metadata.ingress_tunnel_type = 5w4; + transition select(hdr.genv.ver, hdr.genv.optLen, hdr.genv.protoType) { + (2w0x0, 6w0x0, 16w0x6558): parse_inner_ethernet; + (2w0x0, 6w0x0, 16w0x800): parse_inner_ipv4; + (2w0x0, 6w0x0, 16w0x86dd): parse_inner_ipv6; + default: accept; + } + } + @name(".parse_gpe_int_header") state parse_gpe_int_header { + packet.extract(hdr.vxlan_gpe_int_header); + meta.int_metadata.gpe_int_hdr_len = (bit<16>)hdr.vxlan_gpe_int_header.len; + transition parse_int_header; + } + @name(".parse_gre") state parse_gre { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x1, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x6558): parse_nvgre; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x86dd): parse_gre_ipv6; + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x22eb): parse_erspan_t3; + default: accept; + } + } + @name(".parse_gre_ipv4") state parse_gre_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv4; + } + @name(".parse_gre_ipv6") state parse_gre_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w2; + transition parse_inner_ipv6; + } + @name(".parse_gre_v6") state parse_gre_v6 { + packet.extract(hdr.gre); + transition select(hdr.gre.C, hdr.gre.R, hdr.gre.K, hdr.gre.S, hdr.gre.s, hdr.gre.recurse, hdr.gre.flags, hdr.gre.ver, hdr.gre.proto) { + (1w0x0, 1w0x0, 1w0x0, 1w0x0, 1w0x0, 3w0x0, 5w0x0, 3w0x0, 16w0x800): parse_gre_ipv4; + default: accept; + } + } + @name(".parse_icmp") state parse_icmp { + packet.extract(hdr.icmp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.icmp.typeCode; + transition select(hdr.icmp.typeCode) { + 16w0x8200 &&& 16w0xfe00: parse_set_prio_med; + 16w0x8400 &&& 16w0xfc00: parse_set_prio_med; + 16w0x8800 &&& 16w0xff00: parse_set_prio_med; + default: accept; + } + } + @name(".parse_inner_ethernet") state parse_inner_ethernet { + packet.extract(hdr.inner_ethernet); + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.inner_ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.inner_ethernet.dstAddr; + transition select(hdr.inner_ethernet.etherType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_inner_icmp") state parse_inner_icmp { + packet.extract(hdr.inner_icmp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_icmp.typeCode; + transition accept; + } + @name(".parse_inner_ipv4") state parse_inner_ipv4 { + packet.extract(hdr.inner_ipv4); + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.inner_ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.inner_ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.inner_ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.inner_ipv4.ttl; + transition select(hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ihl, hdr.inner_ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_inner_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_inner_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_ipv6") state parse_inner_ipv6 { + packet.extract(hdr.inner_ipv6); + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.inner_ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.inner_ipv6.hopLimit; + transition select(hdr.inner_ipv6.nextHdr) { + 8w58: parse_inner_icmp; + 8w6: parse_inner_tcp; + 8w17: parse_inner_udp; + default: accept; + } + } + @name(".parse_inner_sctp") state parse_inner_sctp { + packet.extract(hdr.inner_sctp); + transition accept; + } + @name(".parse_inner_tcp") state parse_inner_tcp { + packet.extract(hdr.inner_tcp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_tcp.srcPort; + meta.l3_metadata.lkp_l4_dport = (bit<16>)hdr.inner_tcp.dstPort; + transition accept; + } + @name(".parse_inner_udp") state parse_inner_udp { + packet.extract(hdr.inner_udp); + meta.l3_metadata.lkp_l4_sport = (bit<16>)hdr.inner_udp.srcPort; + meta.l3_metadata.lkp_l4_dport = (bit<16>)hdr.inner_udp.dstPort; + transition accept; + } + @name(".parse_int_header") state parse_int_header { + packet.extract(hdr.int_header); + meta.int_metadata.instruction_cnt = (bit<16>)hdr.int_header.ins_cnt; + transition select(hdr.int_header.rsvd1, hdr.int_header.total_hop_cnt) { + (5w0x0, 8w0x0): accept; + (5w0x0 &&& 5w0xf, 8w0x0 &&& 8w0x0): parse_int_val; + default: accept; + default: parse_all_int_meta_value_heders; + } + } + @name(".parse_int_val") state parse_int_val { + packet.extract(hdr.int_val.next); + transition select(hdr.int_val.last.bos) { + 1w0: parse_int_val; + 1w1: parse_inner_ethernet; + } + } + @name(".parse_ipv4") state parse_ipv4 { + packet.extract(hdr.ipv4); + transition select(hdr.ipv4.fragOffset, hdr.ipv4.ihl, hdr.ipv4.protocol) { + (13w0x0, 4w0x5, 8w0x1): parse_icmp; + (13w0x0, 4w0x5, 8w0x6): parse_tcp; + (13w0x0, 4w0x5, 8w0x11): parse_udp; + (13w0x0, 4w0x5, 8w0x2f): parse_gre; + (13w0x0, 4w0x5, 8w0x4): parse_ipv4_in_ip; + (13w0x0, 4w0x5, 8w0x29): parse_ipv6_in_ip; + (13w0, 4w0, 8w2): parse_set_prio_med; + (13w0, 4w0, 8w88): parse_set_prio_med; + (13w0, 4w0, 8w89): parse_set_prio_med; + (13w0, 4w0, 8w103): parse_set_prio_med; + (13w0, 4w0, 8w112): parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv4_in_ip") state parse_ipv4_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv4; + } + @name(".parse_ipv6") state parse_ipv6 { + packet.extract(hdr.ipv6); + transition select(hdr.ipv6.nextHdr) { + 8w58: parse_icmp; + 8w6: parse_tcp; + 8w4: parse_ipv4_in_ip; + 8w17: parse_udp; + 8w47: parse_gre; + 8w41: parse_ipv6_in_ip; + 8w88: parse_set_prio_med; + 8w89: parse_set_prio_med; + 8w103: parse_set_prio_med; + 8w112: parse_set_prio_med; + default: accept; + } + } + @name(".parse_ipv6_in_ip") state parse_ipv6_in_ip { + meta.tunnel_metadata.ingress_tunnel_type = 5w3; + transition parse_inner_ipv6; + } + @name(".parse_lisp") state parse_lisp { + packet.extract(hdr.lisp); + transition select((packet.lookahead>())[3:0]) { + 4w0x4: parse_inner_ipv4; + 4w0x6: parse_inner_ipv6; + default: accept; + } + } + @name(".parse_llc_header") state parse_llc_header { + packet.extract(hdr.llc_header); + transition select(hdr.llc_header.dsap, hdr.llc_header.ssap) { + (8w0xaa, 8w0xaa): parse_snap_header; + (8w0xfe, 8w0xfe): parse_set_prio_med; + default: accept; + } + } + @name(".parse_mpls") state parse_mpls { + packet.extract(hdr.mpls.next); + transition select(hdr.mpls.last.bos) { + 1w0: parse_mpls; + 1w1: parse_mpls_bos; + default: accept; + } + } + @name(".parse_mpls_bos") state parse_mpls_bos { + transition select((packet.lookahead>())[3:0]) { + 4w0x4: parse_mpls_inner_ipv4; + 4w0x6: parse_mpls_inner_ipv6; + default: parse_eompls; + } + } + @name(".parse_mpls_inner_ipv4") state parse_mpls_inner_ipv4 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv4; + } + @name(".parse_mpls_inner_ipv6") state parse_mpls_inner_ipv6 { + meta.tunnel_metadata.ingress_tunnel_type = 5w9; + transition parse_inner_ipv6; + } + @name(".parse_nsh") state parse_nsh { + packet.extract(hdr.nsh); + packet.extract(hdr.nsh_context); + transition select(hdr.nsh.protoType) { + 16w0x800: parse_inner_ipv4; + 16w0x86dd: parse_inner_ipv6; + 16w0x6558: parse_inner_ethernet; + default: accept; + } + } + @name(".parse_nvgre") state parse_nvgre { + packet.extract(hdr.nvgre); + meta.tunnel_metadata.ingress_tunnel_type = 5w5; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.nvgre.tni; + transition parse_inner_ethernet; + } + @name(".parse_pw") state parse_pw { + transition accept; + } + @name(".parse_qinq") state parse_qinq { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8100: parse_qinq_vlan; + default: accept; + } + } + @name(".parse_qinq_vlan") state parse_qinq_vlan { + packet.extract(hdr.vlan_tag_[1]); + transition select(hdr.vlan_tag_[1].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_roce") state parse_roce { + packet.extract(hdr.roce); + transition accept; + } + @name(".parse_roce_v2") state parse_roce_v2 { + packet.extract(hdr.roce_v2); + transition accept; + } + @name(".parse_sctp") state parse_sctp { + packet.extract(hdr.sctp); + transition accept; + } + @name(".parse_set_prio_high") state parse_set_prio_high { + standard_metadata.priority = 3w5; + transition accept; + } + @name(".parse_set_prio_max") state parse_set_prio_max { + standard_metadata.priority = 3w7; + transition accept; + } + @name(".parse_set_prio_med") state parse_set_prio_med { + standard_metadata.priority = 3w3; + transition accept; + } + @name(".parse_sflow") state parse_sflow { + packet.extract(hdr.sflow); + transition accept; + } + @name(".parse_snap_header") state parse_snap_header { + packet.extract(hdr.snap_header); + transition select(hdr.snap_header.type_) { + 16w0x8100: parse_vlan; + 16w0x9100: parse_qinq; + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_tcp") state parse_tcp { + packet.extract(hdr.tcp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.tcp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.tcp.dstPort; + transition select(hdr.tcp.dstPort) { + 16w179: parse_set_prio_med; + 16w639: parse_set_prio_med; + default: accept; + } + } + @name(".parse_trill") state parse_trill { + packet.extract(hdr.trill); + transition parse_inner_ethernet; + } + @name(".parse_udp") state parse_udp { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w4789: parse_vxlan; + 16w6081: parse_geneve; + 16w4790: parse_vxlan_gpe; + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + 16w6343: parse_sflow; + default: accept; + } + } + @name(".parse_udp_v6") state parse_udp_v6 { + packet.extract(hdr.udp); + meta.l3_metadata.lkp_outer_l4_sport = (bit<16>)hdr.udp.srcPort; + meta.l3_metadata.lkp_outer_l4_dport = (bit<16>)hdr.udp.dstPort; + transition select(hdr.udp.dstPort) { + 16w67: parse_set_prio_med; + 16w68: parse_set_prio_med; + 16w546: parse_set_prio_med; + 16w547: parse_set_prio_med; + 16w520: parse_set_prio_med; + 16w521: parse_set_prio_med; + 16w1985: parse_set_prio_med; + default: accept; + } + } + @name(".parse_vlan") state parse_vlan { + packet.extract(hdr.vlan_tag_[0]); + transition select(hdr.vlan_tag_[0].etherType) { + 16w0x8847: parse_mpls; + 16w0x800: parse_ipv4; + 16w0x86dd: parse_ipv6; + 16w0x806: parse_arp_rarp; + 16w0x88cc: parse_set_prio_high; + 16w0x8809: parse_set_prio_high; + default: accept; + } + } + @name(".parse_vntag") state parse_vntag { + packet.extract(hdr.vntag); + transition parse_inner_ethernet; + } + @name(".parse_vpls") state parse_vpls { + transition accept; + } + @name(".parse_vxlan") state parse_vxlan { + packet.extract(hdr.vxlan); + meta.tunnel_metadata.ingress_tunnel_type = 5w1; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.vxlan.vni; + transition parse_inner_ethernet; + } + @name(".parse_vxlan_gpe") state parse_vxlan_gpe { + packet.extract(hdr.vxlan_gpe); + meta.tunnel_metadata.ingress_tunnel_type = 5w12; + meta.tunnel_metadata.tunnel_vni = (bit<24>)hdr.vxlan_gpe.vni; + transition select(hdr.vxlan_gpe.flags, hdr.vxlan_gpe.next_proto) { + (8w0x8 &&& 8w0x8, 8w0x5 &&& 8w0xff): parse_gpe_int_header; + default: parse_inner_ethernet; + } + } + @name(".start") state start { + transition parse_ethernet; + } +} + +@name(".bd_action_profile") action_profile(32w1024) bd_action_profile; +@name(".ecmp_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w10) ecmp_action_profile; +@name(".fabric_lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) fabric_lag_action_profile; +@name(".lag_action_profile") @mode("fair") action_selector(HashAlgorithm.identity, 32w1024, 32w8) lag_action_profile; +control process_replication(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_replication.nop") action nop() { + } + @name(".process_replication.set_replica_copy_bridged") action set_replica_copy_bridged() { + meta.egress_metadata.routed = 1w0; + } + @name(".process_replication.outer_replica_from_rid") action outer_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w0; + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.outer_routed; + meta.egress_metadata.same_bd_check = (bit<16>)bd ^ (bit<16>)meta.ingress_metadata.outer_bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".process_replication.inner_replica_from_rid") action inner_replica_from_rid(bit<16> bd, bit<14> tunnel_index, bit<5> tunnel_type, bit<4> header_count) { + meta.egress_metadata.bd = bd; + meta.multicast_metadata.replica = 1w1; + meta.multicast_metadata.inner_replica = 1w1; + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.same_bd_check = (bit<16>)bd ^ (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + meta.tunnel_metadata.egress_header_count = header_count; + } + @name(".replica_type") table replica_type { + actions = { + nop; + set_replica_copy_bridged; + } + key = { + meta.multicast_metadata.replica : exact; + meta.egress_metadata.same_bd_check: ternary; + } + size = 512; + } + @name(".rid") table rid { + actions = { + nop; + outer_replica_from_rid; + inner_replica_from_rid; + } + key = { + standard_metadata.egress_rid: exact; + } + size = 1024; + } + apply { + if (standard_metadata.egress_rid != 16w0) { + rid.apply(); + replica_type.apply(); + } + } +} + +control process_vlan_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_decap.nop") action nop() { + } + @name(".process_vlan_decap.remove_vlan_single_tagged") action remove_vlan_single_tagged() { + hdr.ethernet.etherType = (bit<16>)hdr.vlan_tag_[0].etherType; + hdr.vlan_tag_[0].setInvalid(); + } + @name(".process_vlan_decap.remove_vlan_double_tagged") action remove_vlan_double_tagged() { + hdr.ethernet.etherType = (bit<16>)hdr.vlan_tag_[1].etherType; + hdr.vlan_tag_[0].setInvalid(); + hdr.vlan_tag_[1].setInvalid(); + } + @name(".vlan_decap") table vlan_decap { + actions = { + nop; + remove_vlan_single_tagged; + remove_vlan_double_tagged; + } + key = { + hdr.vlan_tag_[0].isValid(): exact; + hdr.vlan_tag_[1].isValid(): exact; + } + size = 1024; + } + apply { + vlan_decap.apply(); + } +} + +control process_tunnel_decap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_decap.decap_inner_udp") action decap_inner_udp() { + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_tcp") action decap_inner_tcp() { + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_icmp") action decap_inner_icmp() { + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_inner_unknown") action decap_inner_unknown() { + hdr.udp.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv4") action decap_vxlan_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.vxlan.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_ipv6") action decap_vxlan_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_vxlan_inner_non_ip") action decap_vxlan_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.vxlan.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv4") action decap_genv_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.genv.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_ipv6") action decap_genv_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_genv_inner_non_ip") action decap_genv_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.genv.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv4") action decap_nvgre_inner_ipv4() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_ipv6") action decap_nvgre_inner_ipv6() { + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_nvgre_inner_non_ip") action decap_nvgre_inner_non_ip() { + hdr.ethernet = hdr.inner_ethernet; + hdr.nvgre.setInvalid(); + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_gre_inner_ipv4") action decap_gre_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.gre.setInvalid(); + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_gre_inner_ipv6") action decap_gre_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_gre_inner_non_ip") action decap_gre_inner_non_ip() { + hdr.ethernet.etherType = (bit<16>)hdr.gre.proto; + hdr.gre.setInvalid(); + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_ip_inner_ipv4") action decap_ip_inner_ipv4() { + hdr.ipv4 = hdr.inner_ipv4; + hdr.ipv6.setInvalid(); + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_ip_inner_ipv6") action decap_ip_inner_ipv6() { + hdr.ipv6 = hdr.inner_ipv6; + hdr.ipv4.setInvalid(); + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop1") action decap_mpls_inner_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop1") action decap_mpls_inner_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1") action decap_mpls_inner_ethernet_ipv4_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1") action decap_mpls_inner_ethernet_ipv6_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1") action decap_mpls_inner_ethernet_non_ip_pop1() { + hdr.mpls[0].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop2") action decap_mpls_inner_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop2") action decap_mpls_inner_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2") action decap_mpls_inner_ethernet_ipv4_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2") action decap_mpls_inner_ethernet_ipv6_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2") action decap_mpls_inner_ethernet_non_ip_pop2() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv4_pop3") action decap_mpls_inner_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_decap.decap_mpls_inner_ipv6_pop3") action decap_mpls_inner_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ipv6.setInvalid(); + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3") action decap_mpls_inner_ethernet_ipv4_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv4.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3") action decap_mpls_inner_ethernet_ipv6_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.ipv6 = hdr.inner_ipv6; + hdr.inner_ethernet.setInvalid(); + hdr.inner_ipv6.setInvalid(); + } + @name(".process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3") action decap_mpls_inner_ethernet_non_ip_pop3() { + hdr.mpls[0].setInvalid(); + hdr.mpls[1].setInvalid(); + hdr.mpls[2].setInvalid(); + hdr.ethernet = hdr.inner_ethernet; + hdr.inner_ethernet.setInvalid(); + } + @name(".tunnel_decap_process_inner") table tunnel_decap_process_inner { + actions = { + decap_inner_udp; + decap_inner_tcp; + decap_inner_icmp; + decap_inner_unknown; + } + key = { + hdr.inner_tcp.isValid() : exact; + hdr.inner_udp.isValid() : exact; + hdr.inner_icmp.isValid(): exact; + } + size = 1024; + } + @name(".tunnel_decap_process_outer") table tunnel_decap_process_outer { + actions = { + decap_vxlan_inner_ipv4; + decap_vxlan_inner_ipv6; + decap_vxlan_inner_non_ip; + decap_genv_inner_ipv4; + decap_genv_inner_ipv6; + decap_genv_inner_non_ip; + decap_nvgre_inner_ipv4; + decap_nvgre_inner_ipv6; + decap_nvgre_inner_non_ip; + decap_gre_inner_ipv4; + decap_gre_inner_ipv6; + decap_gre_inner_non_ip; + decap_ip_inner_ipv4; + decap_ip_inner_ipv6; + decap_mpls_inner_ipv4_pop1; + decap_mpls_inner_ipv6_pop1; + decap_mpls_inner_ethernet_ipv4_pop1; + decap_mpls_inner_ethernet_ipv6_pop1; + decap_mpls_inner_ethernet_non_ip_pop1; + decap_mpls_inner_ipv4_pop2; + decap_mpls_inner_ipv6_pop2; + decap_mpls_inner_ethernet_ipv4_pop2; + decap_mpls_inner_ethernet_ipv6_pop2; + decap_mpls_inner_ethernet_non_ip_pop2; + decap_mpls_inner_ipv4_pop3; + decap_mpls_inner_ipv6_pop3; + decap_mpls_inner_ethernet_ipv4_pop3; + decap_mpls_inner_ethernet_ipv6_pop3; + decap_mpls_inner_ethernet_non_ip_pop3; + } + key = { + meta.tunnel_metadata.ingress_tunnel_type: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w1) { + if (meta.multicast_metadata.inner_replica == 1w1 || meta.multicast_metadata.replica == 1w0) { + tunnel_decap_process_outer.apply(); + tunnel_decap_process_inner.apply(); + } + } + } +} + +control process_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_rewrite.nop") action nop() { + } + @name(".process_rewrite.set_l2_rewrite") action set_l2_rewrite() { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = (bit<16>)meta.ingress_metadata.bd; + } + @name(".process_rewrite.set_l2_rewrite_with_tunnel") action set_l2_rewrite_with_tunnel(bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w0; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.egress_metadata.outer_bd = (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_l3_rewrite") action set_l3_rewrite(bit<16> bd, bit<8> mtu_index, bit<48> dmac) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = (bit<16>)bd; + meta.l3_metadata.mtu_index = mtu_index; + } + @name(".process_rewrite.set_l3_rewrite_with_tunnel") action set_l3_rewrite_with_tunnel(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<5> tunnel_type) { + meta.egress_metadata.routed = 1w1; + meta.egress_metadata.mac_da = dmac; + meta.egress_metadata.bd = bd; + meta.egress_metadata.outer_bd = (bit<16>)bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_tunnel_type = tunnel_type; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l2") action set_mpls_swap_push_rewrite_l2(bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + hdr.mpls[0].label = label; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_push_rewrite_l2") action set_mpls_push_rewrite_l2(bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = (bit<16>)meta.ingress_metadata.bd; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w13; + } + @name(".process_rewrite.set_mpls_swap_push_rewrite_l3") action set_mpls_swap_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<20> label, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + hdr.mpls[0].label = label; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.set_mpls_push_rewrite_l3") action set_mpls_push_rewrite_l3(bit<16> bd, bit<48> dmac, bit<14> tunnel_index, bit<4> header_count) { + meta.egress_metadata.routed = (bit<1>)meta.l3_metadata.routed; + meta.egress_metadata.bd = bd; + meta.egress_metadata.mac_da = dmac; + meta.tunnel_metadata.tunnel_index = tunnel_index; + meta.tunnel_metadata.egress_header_count = header_count; + meta.tunnel_metadata.egress_tunnel_type = 5w14; + } + @name(".process_rewrite.rewrite_ipv4_multicast") action rewrite_ipv4_multicast() { + hdr.ethernet.dstAddr[22:0] = ((bit<48>)hdr.ipv4.dstAddr)[22:0]; + } + @name(".process_rewrite.rewrite_ipv6_multicast") action rewrite_ipv6_multicast() { + } + @name(".rewrite") table rewrite { + actions = { + nop; + set_l2_rewrite; + set_l2_rewrite_with_tunnel; + set_l3_rewrite; + set_l3_rewrite_with_tunnel; + set_mpls_swap_push_rewrite_l2; + set_mpls_push_rewrite_l2; + set_mpls_swap_push_rewrite_l3; + set_mpls_push_rewrite_l3; + } + key = { + meta.l3_metadata.nexthop_index: exact; + } + size = 1024; + } + @name(".rewrite_multicast") table rewrite_multicast { + actions = { + nop; + rewrite_ipv4_multicast; + rewrite_ipv6_multicast; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + } + apply { + if (meta.egress_metadata.routed == 1w0 || meta.l3_metadata.nexthop_index != 16w0) { + rewrite.apply(); + } else { + rewrite_multicast.apply(); + } + } +} + +control process_egress_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_bd.nop") action nop() { + } + @name(".process_egress_bd.set_egress_bd_properties") action set_egress_bd_properties(bit<9> smac_idx) { + meta.egress_metadata.smac_idx = smac_idx; + } + @name(".egress_bd_map") table egress_bd_map { + actions = { + nop; + set_egress_bd_properties; + } + key = { + meta.egress_metadata.bd: exact; + } + size = 1024; + } + apply { + egress_bd_map.apply(); + } +} + +control process_mac_rewrite(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_rewrite.nop") action nop() { + } + @name(".process_mac_rewrite.ipv4_unicast_rewrite") action ipv4_unicast_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1; + } + @name(".process_mac_rewrite.ipv4_multicast_rewrite") action ipv4_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x1005e000000; + hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1; + } + @name(".process_mac_rewrite.ipv6_unicast_rewrite") action ipv6_unicast_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit - 8w1; + } + @name(".process_mac_rewrite.ipv6_multicast_rewrite") action ipv6_multicast_rewrite() { + hdr.ethernet.dstAddr = hdr.ethernet.dstAddr | 48w0x333300000000; + hdr.ipv6.hopLimit = hdr.ipv6.hopLimit - 8w1; + } + @name(".process_mac_rewrite.mpls_rewrite") action mpls_rewrite() { + hdr.ethernet.dstAddr = (bit<48>)meta.egress_metadata.mac_da; + hdr.mpls[0].ttl = hdr.mpls[0].ttl - 8w1; + } + @name(".process_mac_rewrite.rewrite_smac") action rewrite_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".l3_rewrite") table l3_rewrite { + actions = { + nop; + ipv4_unicast_rewrite; + ipv4_multicast_rewrite; + ipv6_unicast_rewrite; + ipv6_multicast_rewrite; + mpls_rewrite; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + hdr.mpls[0].isValid() : exact; + hdr.ipv4.dstAddr[31:28] : ternary @name("ipv4.dstAddr"); + hdr.ipv6.dstAddr[127:120]: ternary @name("ipv6.dstAddr"); + } + } + @name(".smac_rewrite") table smac_rewrite { + actions = { + rewrite_smac; + } + key = { + meta.egress_metadata.smac_idx: exact; + } + size = 512; + } + apply { + if (meta.egress_metadata.routed == 1w1) { + l3_rewrite.apply(); + smac_rewrite.apply(); + } + } +} + +control process_mtu(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mtu.mtu_miss") action mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_mtu.ipv4_mtu_check") action ipv4_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)hdr.ipv4.totalLen; + } + @name(".process_mtu.ipv6_mtu_check") action ipv6_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)hdr.ipv6.payloadLen; + } + @name(".mtu") table mtu { + actions = { + mtu_miss; + ipv4_mtu_check; + ipv6_mtu_check; + } + key = { + meta.l3_metadata.mtu_index: exact; + hdr.ipv4.isValid() : exact; + hdr.ipv6.isValid() : exact; + } + size = 1024; + } + apply { + mtu.apply(); + } +} + +control process_int_insertion(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_insertion.int_set_header_0_bos") action int_set_header_0_bos() { + hdr.int_switch_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_1_bos") action int_set_header_1_bos() { + hdr.int_ingress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_2_bos") action int_set_header_2_bos() { + hdr.int_hop_latency_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_3_bos") action int_set_header_3_bos() { + hdr.int_q_occupancy_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_4_bos") action int_set_header_4_bos() { + hdr.int_ingress_tstamp_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_5_bos") action int_set_header_5_bos() { + hdr.int_egress_port_id_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_6_bos") action int_set_header_6_bos() { + hdr.int_q_congestion_header.bos = 1w1; + } + @name(".process_int_insertion.int_set_header_7_bos") action int_set_header_7_bos() { + hdr.int_egress_port_tx_utilization_header.bos = 1w1; + } + @name(".process_int_insertion.nop") action nop() { + } + @name(".process_int_insertion.int_transit") action int_transit(bit<32> switch_id) { + meta.int_metadata.insert_cnt = (bit<8>)hdr.int_header.max_hop_cnt - (bit<8>)hdr.int_header.total_hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = (bit<16>)(meta.int_metadata.instruction_cnt << 2); + meta.int_metadata.gpe_int_hdr_len8 = (bit<8>)hdr.int_header.ins_cnt; + } + @name(".process_int_insertion.int_src") action int_src(bit<32> switch_id, bit<8> hop_cnt, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407, bit<16> ins_byte_cnt, bit<8> total_words) { + meta.int_metadata.insert_cnt = hop_cnt; + meta.int_metadata.switch_id = switch_id; + meta.int_metadata.insert_byte_cnt = ins_byte_cnt; + meta.int_metadata.gpe_int_hdr_len8 = total_words; + hdr.int_header.setValid(); + hdr.int_header.ver = 2w0; + hdr.int_header.rep = 2w0; + hdr.int_header.c = 1w0; + hdr.int_header.e = 1w0; + hdr.int_header.rsvd1 = 5w0; + hdr.int_header.ins_cnt = ins_cnt; + hdr.int_header.max_hop_cnt = (bit<8>)hop_cnt; + hdr.int_header.total_hop_cnt = 8w0; + hdr.int_header.instruction_mask_0003 = ins_mask0003; + hdr.int_header.instruction_mask_0407 = ins_mask0407; + hdr.int_header.instruction_mask_0811 = 4w0; + hdr.int_header.instruction_mask_1215 = 4w0; + hdr.int_header.rsvd2 = 16w0; + } + @name(".process_int_insertion.int_reset") action int_reset() { + meta.int_metadata.switch_id = 32w0; + meta.int_metadata.insert_byte_cnt = 16w0; + meta.int_metadata.insert_cnt = 8w0; + meta.int_metadata.gpe_int_hdr_len8 = 8w0; + meta.int_metadata.gpe_int_hdr_len = 16w0; + meta.int_metadata.instruction_cnt = 16w0; + } + @name(".process_int_insertion.int_set_header_0003_i0") action int_set_header_0003_i0() { + } + @name(".process_int_insertion.int_set_header_3") action int_set_header_3() { + hdr.int_q_occupancy_header.setValid(); + hdr.int_q_occupancy_header.q_occupancy1 = 7w0; + hdr.int_q_occupancy_header.q_occupancy0 = (bit<24>)standard_metadata.enq_qdepth; + } + @name(".process_int_insertion.int_set_header_0003_i1") action int_set_header_0003_i1() { + int_set_header_3(); + } + @name(".process_int_insertion.int_set_header_2") action int_set_header_2() { + hdr.int_hop_latency_header.setValid(); + hdr.int_hop_latency_header.hop_latency = (bit<31>)standard_metadata.deq_timedelta; + } + @name(".process_int_insertion.int_set_header_0003_i2") action int_set_header_0003_i2() { + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_0003_i3") action int_set_header_0003_i3() { + int_set_header_3(); + int_set_header_2(); + } + @name(".process_int_insertion.int_set_header_1") action int_set_header_1() { + hdr.int_ingress_port_id_header.setValid(); + hdr.int_ingress_port_id_header.ingress_port_id_1 = 15w0; + hdr.int_ingress_port_id_header.ingress_port_id_0 = (bit<16>)meta.ingress_metadata.ifindex; + } + @name(".process_int_insertion.int_set_header_0003_i4") action int_set_header_0003_i4() { + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i5") action int_set_header_0003_i5() { + int_set_header_3(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i6") action int_set_header_0003_i6() { + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0003_i7") action int_set_header_0003_i7() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + } + @name(".process_int_insertion.int_set_header_0") action int_set_header_0() { + hdr.int_switch_id_header.setValid(); + hdr.int_switch_id_header.switch_id = (bit<31>)meta.int_metadata.switch_id; + } + @name(".process_int_insertion.int_set_header_0003_i8") action int_set_header_0003_i8() { + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i9") action int_set_header_0003_i9() { + int_set_header_3(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i10") action int_set_header_0003_i10() { + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i11") action int_set_header_0003_i11() { + int_set_header_3(); + int_set_header_2(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i12") action int_set_header_0003_i12() { + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i13") action int_set_header_0003_i13() { + int_set_header_3(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i14") action int_set_header_0003_i14() { + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0003_i15") action int_set_header_0003_i15() { + int_set_header_3(); + int_set_header_2(); + int_set_header_1(); + int_set_header_0(); + } + @name(".process_int_insertion.int_set_header_0407_i0") action int_set_header_0407_i0() { + } + @name(".process_int_insertion.int_set_header_7") action int_set_header_7() { + hdr.int_egress_port_tx_utilization_header.setValid(); + hdr.int_egress_port_tx_utilization_header.egress_port_tx_utilization = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i1") action int_set_header_0407_i1() { + int_set_header_7(); + } + @name(".process_int_insertion.int_set_header_6") action int_set_header_6() { + hdr.int_q_congestion_header.setValid(); + hdr.int_q_congestion_header.q_congestion = 31w0x7fffffff; + } + @name(".process_int_insertion.int_set_header_0407_i2") action int_set_header_0407_i2() { + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_0407_i3") action int_set_header_0407_i3() { + int_set_header_7(); + int_set_header_6(); + } + @name(".process_int_insertion.int_set_header_5") action int_set_header_5() { + hdr.int_egress_port_id_header.setValid(); + hdr.int_egress_port_id_header.egress_port_id = (bit<31>)standard_metadata.egress_port; + } + @name(".process_int_insertion.int_set_header_0407_i4") action int_set_header_0407_i4() { + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i5") action int_set_header_0407_i5() { + int_set_header_7(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i6") action int_set_header_0407_i6() { + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_0407_i7") action int_set_header_0407_i7() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + } + @name(".process_int_insertion.int_set_header_4") action int_set_header_4() { + hdr.int_ingress_tstamp_header.setValid(); + hdr.int_ingress_tstamp_header.ingress_tstamp = (bit<31>)meta.i2e_metadata.ingress_tstamp; + } + @name(".process_int_insertion.int_set_header_0407_i8") action int_set_header_0407_i8() { + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i9") action int_set_header_0407_i9() { + int_set_header_7(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i10") action int_set_header_0407_i10() { + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i11") action int_set_header_0407_i11() { + int_set_header_7(); + int_set_header_6(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i12") action int_set_header_0407_i12() { + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i13") action int_set_header_0407_i13() { + int_set_header_7(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i14") action int_set_header_0407_i14() { + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_header_0407_i15") action int_set_header_0407_i15() { + int_set_header_7(); + int_set_header_6(); + int_set_header_5(); + int_set_header_4(); + } + @name(".process_int_insertion.int_set_e_bit") action int_set_e_bit() { + hdr.int_header.e = 1w1; + } + @name(".process_int_insertion.int_update_total_hop_cnt") action int_update_total_hop_cnt() { + hdr.int_header.total_hop_cnt = hdr.int_header.total_hop_cnt + 8w1; + } + @name(".int_bos") table int_bos { + actions = { + int_set_header_0_bos; + int_set_header_1_bos; + int_set_header_2_bos; + int_set_header_3_bos; + int_set_header_4_bos; + int_set_header_5_bos; + int_set_header_6_bos; + int_set_header_7_bos; + nop; + } + key = { + hdr.int_header.total_hop_cnt : ternary; + hdr.int_header.instruction_mask_0003: ternary; + hdr.int_header.instruction_mask_0407: ternary; + hdr.int_header.instruction_mask_0811: ternary; + hdr.int_header.instruction_mask_1215: ternary; + } + size = 17; + } + @name(".int_insert") table int_insert { + actions = { + int_transit; + int_src; + int_reset; + } + key = { + meta.int_metadata_i2e.source: ternary; + meta.int_metadata_i2e.sink : ternary; + hdr.int_header.isValid() : exact; + } + size = 3; + } + @name(".int_inst_0003") table int_inst_0003 { + actions = { + int_set_header_0003_i0; + int_set_header_0003_i1; + int_set_header_0003_i2; + int_set_header_0003_i3; + int_set_header_0003_i4; + int_set_header_0003_i5; + int_set_header_0003_i6; + int_set_header_0003_i7; + int_set_header_0003_i8; + int_set_header_0003_i9; + int_set_header_0003_i10; + int_set_header_0003_i11; + int_set_header_0003_i12; + int_set_header_0003_i13; + int_set_header_0003_i14; + int_set_header_0003_i15; + } + key = { + hdr.int_header.instruction_mask_0003: exact; + } + size = 17; + } + @name(".int_inst_0407") table int_inst_0407 { + actions = { + int_set_header_0407_i0; + int_set_header_0407_i1; + int_set_header_0407_i2; + int_set_header_0407_i3; + int_set_header_0407_i4; + int_set_header_0407_i5; + int_set_header_0407_i6; + int_set_header_0407_i7; + int_set_header_0407_i8; + int_set_header_0407_i9; + int_set_header_0407_i10; + int_set_header_0407_i11; + int_set_header_0407_i12; + int_set_header_0407_i13; + int_set_header_0407_i14; + int_set_header_0407_i15; + nop; + } + key = { + hdr.int_header.instruction_mask_0407: exact; + } + size = 17; + } + @name(".int_inst_0811") table int_inst_0811 { + actions = { + nop; + } + key = { + hdr.int_header.instruction_mask_0811: exact; + } + size = 16; + } + @name(".int_inst_1215") table int_inst_1215 { + actions = { + nop; + } + key = { + hdr.int_header.instruction_mask_1215: exact; + } + size = 17; + } + @name(".int_meta_header_update") table int_meta_header_update { + actions = { + int_set_e_bit; + int_update_total_hop_cnt; + } + key = { + meta.int_metadata.insert_cnt: ternary; + } + size = 2; + } + apply { + switch (int_insert.apply().action_run) { + int_transit: { + if (meta.int_metadata.insert_cnt != 8w0) { + int_inst_0003.apply(); + int_inst_0407.apply(); + int_inst_0811.apply(); + int_inst_1215.apply(); + int_bos.apply(); + } + int_meta_header_update.apply(); + } + } + } +} + +control process_egress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress_bd_stats") @min_width(32) direct_counter(CounterType.packets_and_bytes) egress_bd_stats; + @name(".process_egress_bd_stats.nop") action nop() { + } + @name(".process_egress_bd_stats.nop_0") action nop_0() { + egress_bd_stats.count(); + } + @name(".egress_bd_stats") table egress_bd_stats_0 { + actions = { + nop_0; + } + key = { + meta.egress_metadata.bd : exact; + meta.l2_metadata.lkp_pkt_type: exact; + } + size = 1024; + counters = egress_bd_stats; + } + apply { + egress_bd_stats_0.apply(); + } +} + +control process_tunnel_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel_encap.nop") action nop() { + } + @name(".process_tunnel_encap.set_egress_tunnel_vni") action set_egress_tunnel_vni(bit<24> vnid) { + meta.tunnel_metadata.vnid = vnid; + } + @name(".process_tunnel_encap.rewrite_tunnel_dmac") action rewrite_tunnel_dmac(bit<48> dmac) { + hdr.ethernet.dstAddr = dmac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_dst") action rewrite_tunnel_ipv4_dst(bit<32> ip) { + hdr.ipv4.dstAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_dst") action rewrite_tunnel_ipv6_dst(bit<128> ip) { + hdr.ipv6.dstAddr = ip; + } + @name(".process_tunnel_encap.inner_ipv4_udp_rewrite") action inner_ipv4_udp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.udp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_tcp_rewrite") action inner_ipv4_tcp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.tcp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_icmp_rewrite") action inner_ipv4_icmp_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.icmp.setInvalid(); + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv4_unknown_rewrite") action inner_ipv4_unknown_rewrite() { + hdr.inner_ipv4 = hdr.ipv4; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv4.totalLen; + hdr.ipv4.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w4; + } + @name(".process_tunnel_encap.inner_ipv6_udp_rewrite") action inner_ipv6_udp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_udp = hdr.udp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_tcp_rewrite") action inner_ipv6_tcp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_tcp = hdr.tcp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.tcp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_icmp_rewrite") action inner_ipv6_icmp_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + hdr.inner_icmp = hdr.icmp; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.icmp.setInvalid(); + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_ipv6_unknown_rewrite") action inner_ipv6_unknown_rewrite() { + hdr.inner_ipv6 = hdr.ipv6; + meta.egress_metadata.payload_length = (bit<16>)hdr.ipv6.payloadLen + 16w40; + hdr.ipv6.setInvalid(); + meta.tunnel_metadata.inner_ip_proto = 8w41; + } + @name(".process_tunnel_encap.inner_non_ip_rewrite") action inner_non_ip_rewrite() { + meta.egress_metadata.payload_length = (bit<16>)standard_metadata.packet_length + 16w65522; + } + @name(".process_tunnel_encap.f_insert_vxlan_header") action f_insert_vxlan_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.vxlan.setValid(); + hdr.udp.srcPort = (bit<16>)meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w4789; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.vxlan.flags = 8w0x8; + hdr.vxlan.reserved = 24w0; + hdr.vxlan.vni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.vxlan.reserved2 = 8w0; + } + @name(".process_tunnel_encap.f_insert_ipv4_header") action f_insert_ipv4_header(bit<8> proto) { + hdr.ipv4.setValid(); + hdr.ipv4.protocol = (bit<8>)proto; + hdr.ipv4.ttl = 8w64; + hdr.ipv4.version = 4w0x4; + hdr.ipv4.ihl = 4w0x5; + hdr.ipv4.identification = 16w0; + } + @name(".process_tunnel_encap.ipv4_vxlan_rewrite") action ipv4_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_genv_header") action f_insert_genv_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.udp.setValid(); + hdr.genv.setValid(); + hdr.udp.srcPort = (bit<16>)meta.hash_metadata.entropy_hash; + hdr.udp.dstPort = 16w6081; + hdr.udp.checksum = 16w0; + hdr.udp.length_ = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.genv.ver = 2w0; + hdr.genv.oam = 1w0; + hdr.genv.critical = 1w0; + hdr.genv.optLen = 6w0; + hdr.genv.protoType = 16w0x6558; + hdr.genv.vni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.genv.reserved = 6w0; + hdr.genv.reserved2 = 8w0; + } + @name(".process_tunnel_encap.ipv4_genv_rewrite") action ipv4_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv4_header(8w17); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_nvgre_header") action f_insert_nvgre_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.nvgre.setValid(); + hdr.gre.proto = 16w0x6558; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w1; + hdr.gre.C = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.nvgre.tni = (bit<24>)meta.tunnel_metadata.vnid; + hdr.nvgre.flow_id[7:0] = ((bit<8>)meta.hash_metadata.entropy_hash)[7:0]; + } + @name(".process_tunnel_encap.ipv4_nvgre_rewrite") action ipv4_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w42; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_gre_header") action f_insert_gre_header() { + hdr.gre.setValid(); + } + @name(".process_tunnel_encap.ipv4_gre_rewrite") action ipv4_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = (bit<16>)hdr.ethernet.etherType; + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w24; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.ipv4_ip_rewrite") action ipv4_ip_rewrite() { + f_insert_ipv4_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w20; + hdr.ethernet.etherType = 16w0x800; + } + @name(".process_tunnel_encap.f_insert_erspan_t3_header") action f_insert_erspan_t3_header() { + hdr.inner_ethernet = hdr.ethernet; + hdr.gre.setValid(); + hdr.erspan_t3_header.setValid(); + hdr.gre.C = 1w0; + hdr.gre.R = 1w0; + hdr.gre.K = 1w0; + hdr.gre.S = 1w0; + hdr.gre.s = 1w0; + hdr.gre.recurse = 3w0; + hdr.gre.flags = 5w0; + hdr.gre.ver = 3w0; + hdr.gre.proto = 16w0x22eb; + hdr.erspan_t3_header.timestamp = (bit<32>)meta.i2e_metadata.ingress_tstamp; + hdr.erspan_t3_header.span_id = (bit<10>)meta.i2e_metadata.mirror_session_id; + hdr.erspan_t3_header.version = 4w2; + hdr.erspan_t3_header.sgt_other = 32w0; + } + @name(".process_tunnel_encap.ipv4_erspan_t3_rewrite") action ipv4_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv4_header(8w47); + hdr.ipv4.totalLen = (bit<16>)meta.egress_metadata.payload_length + 16w50; + } + @name(".process_tunnel_encap.f_insert_ipv6_header") action f_insert_ipv6_header(bit<8> proto) { + hdr.ipv6.setValid(); + hdr.ipv6.version = 4w0x6; + hdr.ipv6.nextHdr = (bit<8>)proto; + hdr.ipv6.hopLimit = 8w64; + hdr.ipv6.trafficClass = 8w0; + hdr.ipv6.flowLabel = 20w0; + } + @name(".process_tunnel_encap.ipv6_gre_rewrite") action ipv6_gre_rewrite() { + f_insert_gre_header(); + hdr.gre.proto = (bit<16>)hdr.ethernet.etherType; + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w4; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_ip_rewrite") action ipv6_ip_rewrite() { + f_insert_ipv6_header(meta.tunnel_metadata.inner_ip_proto); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_nvgre_rewrite") action ipv6_nvgre_rewrite() { + f_insert_nvgre_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w22; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_vxlan_rewrite") action ipv6_vxlan_rewrite() { + f_insert_vxlan_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_genv_rewrite") action ipv6_genv_rewrite() { + f_insert_genv_header(); + f_insert_ipv6_header(8w17); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w30; + hdr.ethernet.etherType = 16w0x86dd; + } + @name(".process_tunnel_encap.ipv6_erspan_t3_rewrite") action ipv6_erspan_t3_rewrite() { + f_insert_erspan_t3_header(); + f_insert_ipv6_header(8w47); + hdr.ipv6.payloadLen = (bit<16>)meta.egress_metadata.payload_length + 16w26; + } + @name(".process_tunnel_encap.mpls_ethernet_push1_rewrite") action mpls_ethernet_push1_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push1_rewrite") action mpls_ip_push1_rewrite() { + { + hdr.mpls.push_front(1); + hdr.mpls[0].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push2_rewrite") action mpls_ethernet_push2_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push2_rewrite") action mpls_ip_push2_rewrite() { + { + hdr.mpls.push_front(2); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ethernet_push3_rewrite") action mpls_ethernet_push3_rewrite() { + hdr.inner_ethernet = hdr.ethernet; + { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.mpls_ip_push3_rewrite") action mpls_ip_push3_rewrite() { + { + hdr.mpls.push_front(3); + hdr.mpls[0].setValid(); + hdr.mpls[1].setValid(); + hdr.mpls[2].setValid(); + } + hdr.ethernet.etherType = 16w0x8847; + } + @name(".process_tunnel_encap.fabric_rewrite") action fabric_rewrite(bit<14> tunnel_index) { + meta.tunnel_metadata.tunnel_index = tunnel_index; + } + @name(".process_tunnel_encap.tunnel_mtu_check") action tunnel_mtu_check(bit<16> l3_mtu) { + meta.l3_metadata.l3_mtu_check = l3_mtu |-| (bit<16>)meta.egress_metadata.payload_length; + } + @name(".process_tunnel_encap.tunnel_mtu_miss") action tunnel_mtu_miss() { + meta.l3_metadata.l3_mtu_check = 16w0xffff; + } + @name(".process_tunnel_encap.set_tunnel_rewrite_details") action set_tunnel_rewrite_details(bit<16> outer_bd, bit<9> smac_idx, bit<14> dmac_idx, bit<9> sip_index, bit<14> dip_index) { + meta.egress_metadata.outer_bd = outer_bd; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + meta.tunnel_metadata.tunnel_src_index = sip_index; + meta.tunnel_metadata.tunnel_dst_index = dip_index; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push1") action set_mpls_rewrite_push1(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].bos = 1w0x1; + hdr.mpls[0].ttl = ttl1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push2") action set_mpls_rewrite_push2(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.set_mpls_rewrite_push3") action set_mpls_rewrite_push3(bit<20> label1, bit<3> exp1, bit<8> ttl1, bit<20> label2, bit<3> exp2, bit<8> ttl2, bit<20> label3, bit<3> exp3, bit<8> ttl3, bit<9> smac_idx, bit<14> dmac_idx) { + hdr.mpls[0].label = label1; + hdr.mpls[0].exp = exp1; + hdr.mpls[0].ttl = ttl1; + hdr.mpls[0].bos = 1w0x0; + hdr.mpls[1].label = label2; + hdr.mpls[1].exp = exp2; + hdr.mpls[1].ttl = ttl2; + hdr.mpls[1].bos = 1w0x0; + hdr.mpls[2].label = label3; + hdr.mpls[2].exp = exp3; + hdr.mpls[2].ttl = ttl3; + hdr.mpls[2].bos = 1w0x1; + meta.tunnel_metadata.tunnel_smac_index = smac_idx; + meta.tunnel_metadata.tunnel_dmac_index = dmac_idx; + } + @name(".process_tunnel_encap.cpu_rx_rewrite") action cpu_rx_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w5; + hdr.fabric_header_cpu.setValid(); + hdr.fabric_header_cpu.ingressPort = (bit<16>)meta.ingress_metadata.ingress_port; + hdr.fabric_header_cpu.ingressIfindex = (bit<16>)meta.ingress_metadata.ifindex; + hdr.fabric_header_cpu.ingressBd = (bit<16>)meta.ingress_metadata.bd; + hdr.fabric_header_cpu.reasonCode = (bit<16>)meta.fabric_metadata.reason_code; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_unicast_rewrite") action fabric_unicast_rewrite() { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w1; + hdr.fabric_header.dstDevice = (bit<8>)meta.fabric_metadata.dst_device; + hdr.fabric_header.dstPortOrGroup = (bit<16>)meta.fabric_metadata.dst_port; + hdr.fabric_header_unicast.setValid(); + hdr.fabric_header_unicast.tunnelTerminate = (bit<1>)meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_unicast.routed = (bit<1>)meta.l3_metadata.routed; + hdr.fabric_header_unicast.outerRouted = (bit<1>)meta.l3_metadata.outer_routed; + hdr.fabric_header_unicast.ingressTunnelType = (bit<5>)meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_unicast.nexthopIndex = (bit<16>)meta.l3_metadata.nexthop_index; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.fabric_multicast_rewrite") action fabric_multicast_rewrite(bit<16> fabric_mgid) { + hdr.fabric_header.setValid(); + hdr.fabric_header.headerVersion = 2w0; + hdr.fabric_header.packetVersion = 2w0; + hdr.fabric_header.pad1 = 1w0; + hdr.fabric_header.packetType = 3w2; + hdr.fabric_header.dstDevice = 8w127; + hdr.fabric_header.dstPortOrGroup = fabric_mgid; + hdr.fabric_header_multicast.ingressIfindex = (bit<16>)meta.ingress_metadata.ifindex; + hdr.fabric_header_multicast.ingressBd = (bit<16>)meta.ingress_metadata.bd; + hdr.fabric_header_multicast.setValid(); + hdr.fabric_header_multicast.tunnelTerminate = (bit<1>)meta.tunnel_metadata.tunnel_terminate; + hdr.fabric_header_multicast.routed = (bit<1>)meta.l3_metadata.routed; + hdr.fabric_header_multicast.outerRouted = (bit<1>)meta.l3_metadata.outer_routed; + hdr.fabric_header_multicast.ingressTunnelType = (bit<5>)meta.tunnel_metadata.ingress_tunnel_type; + hdr.fabric_header_multicast.mcastGrp = (bit<16>)meta.multicast_metadata.mcast_grp; + hdr.fabric_payload_header.setValid(); + hdr.fabric_payload_header.etherType = (bit<16>)hdr.ethernet.etherType; + hdr.ethernet.etherType = 16w0x9000; + } + @name(".process_tunnel_encap.rewrite_tunnel_smac") action rewrite_tunnel_smac(bit<48> smac) { + hdr.ethernet.srcAddr = smac; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv4_src") action rewrite_tunnel_ipv4_src(bit<32> ip) { + hdr.ipv4.srcAddr = ip; + } + @name(".process_tunnel_encap.rewrite_tunnel_ipv6_src") action rewrite_tunnel_ipv6_src(bit<128> ip) { + hdr.ipv6.srcAddr = ip; + } + @name(".egress_vni") table egress_vni { + actions = { + nop; + set_egress_tunnel_vni; + } + key = { + meta.egress_metadata.bd : exact; + meta.tunnel_metadata.egress_tunnel_type: exact; + } + size = 1024; + } + @name(".tunnel_dmac_rewrite") table tunnel_dmac_rewrite { + actions = { + nop; + rewrite_tunnel_dmac; + } + key = { + meta.tunnel_metadata.tunnel_dmac_index: exact; + } + size = 1024; + } + @name(".tunnel_dst_rewrite") table tunnel_dst_rewrite { + actions = { + nop; + rewrite_tunnel_ipv4_dst; + rewrite_tunnel_ipv6_dst; + } + key = { + meta.tunnel_metadata.tunnel_dst_index: exact; + } + size = 1024; + } + @name(".tunnel_encap_process_inner") table tunnel_encap_process_inner { + actions = { + inner_ipv4_udp_rewrite; + inner_ipv4_tcp_rewrite; + inner_ipv4_icmp_rewrite; + inner_ipv4_unknown_rewrite; + inner_ipv6_udp_rewrite; + inner_ipv6_tcp_rewrite; + inner_ipv6_icmp_rewrite; + inner_ipv6_unknown_rewrite; + inner_non_ip_rewrite; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + hdr.tcp.isValid() : exact; + hdr.udp.isValid() : exact; + hdr.icmp.isValid(): exact; + } + size = 1024; + } + @name(".tunnel_encap_process_outer") table tunnel_encap_process_outer { + actions = { + nop; + ipv4_vxlan_rewrite; + ipv4_genv_rewrite; + ipv4_nvgre_rewrite; + ipv4_gre_rewrite; + ipv4_ip_rewrite; + ipv4_erspan_t3_rewrite; + ipv6_gre_rewrite; + ipv6_ip_rewrite; + ipv6_nvgre_rewrite; + ipv6_vxlan_rewrite; + ipv6_genv_rewrite; + ipv6_erspan_t3_rewrite; + mpls_ethernet_push1_rewrite; + mpls_ip_push1_rewrite; + mpls_ethernet_push2_rewrite; + mpls_ip_push2_rewrite; + mpls_ethernet_push3_rewrite; + mpls_ip_push3_rewrite; + fabric_rewrite; + } + key = { + meta.tunnel_metadata.egress_tunnel_type : exact; + meta.tunnel_metadata.egress_header_count: exact; + meta.multicast_metadata.replica : exact; + } + size = 1024; + } + @name(".tunnel_mtu") table tunnel_mtu { + actions = { + tunnel_mtu_check; + tunnel_mtu_miss; + } + key = { + meta.tunnel_metadata.tunnel_index: exact; + } + size = 1024; + } + @name(".tunnel_rewrite") table tunnel_rewrite { + actions = { + nop; + set_tunnel_rewrite_details; + set_mpls_rewrite_push1; + set_mpls_rewrite_push2; + set_mpls_rewrite_push3; + cpu_rx_rewrite; + fabric_unicast_rewrite; + fabric_multicast_rewrite; + } + key = { + meta.tunnel_metadata.tunnel_index: exact; + } + size = 1024; + } + @name(".tunnel_smac_rewrite") table tunnel_smac_rewrite { + actions = { + nop; + rewrite_tunnel_smac; + } + key = { + meta.tunnel_metadata.tunnel_smac_index: exact; + } + size = 1024; + } + @name(".tunnel_src_rewrite") table tunnel_src_rewrite { + actions = { + nop; + rewrite_tunnel_ipv4_src; + rewrite_tunnel_ipv6_src; + } + key = { + meta.tunnel_metadata.tunnel_src_index: exact; + } + size = 1024; + } + apply { + if (meta.fabric_metadata.fabric_header_present == 1w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0) { + egress_vni.apply(); + if (meta.tunnel_metadata.egress_tunnel_type != 5w15 && meta.tunnel_metadata.egress_tunnel_type != 5w16) { + tunnel_encap_process_inner.apply(); + } + tunnel_encap_process_outer.apply(); + tunnel_rewrite.apply(); + tunnel_mtu.apply(); + tunnel_src_rewrite.apply(); + tunnel_dst_rewrite.apply(); + tunnel_smac_rewrite.apply(); + tunnel_dmac_rewrite.apply(); + } + } +} + +control process_int_outer_encap(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_outer_encap.int_update_vxlan_gpe_ipv4") action int_update_vxlan_gpe_ipv4() { + hdr.ipv4.totalLen = hdr.ipv4.totalLen + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.vxlan_gpe_int_header.len = hdr.vxlan_gpe_int_header.len + (bit<8>)meta.int_metadata.gpe_int_hdr_len8; + } + @name(".process_int_outer_encap.int_add_update_vxlan_gpe_ipv4") action int_add_update_vxlan_gpe_ipv4() { + hdr.vxlan_gpe_int_header.setValid(); + hdr.vxlan_gpe_int_header.int_type = 8w0x1; + hdr.vxlan_gpe_int_header.next_proto = 8w3; + hdr.vxlan_gpe.next_proto = 8w5; + hdr.vxlan_gpe_int_header.len = (bit<8>)meta.int_metadata.gpe_int_hdr_len8; + hdr.ipv4.totalLen = hdr.ipv4.totalLen + (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ + (bit<16>)meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_outer_encap.nop") action nop() { + } + @name(".int_outer_encap") table int_outer_encap { + actions = { + int_update_vxlan_gpe_ipv4; + int_add_update_vxlan_gpe_ipv4; + nop; + } + key = { + hdr.ipv4.isValid() : exact; + hdr.vxlan_gpe.isValid() : exact; + meta.int_metadata_i2e.source : exact; + meta.tunnel_metadata.egress_tunnel_type: ternary; + } + size = 8; + } + apply { + if (meta.int_metadata.insert_cnt != 8w0) { + int_outer_encap.apply(); + } + } +} + +control process_vlan_xlate(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_vlan_xlate.set_egress_packet_vlan_untagged") action set_egress_packet_vlan_untagged() { + } + @name(".process_vlan_xlate.set_egress_packet_vlan_tagged") action set_egress_packet_vlan_tagged(bit<12> vlan_id) { + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[0].etherType = (bit<16>)hdr.ethernet.etherType; + hdr.vlan_tag_[0].vid = vlan_id; + hdr.ethernet.etherType = 16w0x8100; + } + @name(".process_vlan_xlate.set_egress_packet_vlan_double_tagged") action set_egress_packet_vlan_double_tagged(bit<12> s_tag, bit<12> c_tag) { + hdr.vlan_tag_[1].setValid(); + hdr.vlan_tag_[0].setValid(); + hdr.vlan_tag_[1].etherType = (bit<16>)hdr.ethernet.etherType; + hdr.vlan_tag_[1].vid = c_tag; + hdr.vlan_tag_[0].etherType = 16w0x8100; + hdr.vlan_tag_[0].vid = s_tag; + hdr.ethernet.etherType = 16w0x9100; + } + @name(".egress_vlan_xlate") table egress_vlan_xlate { + actions = { + set_egress_packet_vlan_untagged; + set_egress_packet_vlan_tagged; + set_egress_packet_vlan_double_tagged; + } + key = { + meta.egress_metadata.ifindex: exact; + meta.egress_metadata.bd : exact; + } + size = 1024; + } + apply { + egress_vlan_xlate.apply(); + } +} + +control process_egress_filter(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_filter.egress_filter_check") action egress_filter_check() { + meta.egress_filter_metadata.ifindex_check = (bit<16>)meta.ingress_metadata.ifindex ^ (bit<16>)meta.egress_metadata.ifindex; + meta.egress_filter_metadata.bd = (bit<16>)meta.ingress_metadata.outer_bd ^ (bit<16>)meta.egress_metadata.outer_bd; + meta.egress_filter_metadata.inner_bd = (bit<16>)meta.ingress_metadata.bd ^ (bit<16>)meta.egress_metadata.bd; + } + @name(".process_egress_filter.set_egress_filter_drop") action set_egress_filter_drop() { + mark_to_drop(standard_metadata); + } + @name(".egress_filter") table egress_filter { + actions = { + egress_filter_check; + } + } + @name(".egress_filter_drop") table egress_filter_drop { + actions = { + set_egress_filter_drop; + } + } + apply { + egress_filter.apply(); + if (meta.multicast_metadata.inner_replica == 1w1) { + if (meta.tunnel_metadata.ingress_tunnel_type == 5w0 && meta.tunnel_metadata.egress_tunnel_type == 5w0 && meta.egress_filter_metadata.bd == 16w0 && meta.egress_filter_metadata.ifindex_check == 16w0 || meta.tunnel_metadata.ingress_tunnel_type != 5w0 && meta.tunnel_metadata.egress_tunnel_type != 5w0 && meta.egress_filter_metadata.inner_bd == 16w0) { + egress_filter_drop.apply(); + } + } + } +} + +control process_egress_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_egress_acl.nop") action nop() { + } + @name(".process_egress_acl.egress_mirror") action egress_mirror(bit<32> session_id) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + clone_preserving_field_list(CloneType.E2E, (bit<32>)session_id, (bit<8>)FieldLists.e2e_mirror_info); + } + @name(".process_egress_acl.egress_mirror_drop") action egress_mirror_drop(bit<32> session_id) { + egress_mirror(session_id); + mark_to_drop(standard_metadata); + } + @name(".process_egress_acl.egress_copy_to_cpu") action egress_copy_to_cpu(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.E2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_egress_acl.egress_redirect_to_cpu") action egress_redirect_to_cpu(bit<16> reason_code) { + egress_copy_to_cpu(reason_code); + mark_to_drop(standard_metadata); + } + @name(".egress_acl") table egress_acl { + actions = { + nop; + egress_mirror; + egress_mirror_drop; + egress_redirect_to_cpu; + } + key = { + standard_metadata.egress_port: ternary; + meta.l3_metadata.l3_mtu_check: ternary; + } + size = 512; + } + apply { + if (meta.egress_metadata.bypass == 1w0) { + egress_acl.apply(); + } + } +} + +control egress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".egress.egress_port_type_normal") action egress_port_type_normal(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w0; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_fabric") action egress_port_type_fabric(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w1; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w15; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.egress_port_type_cpu") action egress_port_type_cpu(bit<16> ifindex) { + meta.egress_metadata.port_type = 2w2; + meta.egress_metadata.ifindex = ifindex; + meta.tunnel_metadata.egress_tunnel_type = 5w16; + meta.egress_metadata.ifindex = ifindex; + } + @name(".egress.nop") action nop() { + } + @name(".egress.set_mirror_nhop") action set_mirror_nhop(bit<16> nhop_idx) { + meta.l3_metadata.nexthop_index = nhop_idx; + } + @name(".egress.set_mirror_bd") action set_mirror_bd(bit<16> bd) { + meta.egress_metadata.bd = bd; + } + @name(".egress.sflow_pkt_to_cpu") action sflow_pkt_to_cpu() { + hdr.fabric_header_sflow.setValid(); + hdr.fabric_header_sflow.sflow_session_id = (bit<16>)meta.sflow_metadata.sflow_session_id; + } + @name(".egress_port_mapping") table egress_port_mapping { + actions = { + egress_port_type_normal; + egress_port_type_fabric; + egress_port_type_cpu; + } + key = { + standard_metadata.egress_port: exact; + } + size = 288; + } + @name(".mirror") table mirror { + actions = { + nop; + set_mirror_nhop; + set_mirror_bd; + sflow_pkt_to_cpu; + } + key = { + meta.i2e_metadata.mirror_session_id: exact; + } + size = 1024; + } + @name(".process_replication") process_replication() process_replication_0; + @name(".process_vlan_decap") process_vlan_decap() process_vlan_decap_0; + @name(".process_tunnel_decap") process_tunnel_decap() process_tunnel_decap_0; + @name(".process_rewrite") process_rewrite() process_rewrite_0; + @name(".process_egress_bd") process_egress_bd() process_egress_bd_0; + @name(".process_mac_rewrite") process_mac_rewrite() process_mac_rewrite_0; + @name(".process_mtu") process_mtu() process_mtu_0; + @name(".process_int_insertion") process_int_insertion() process_int_insertion_0; + @name(".process_egress_bd_stats") process_egress_bd_stats() process_egress_bd_stats_0; + @name(".process_tunnel_encap") process_tunnel_encap() process_tunnel_encap_0; + @name(".process_int_outer_encap") process_int_outer_encap() process_int_outer_encap_0; + @name(".process_vlan_xlate") process_vlan_xlate() process_vlan_xlate_0; + @name(".process_egress_filter") process_egress_filter() process_egress_filter_0; + @name(".process_egress_acl") process_egress_acl() process_egress_acl_0; + apply { + if (meta.egress_metadata.bypass == 1w0) { + if (standard_metadata.instance_type != 32w0 && standard_metadata.instance_type != 32w5) { + mirror.apply(); + } else { + process_replication_0.apply(hdr, meta, standard_metadata); + } + switch (egress_port_mapping.apply().action_run) { + egress_port_type_normal: { + if (standard_metadata.instance_type == 32w0 || standard_metadata.instance_type == 32w5) { + process_vlan_decap_0.apply(hdr, meta, standard_metadata); + } + process_tunnel_decap_0.apply(hdr, meta, standard_metadata); + process_rewrite_0.apply(hdr, meta, standard_metadata); + process_egress_bd_0.apply(hdr, meta, standard_metadata); + process_mac_rewrite_0.apply(hdr, meta, standard_metadata); + process_mtu_0.apply(hdr, meta, standard_metadata); + process_int_insertion_0.apply(hdr, meta, standard_metadata); + process_egress_bd_stats_0.apply(hdr, meta, standard_metadata); + } + } + process_tunnel_encap_0.apply(hdr, meta, standard_metadata); + process_int_outer_encap_0.apply(hdr, meta, standard_metadata); + if (meta.egress_metadata.port_type == 2w0) { + process_vlan_xlate_0.apply(hdr, meta, standard_metadata); + } + process_egress_filter_0.apply(hdr, meta, standard_metadata); + } + process_egress_acl_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ingress_port_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_port_mapping.set_ifindex") action set_ifindex(bit<16> ifindex, bit<2> port_type) { + meta.ingress_metadata.ifindex = ifindex; + meta.ingress_metadata.port_type = port_type; + } + @name(".process_ingress_port_mapping.set_ingress_port_properties") action set_ingress_port_properties(bit<16> if_label) { + meta.acl_metadata.if_label = if_label; + } + @name(".ingress_port_mapping") table ingress_port_mapping { + actions = { + set_ifindex; + } + key = { + standard_metadata.ingress_port: exact; + } + size = 288; + } + @name(".ingress_port_properties") table ingress_port_properties { + actions = { + set_ingress_port_properties; + } + key = { + standard_metadata.ingress_port: exact; + } + size = 288; + } + apply { + ingress_port_mapping.apply(); + ingress_port_properties.apply(); + } +} + +control validate_outer_ipv4_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv4_header.set_valid_outer_ipv4_packet") action set_valid_outer_ipv4_packet() { + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.ipv4.diffserv; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.ipv4.version; + } + @name(".validate_outer_ipv4_header.set_malformed_outer_ipv4_packet") action set_malformed_outer_ipv4_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv4_packet") table validate_outer_ipv4_packet { + actions = { + set_valid_outer_ipv4_packet; + set_malformed_outer_ipv4_packet; + } + key = { + hdr.ipv4.version : ternary; + hdr.ipv4.ttl : ternary; + hdr.ipv4.srcAddr[31:24]: ternary @name("ipv4.srcAddr"); + } + size = 512; + } + apply { + validate_outer_ipv4_packet.apply(); + } +} + +control validate_outer_ipv6_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_outer_ipv6_header.set_valid_outer_ipv6_packet") action set_valid_outer_ipv6_packet() { + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.ipv6.trafficClass; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.ipv6.version; + } + @name(".validate_outer_ipv6_header.set_malformed_outer_ipv6_packet") action set_malformed_outer_ipv6_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_outer_ipv6_packet") table validate_outer_ipv6_packet { + actions = { + set_valid_outer_ipv6_packet; + set_malformed_outer_ipv6_packet; + } + key = { + hdr.ipv6.version : ternary; + hdr.ipv6.hopLimit : ternary; + hdr.ipv6.srcAddr[127:112]: ternary @name("ipv6.srcAddr"); + } + size = 512; + } + apply { + validate_outer_ipv6_packet.apply(); + } +} + +control validate_mpls_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".validate_mpls_header.set_valid_mpls_label1") action set_valid_mpls_label1() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[0].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[0].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label2") action set_valid_mpls_label2() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[1].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[1].exp; + } + @name(".validate_mpls_header.set_valid_mpls_label3") action set_valid_mpls_label3() { + meta.tunnel_metadata.mpls_label = (bit<20>)hdr.mpls[2].label; + meta.tunnel_metadata.mpls_exp = (bit<3>)hdr.mpls[2].exp; + } + @name(".validate_mpls_packet") table validate_mpls_packet { + actions = { + set_valid_mpls_label1; + set_valid_mpls_label2; + set_valid_mpls_label3; + } + key = { + hdr.mpls[0].label : ternary; + hdr.mpls[0].bos : ternary; + hdr.mpls[0].isValid(): exact; + hdr.mpls[1].label : ternary; + hdr.mpls[1].bos : ternary; + hdr.mpls[1].isValid(): exact; + hdr.mpls[2].label : ternary; + hdr.mpls[2].bos : ternary; + hdr.mpls[2].isValid(): exact; + } + size = 512; + } + apply { + validate_mpls_packet.apply(); + } +} + +control process_validate_outer_header(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_outer_header.malformed_outer_ethernet_packet") action malformed_outer_ethernet_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_untagged") action set_valid_outer_unicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged") action set_valid_outer_unicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged") action set_valid_outer_unicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged") action set_valid_outer_unicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_untagged") action set_valid_outer_multicast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged") action set_valid_outer_multicast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged") action set_valid_outer_multicast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged") action set_valid_outer_multicast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_untagged") action set_valid_outer_broadcast_packet_untagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged") action set_valid_outer_broadcast_packet_single_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[0].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged") action set_valid_outer_broadcast_packet_double_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.vlan_tag_[1].etherType; + } + @name(".process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged") action set_valid_outer_broadcast_packet_qinq_tagged() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".validate_outer_ethernet") table validate_outer_ethernet { + actions = { + malformed_outer_ethernet_packet; + set_valid_outer_unicast_packet_untagged; + set_valid_outer_unicast_packet_single_tagged; + set_valid_outer_unicast_packet_double_tagged; + set_valid_outer_unicast_packet_qinq_tagged; + set_valid_outer_multicast_packet_untagged; + set_valid_outer_multicast_packet_single_tagged; + set_valid_outer_multicast_packet_double_tagged; + set_valid_outer_multicast_packet_qinq_tagged; + set_valid_outer_broadcast_packet_untagged; + set_valid_outer_broadcast_packet_single_tagged; + set_valid_outer_broadcast_packet_double_tagged; + set_valid_outer_broadcast_packet_qinq_tagged; + } + key = { + hdr.ethernet.srcAddr : ternary; + hdr.ethernet.dstAddr : ternary; + hdr.vlan_tag_[0].isValid(): exact; + hdr.vlan_tag_[1].isValid(): exact; + } + size = 512; + } + @name(".validate_outer_ipv4_header") validate_outer_ipv4_header() validate_outer_ipv4_header_0; + @name(".validate_outer_ipv6_header") validate_outer_ipv6_header() validate_outer_ipv6_header_0; + @name(".validate_mpls_header") validate_mpls_header() validate_mpls_header_0; + apply { + switch (validate_outer_ethernet.apply().action_run) { + malformed_outer_ethernet_packet: { + } + default: { + if (hdr.ipv4.isValid()) { + validate_outer_ipv4_header_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + validate_outer_ipv6_header_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.mpls[0].isValid()) { + validate_mpls_header_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + } +} + +control process_global_params(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_global_params.deflect_on_drop") action deflect_on_drop(bit<8> enable_dod) { + } + @name(".process_global_params.set_config_parameters") action set_config_parameters(bit<8> enable_dod) { + deflect_on_drop(enable_dod); + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + meta.ingress_metadata.ingress_port = (bit<9>)standard_metadata.ingress_port; + meta.l2_metadata.same_if_check = (bit<16>)meta.ingress_metadata.ifindex; + standard_metadata.egress_spec = 9w511; + random(meta.ingress_metadata.sflow_take_sample, (bit<32>)0, 32w0x7fffffff); + } + @name(".switch_config_params") table switch_config_params { + actions = { + set_config_parameters; + } + size = 1; + } + apply { + switch_config_params.apply(); + } +} + +control process_port_vlan_mapping(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_port_vlan_mapping.set_bd_properties") action set_bd_properties(bit<16> bd, bit<16> vrf, bit<10> stp_group, bit<1> learning_enabled, bit<16> bd_label, bit<16> stats_idx, bit<10> rmac_group, bit<1> ipv4_unicast_enabled, bit<1> ipv6_unicast_enabled, bit<2> ipv4_urpf_mode, bit<2> ipv6_urpf_mode, bit<1> igmp_snooping_enabled, bit<1> mld_snooping_enabled, bit<1> ipv4_multicast_enabled, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group, bit<16> ipv4_mcast_key, bit<1> ipv4_mcast_key_type, bit<16> ipv6_mcast_key, bit<1> ipv6_mcast_key_type) { + meta.ingress_metadata.bd = bd; + meta.ingress_metadata.outer_bd = (bit<16>)bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.stp_group = stp_group; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l2_metadata.learning_enabled = learning_enabled; + meta.l3_metadata.vrf = vrf; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_mcast_key_type = ipv4_mcast_key_type; + meta.multicast_metadata.ipv4_mcast_key = ipv4_mcast_key; + meta.multicast_metadata.ipv6_mcast_key_type = ipv6_mcast_key_type; + meta.multicast_metadata.ipv6_mcast_key = ipv6_mcast_key; + } + @name(".process_port_vlan_mapping.port_vlan_mapping_miss") action port_vlan_mapping_miss() { + meta.l2_metadata.port_vlan_mapping_miss = 1w1; + } + @name(".port_vlan_mapping") table port_vlan_mapping { + actions = { + set_bd_properties; + port_vlan_mapping_miss; + } + key = { + meta.ingress_metadata.ifindex: exact; + hdr.vlan_tag_[0].isValid() : exact; + hdr.vlan_tag_[0].vid : exact; + hdr.vlan_tag_[1].isValid() : exact; + hdr.vlan_tag_[1].vid : exact; + } + size = 4096; + implementation = bd_action_profile; + } + apply { + port_vlan_mapping.apply(); + } +} + +control process_spanning_tree(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_spanning_tree.set_stp_state") action set_stp_state(bit<3> stp_state) { + meta.l2_metadata.stp_state = stp_state; + } + @name(".spanning_tree") table spanning_tree { + actions = { + set_stp_state; + } + key = { + meta.ingress_metadata.ifindex: exact; + meta.l2_metadata.stp_group : exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.l2_metadata.stp_group != 10w0) { + spanning_tree.apply(); + } + } +} + +control process_ip_sourceguard(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_sourceguard.on_miss") action on_miss() { + } + @name(".process_ip_sourceguard.ipsg_miss") action ipsg_miss() { + meta.security_metadata.ipsg_check_fail = 1w1; + } + @name(".ipsg") table ipsg { + actions = { + on_miss; + } + key = { + meta.ingress_metadata.ifindex : exact; + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_sa : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + } + size = 1024; + } + @name(".ipsg_permit_special") table ipsg_permit_special { + actions = { + ipsg_miss; + } + key = { + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.port_type == 2w0 && meta.security_metadata.ipsg_enabled == 1w1) { + switch (ipsg.apply().action_run) { + on_miss: { + ipsg_permit_special.apply(); + } + } + } + } +} + +control process_int_endpoint(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_int_endpoint.int_sink_update_vxlan_gpe_v4") action int_sink_update_vxlan_gpe_v4() { + hdr.vxlan_gpe.next_proto = (bit<8>)hdr.vxlan_gpe_int_header.next_proto; + hdr.vxlan_gpe_int_header.setInvalid(); + hdr.ipv4.totalLen = hdr.ipv4.totalLen - (bit<16>)meta.int_metadata.insert_byte_cnt; + hdr.udp.length_ = hdr.udp.length_ - (bit<16>)meta.int_metadata.insert_byte_cnt; + } + @name(".process_int_endpoint.nop") action nop() { + } + @name(".process_int_endpoint.int_set_src") action int_set_src() { + meta.int_metadata_i2e.source = 1w1; + } + @name(".process_int_endpoint.int_set_no_src") action int_set_no_src() { + meta.int_metadata_i2e.source = 1w0; + } + @name(".process_int_endpoint.int_sink") action int_sink(bit<32> mirror_id) { + meta.int_metadata_i2e.sink = 1w1; + meta.i2e_metadata.mirror_session_id = (bit<16>)mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)mirror_id, (bit<8>)FieldLists.int_i2e_mirror_info); + hdr.int_header.setInvalid(); + hdr.int_val[0].setInvalid(); + hdr.int_val[1].setInvalid(); + hdr.int_val[2].setInvalid(); + hdr.int_val[3].setInvalid(); + hdr.int_val[4].setInvalid(); + hdr.int_val[5].setInvalid(); + hdr.int_val[6].setInvalid(); + hdr.int_val[7].setInvalid(); + hdr.int_val[8].setInvalid(); + hdr.int_val[9].setInvalid(); + hdr.int_val[10].setInvalid(); + hdr.int_val[11].setInvalid(); + hdr.int_val[12].setInvalid(); + hdr.int_val[13].setInvalid(); + hdr.int_val[14].setInvalid(); + hdr.int_val[15].setInvalid(); + hdr.int_val[16].setInvalid(); + hdr.int_val[17].setInvalid(); + hdr.int_val[18].setInvalid(); + hdr.int_val[19].setInvalid(); + hdr.int_val[20].setInvalid(); + hdr.int_val[21].setInvalid(); + hdr.int_val[22].setInvalid(); + hdr.int_val[23].setInvalid(); + } + @name(".process_int_endpoint.int_sink_gpe") action int_sink_gpe(bit<32> mirror_id) { + meta.int_metadata.insert_byte_cnt = (bit<16>)(meta.int_metadata.gpe_int_hdr_len << 2); + int_sink(mirror_id); + } + @name(".process_int_endpoint.int_no_sink") action int_no_sink() { + meta.int_metadata_i2e.sink = 1w0; + } + @name(".int_sink_update_outer") table int_sink_update_outer { + actions = { + int_sink_update_vxlan_gpe_v4; + nop; + } + key = { + hdr.vxlan_gpe_int_header.isValid(): exact; + hdr.ipv4.isValid() : exact; + meta.int_metadata_i2e.sink : exact; + } + size = 2; + } + @name(".int_source") table int_source { + actions = { + int_set_src; + int_set_no_src; + } + key = { + hdr.int_header.isValid() : exact; + hdr.ipv4.isValid() : exact; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv4.dstAddr : ternary; + hdr.inner_ipv4.srcAddr : ternary; + } + size = 256; + } + @name(".int_terminate") table int_terminate { + actions = { + int_sink_gpe; + int_no_sink; + } + key = { + hdr.int_header.isValid() : exact; + hdr.vxlan_gpe_int_header.isValid(): exact; + hdr.ipv4.isValid() : exact; + meta.ipv4_metadata.lkp_ipv4_da : ternary; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv4.dstAddr : ternary; + } + size = 256; + } + apply { + if (!hdr.int_header.isValid()) { + int_source.apply(); + } else { + int_terminate.apply(); + int_sink_update_outer.apply(); + } + } +} + +control process_ingress_fabric(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_fabric.nop") action nop() { + } + @name(".process_ingress_fabric.terminate_cpu_packet") action terminate_cpu_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.egress_metadata.bypass = (bit<1>)hdr.fabric_header_cpu.txBypass; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_cpu.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_unicast_packet") action switch_fabric_unicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + meta.fabric_metadata.dst_device = (bit<8>)hdr.fabric_header.dstDevice; + meta.fabric_metadata.dst_port = (bit<16>)hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_unicast_packet") action terminate_fabric_unicast_packet() { + standard_metadata.egress_spec = (bit<9>)hdr.fabric_header.dstPortOrGroup; + meta.tunnel_metadata.tunnel_terminate = (bit<1>)hdr.fabric_header_unicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = (bit<5>)hdr.fabric_header_unicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = (bit<16>)hdr.fabric_header_unicast.nexthopIndex; + meta.l3_metadata.routed = (bit<1>)hdr.fabric_header_unicast.routed; + meta.l3_metadata.outer_routed = (bit<1>)hdr.fabric_header_unicast.outerRouted; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_unicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.switch_fabric_multicast_packet") action switch_fabric_multicast_packet() { + meta.fabric_metadata.fabric_header_present = 1w1; + standard_metadata.mcast_grp = (bit<16>)hdr.fabric_header.dstPortOrGroup; + } + @name(".process_ingress_fabric.terminate_fabric_multicast_packet") action terminate_fabric_multicast_packet() { + meta.tunnel_metadata.tunnel_terminate = (bit<1>)hdr.fabric_header_multicast.tunnelTerminate; + meta.tunnel_metadata.ingress_tunnel_type = (bit<5>)hdr.fabric_header_multicast.ingressTunnelType; + meta.l3_metadata.nexthop_index = 16w0; + meta.l3_metadata.routed = (bit<1>)hdr.fabric_header_multicast.routed; + meta.l3_metadata.outer_routed = (bit<1>)hdr.fabric_header_multicast.outerRouted; + standard_metadata.mcast_grp = (bit<16>)hdr.fabric_header_multicast.mcastGrp; + hdr.ethernet.etherType = (bit<16>)hdr.fabric_payload_header.etherType; + hdr.fabric_header.setInvalid(); + hdr.fabric_header_multicast.setInvalid(); + hdr.fabric_payload_header.setInvalid(); + } + @name(".process_ingress_fabric.set_ingress_ifindex_properties") action set_ingress_ifindex_properties() { + } + @name(".process_ingress_fabric.non_ip_over_fabric") action non_ip_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.ethernet.etherType; + } + @name(".process_ingress_fabric.ipv4_over_fabric") action ipv4_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv4.protocol; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".process_ingress_fabric.ipv6_over_fabric") action ipv6_over_fabric() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + } + @name(".fabric_ingress_dst_lkp") table fabric_ingress_dst_lkp { + actions = { + nop; + terminate_cpu_packet; + switch_fabric_unicast_packet; + terminate_fabric_unicast_packet; + switch_fabric_multicast_packet; + terminate_fabric_multicast_packet; + } + key = { + hdr.fabric_header.dstDevice: exact; + } + } + @name(".fabric_ingress_src_lkp") table fabric_ingress_src_lkp { + actions = { + nop; + set_ingress_ifindex_properties; + } + key = { + hdr.fabric_header_multicast.ingressIfindex: exact; + } + size = 1024; + } + @name(".native_packet_over_fabric") table native_packet_over_fabric { + actions = { + non_ip_over_fabric; + ipv4_over_fabric; + ipv6_over_fabric; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type != 2w0) { + fabric_ingress_dst_lkp.apply(); + if (meta.ingress_metadata.port_type == 2w1) { + if (hdr.fabric_header_multicast.isValid()) { + fabric_ingress_src_lkp.apply(); + } + if (meta.tunnel_metadata.tunnel_terminate == 1w0) { + native_packet_over_fabric.apply(); + } + } + } + } +} + +control process_outer_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast.nop") action nop() { + } + @name(".process_outer_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv4_multicast") table outer_ipv4_multicast { + actions = { + nop; + on_miss; + outer_multicast_route_s_g_hit; + outer_multicast_bridge_s_g_hit; + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact; + meta.multicast_metadata.ipv4_mcast_key : exact; + hdr.ipv4.srcAddr : exact; + hdr.ipv4.dstAddr : exact; + } + size = 1024; + } + @name(".outer_ipv4_multicast_star_g") table outer_ipv4_multicast_star_g { + actions = { + nop; + outer_multicast_route_sm_star_g_hit; + outer_multicast_route_bidir_star_g_hit; + outer_multicast_bridge_star_g_hit; + } + key = { + meta.multicast_metadata.ipv4_mcast_key_type: exact; + meta.multicast_metadata.ipv4_mcast_key : exact; + hdr.ipv4.dstAddr : ternary; + } + size = 512; + } + apply { + switch (outer_ipv4_multicast.apply().action_run) { + on_miss: { + outer_ipv4_multicast_star_g.apply(); + } + } + } +} + +control process_outer_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv6_multicast.nop") action nop() { + } + @name(".process_outer_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_s_g_hit") action outer_multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit") action outer_multicast_bridge_s_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit") action outer_multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w1; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit") action outer_multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.outer_mcast_mode = 2w2; + standard_metadata.mcast_grp = mc_index; + meta.multicast_metadata.outer_mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit") action outer_multicast_bridge_star_g_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".outer_ipv6_multicast") table outer_ipv6_multicast { + actions = { + nop; + on_miss; + outer_multicast_route_s_g_hit; + outer_multicast_bridge_s_g_hit; + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact; + meta.multicast_metadata.ipv6_mcast_key : exact; + hdr.ipv6.srcAddr : exact; + hdr.ipv6.dstAddr : exact; + } + size = 1024; + } + @name(".outer_ipv6_multicast_star_g") table outer_ipv6_multicast_star_g { + actions = { + nop; + outer_multicast_route_sm_star_g_hit; + outer_multicast_route_bidir_star_g_hit; + outer_multicast_bridge_star_g_hit; + } + key = { + meta.multicast_metadata.ipv6_mcast_key_type: exact; + meta.multicast_metadata.ipv6_mcast_key : exact; + hdr.ipv6.dstAddr : ternary; + } + size = 512; + } + apply { + switch (outer_ipv6_multicast.apply().action_run) { + on_miss: { + outer_ipv6_multicast_star_g.apply(); + } + } + } +} + +control process_outer_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_outer_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_outer_ipv4_multicast") process_outer_ipv4_multicast() process_outer_ipv4_multicast_0; + @name(".process_outer_ipv6_multicast") process_outer_ipv6_multicast() process_outer_ipv6_multicast_0; + @name(".process_outer_multicast_rpf") process_outer_multicast_rpf() process_outer_multicast_rpf_0; + apply { + if (hdr.ipv4.isValid()) { + process_outer_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + process_outer_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + } + process_outer_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_vtep.nop") action nop() { + } + @name(".process_ipv4_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv4_vtep.on_miss") action on_miss() { + } + @name(".process_ipv4_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv4_dest_vtep") table ipv4_dest_vtep { + actions = { + nop; + set_tunnel_termination_flag; + set_tunnel_vni_and_termination_flag; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv4.dstAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + @name(".ipv4_src_vtep") table ipv4_src_vtep { + actions = { + on_miss; + src_vtep_hit; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv4.srcAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + apply { + switch (ipv4_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv4_dest_vtep.apply(); + } + } + } +} + +control process_ipv6_vtep(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_vtep.nop") action nop() { + } + @name(".process_ipv6_vtep.set_tunnel_termination_flag") action set_tunnel_termination_flag() { + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.set_tunnel_vni_and_termination_flag") action set_tunnel_vni_and_termination_flag(bit<24> tunnel_vni) { + meta.tunnel_metadata.tunnel_vni = tunnel_vni; + meta.tunnel_metadata.tunnel_terminate = 1w1; + } + @name(".process_ipv6_vtep.on_miss") action on_miss() { + } + @name(".process_ipv6_vtep.src_vtep_hit") action src_vtep_hit(bit<16> ifindex) { + meta.ingress_metadata.ifindex = ifindex; + } + @name(".ipv6_dest_vtep") table ipv6_dest_vtep { + actions = { + nop; + set_tunnel_termination_flag; + set_tunnel_vni_and_termination_flag; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv6.dstAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + @name(".ipv6_src_vtep") table ipv6_src_vtep { + actions = { + on_miss; + src_vtep_hit; + } + key = { + meta.l3_metadata.vrf : exact; + hdr.ipv6.srcAddr : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + } + size = 1024; + } + apply { + switch (ipv6_src_vtep.apply().action_run) { + src_vtep_hit: { + ipv6_dest_vtep.apply(); + } + } + } +} + +control process_mpls(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mpls.terminate_eompls") action terminate_eompls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_vpls") action terminate_vpls(bit<16> bd, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.ingress_metadata.bd = bd; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_mpls.terminate_ipv4_over_mpls") action terminate_ipv4_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + } + @name(".process_mpls.terminate_ipv6_over_mpls") action terminate_ipv6_over_mpls(bit<16> vrf, bit<5> tunnel_type) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.tunnel_metadata.ingress_tunnel_type = tunnel_type; + meta.l3_metadata.vrf = vrf; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + } + @name(".process_mpls.terminate_pw") action terminate_pw(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + } + @name(".process_mpls.forward_mpls") action forward_mpls(bit<16> nexthop_index) { + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + meta.l3_metadata.fib_hit = 1w1; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + } + @name(".mpls") table mpls_0 { + actions = { + terminate_eompls; + terminate_vpls; + terminate_ipv4_over_mpls; + terminate_ipv6_over_mpls; + terminate_pw; + forward_mpls; + } + key = { + meta.tunnel_metadata.mpls_label: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + apply { + mpls_0.apply(); + } +} + +control process_tunnel(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_tunnel.on_miss") action on_miss() { + } + @name(".process_tunnel.outer_rmac_hit") action outer_rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".process_tunnel.nop") action nop() { + } + @name(".process_tunnel.tunnel_lookup_miss") action tunnel_lookup_miss() { + } + @name(".process_tunnel.terminate_tunnel_inner_non_ip") action terminate_tunnel_inner_non_ip(bit<16> bd, bit<16> bd_label, bit<16> stats_idx) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w0; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv4") action terminate_tunnel_inner_ethernet_ipv4(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv4_unicast_enabled, bit<2> ipv4_urpf_mode, bit<1> igmp_snooping_enabled, bit<16> stats_idx, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + meta.multicast_metadata.igmp_snooping_enabled = igmp_snooping_enabled; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv4") action terminate_tunnel_inner_ipv4(bit<16> vrf, bit<10> rmac_group, bit<2> ipv4_urpf_mode, bit<1> ipv4_unicast_enabled, bit<1> ipv4_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv4_metadata.ipv4_unicast_enabled = ipv4_unicast_enabled; + meta.ipv4_metadata.ipv4_urpf_mode = ipv4_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w1; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv4.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv4.diffserv; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv4_multicast_enabled = ipv4_multicast_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ethernet_ipv6") action terminate_tunnel_inner_ethernet_ipv6(bit<16> bd, bit<16> vrf, bit<10> rmac_group, bit<16> bd_label, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> mld_snooping_enabled, bit<16> stats_idx, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.ingress_metadata.bd = bd; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.acl_metadata.bd_label = bd_label; + meta.l2_metadata.bd_stats_idx = stats_idx; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.l2_metadata.lkp_mac_type = (bit<16>)hdr.inner_ethernet.etherType; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + meta.multicast_metadata.mld_snooping_enabled = mld_snooping_enabled; + } + @name(".process_tunnel.terminate_tunnel_inner_ipv6") action terminate_tunnel_inner_ipv6(bit<16> vrf, bit<10> rmac_group, bit<1> ipv6_unicast_enabled, bit<2> ipv6_urpf_mode, bit<1> ipv6_multicast_enabled, bit<16> mrpf_group) { + meta.tunnel_metadata.tunnel_terminate = 1w1; + meta.l3_metadata.vrf = vrf; + meta.qos_metadata.outer_dscp = (bit<8>)meta.l3_metadata.lkp_ip_tc; + meta.ipv6_metadata.ipv6_unicast_enabled = ipv6_unicast_enabled; + meta.ipv6_metadata.ipv6_urpf_mode = ipv6_urpf_mode; + meta.l3_metadata.rmac_group = rmac_group; + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.l3_metadata.lkp_ip_type = 2w2; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.inner_ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.inner_ipv6.dstAddr; + meta.l3_metadata.lkp_ip_version = (bit<4>)hdr.inner_ipv6.version; + meta.l3_metadata.lkp_ip_tc = (bit<8>)hdr.inner_ipv6.trafficClass; + meta.multicast_metadata.bd_mrpf_group = mrpf_group; + meta.multicast_metadata.ipv6_multicast_enabled = ipv6_multicast_enabled; + } + @name(".process_tunnel.non_ip_tunnel_lookup_miss") action non_ip_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv4_tunnel_lookup_miss") action ipv4_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv4_metadata.lkp_ipv4_sa = (bit<32>)hdr.ipv4.srcAddr; + meta.ipv4_metadata.lkp_ipv4_da = (bit<32>)hdr.ipv4.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv4.protocol; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.ipv4.ttl; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".process_tunnel.ipv6_tunnel_lookup_miss") action ipv6_tunnel_lookup_miss() { + meta.l2_metadata.lkp_mac_sa = (bit<48>)hdr.ethernet.srcAddr; + meta.l2_metadata.lkp_mac_da = (bit<48>)hdr.ethernet.dstAddr; + meta.ipv6_metadata.lkp_ipv6_sa = (bit<128>)hdr.ipv6.srcAddr; + meta.ipv6_metadata.lkp_ipv6_da = (bit<128>)hdr.ipv6.dstAddr; + meta.l3_metadata.lkp_ip_proto = (bit<8>)hdr.ipv6.nextHdr; + meta.l3_metadata.lkp_ip_ttl = (bit<8>)hdr.ipv6.hopLimit; + meta.l3_metadata.lkp_l4_sport = (bit<16>)meta.l3_metadata.lkp_outer_l4_sport; + meta.l3_metadata.lkp_l4_dport = (bit<16>)meta.l3_metadata.lkp_outer_l4_dport; + standard_metadata.mcast_grp = 16w0; + } + @name(".outer_rmac") table outer_rmac { + actions = { + on_miss; + outer_rmac_hit; + } + key = { + meta.l3_metadata.rmac_group: exact; + hdr.ethernet.dstAddr : exact; + } + size = 1024; + } + @name(".tunnel") table tunnel { + actions = { + nop; + tunnel_lookup_miss; + terminate_tunnel_inner_non_ip; + terminate_tunnel_inner_ethernet_ipv4; + terminate_tunnel_inner_ipv4; + terminate_tunnel_inner_ethernet_ipv6; + terminate_tunnel_inner_ipv6; + } + key = { + meta.tunnel_metadata.tunnel_vni : exact; + meta.tunnel_metadata.ingress_tunnel_type: exact; + hdr.inner_ipv4.isValid() : exact; + hdr.inner_ipv6.isValid() : exact; + } + size = 1024; + } + @name(".tunnel_lookup_miss") table tunnel_lookup_miss_0 { + actions = { + non_ip_tunnel_lookup_miss; + ipv4_tunnel_lookup_miss; + ipv6_tunnel_lookup_miss; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + } + @name(".tunnel_miss") table tunnel_miss { + actions = { + non_ip_tunnel_lookup_miss; + ipv4_tunnel_lookup_miss; + ipv6_tunnel_lookup_miss; + } + key = { + hdr.ipv4.isValid(): exact; + hdr.ipv6.isValid(): exact; + } + } + @name(".process_ingress_fabric") process_ingress_fabric() process_ingress_fabric_0; + @name(".process_outer_multicast") process_outer_multicast() process_outer_multicast_0; + @name(".process_ipv4_vtep") process_ipv4_vtep() process_ipv4_vtep_0; + @name(".process_ipv6_vtep") process_ipv6_vtep() process_ipv6_vtep_0; + @name(".process_mpls") process_mpls() process_mpls_0; + apply { + process_ingress_fabric_0.apply(hdr, meta, standard_metadata); + if (meta.tunnel_metadata.ingress_tunnel_type != 5w0) { + switch (outer_rmac.apply().action_run) { + on_miss: { + process_outer_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (hdr.ipv4.isValid()) { + process_ipv4_vtep_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.ipv6.isValid()) { + process_ipv6_vtep_0.apply(hdr, meta, standard_metadata); + } else { + if (hdr.mpls[0].isValid()) { + process_mpls_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + } + if (meta.tunnel_metadata.tunnel_terminate == 1w1 || meta.multicast_metadata.outer_mcast_route_hit == 1w1 && (meta.multicast_metadata.outer_mcast_mode == 2w1 && meta.multicast_metadata.mcast_rpf_group == 16w0 || meta.multicast_metadata.outer_mcast_mode == 2w2 && meta.multicast_metadata.mcast_rpf_group != 16w0)) { + switch (tunnel.apply().action_run) { + tunnel_lookup_miss: { + tunnel_lookup_miss_0.apply(); + } + } + } else { + tunnel_miss.apply(); + } + } +} + +control process_ingress_sflow(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".sflow_ingress_session_pkt_counter") direct_counter(CounterType.packets) sflow_ingress_session_pkt_counter; + @name(".process_ingress_sflow.nop") action nop() { + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu") action sflow_ing_pkt_to_cpu(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)sflow_i2e_mirror_id, (bit<8>)FieldLists.sflow_cpu_info); + } + @name(".process_ingress_sflow.sflow_ing_session_enable") action sflow_ing_session_enable(bit<32> rate_thr, bit<16> session_id) { + meta.ingress_metadata.sflow_take_sample = rate_thr |+| meta.ingress_metadata.sflow_take_sample; + meta.sflow_metadata.sflow_session_id = session_id; + } + @name(".process_ingress_sflow.nop_1") action nop_1() { + sflow_ingress_session_pkt_counter.count(); + } + @name(".process_ingress_sflow.sflow_ing_pkt_to_cpu_0") action sflow_ing_pkt_to_cpu_0(bit<32> sflow_i2e_mirror_id, bit<16> reason_code) { + sflow_ingress_session_pkt_counter.count(); + meta.fabric_metadata.reason_code = reason_code; + meta.i2e_metadata.mirror_session_id = (bit<16>)sflow_i2e_mirror_id; + clone_preserving_field_list(CloneType.I2E, (bit<32>)sflow_i2e_mirror_id, (bit<8>)FieldLists.sflow_cpu_info); + } + @name(".sflow_ing_take_sample") table sflow_ing_take_sample { + actions = { + nop_1; + sflow_ing_pkt_to_cpu_0; + } + key = { + meta.ingress_metadata.sflow_take_sample: ternary; + meta.sflow_metadata.sflow_session_id : exact; + } + counters = sflow_ingress_session_pkt_counter; + } + @name(".sflow_ingress") table sflow_ingress { + actions = { + nop; + sflow_ing_session_enable; + } + key = { + meta.ingress_metadata.ifindex : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + hdr.sflow.isValid() : exact; + } + size = 512; + } + apply { + sflow_ingress.apply(); + sflow_ing_take_sample.apply(); + } +} + +@name(".storm_control_meter") meter>(32w1024, MeterType.bytes) storm_control_meter; +control process_storm_control(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_storm_control.nop") action nop() { + } + @name(".process_storm_control.set_storm_control_meter") action set_storm_control_meter(bit<16> meter_idx) { + storm_control_meter.execute_meter((bit<10>)(bit<10>)meter_idx, meta.meter_metadata.meter_color); + meta.meter_metadata.meter_index = (bit<16>)meter_idx; + } + @name(".storm_control") table storm_control { + actions = { + nop; + set_storm_control_meter; + } + key = { + standard_metadata.ingress_port: exact; + meta.l2_metadata.lkp_pkt_type : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + storm_control.apply(); + } + } +} + +control process_validate_packet(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_validate_packet.nop") action nop() { + } + @name(".process_validate_packet.set_unicast") action set_unicast() { + meta.l2_metadata.lkp_pkt_type = 3w1; + } + @name(".process_validate_packet.set_unicast_and_ipv6_src_is_link_local") action set_unicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w1; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + } + @name(".process_validate_packet.set_multicast") action set_multicast() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_multicast_and_ipv6_src_is_link_local") action set_multicast_and_ipv6_src_is_link_local() { + meta.l2_metadata.lkp_pkt_type = 3w2; + meta.ipv6_metadata.ipv6_src_is_link_local = 1w1; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w1; + } + @name(".process_validate_packet.set_broadcast") action set_broadcast() { + meta.l2_metadata.lkp_pkt_type = 3w4; + meta.l2_metadata.bd_stats_idx = meta.l2_metadata.bd_stats_idx + 16w2; + } + @name(".process_validate_packet.set_malformed_packet") action set_malformed_packet(bit<8> drop_reason) { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = drop_reason; + } + @name(".validate_packet") table validate_packet { + actions = { + nop; + set_unicast; + set_unicast_and_ipv6_src_is_link_local; + set_multicast; + set_multicast_and_ipv6_src_is_link_local; + set_broadcast; + set_malformed_packet; + } + key = { + meta.l2_metadata.lkp_mac_sa[40:40] : ternary @name("l2_metadata.lkp_mac_sa"); + meta.l2_metadata.lkp_mac_da : ternary; + meta.l3_metadata.lkp_ip_type : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + meta.l3_metadata.lkp_ip_version : ternary; + meta.ipv4_metadata.lkp_ipv4_sa[31:24] : ternary @name("ipv4_metadata.lkp_ipv4_sa"); + meta.ipv6_metadata.lkp_ipv6_sa[127:112]: ternary @name("ipv6_metadata.lkp_ipv6_sa"); + } + size = 512; + } + apply { + if (meta.ingress_metadata.drop_flag == 1w0) { + validate_packet.apply(); + } + } +} + +control process_mac(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac.nop") action nop() { + } + @name(".process_mac.dmac_hit") action dmac_hit(bit<16> ifindex) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + } + @name(".process_mac.dmac_multicast_hit") action dmac_multicast_hit(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_miss") action dmac_miss() { + meta.ingress_metadata.egress_ifindex = 16w65535; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_mac.dmac_redirect_nexthop") action dmac_redirect_nexthop(bit<16> nexthop_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = nexthop_index; + meta.l2_metadata.l2_nexthop_type = 1w0; + } + @name(".process_mac.dmac_redirect_ecmp") action dmac_redirect_ecmp(bit<16> ecmp_index) { + meta.l2_metadata.l2_redirect = 1w1; + meta.l2_metadata.l2_nexthop = ecmp_index; + meta.l2_metadata.l2_nexthop_type = 1w1; + } + @name(".process_mac.dmac_drop") action dmac_drop() { + mark_to_drop(standard_metadata); + } + @name(".process_mac.smac_miss") action smac_miss() { + meta.l2_metadata.l2_src_miss = 1w1; + } + @name(".process_mac.smac_hit") action smac_hit(bit<16> ifindex) { + meta.l2_metadata.l2_src_move = (bit<16>)meta.ingress_metadata.ifindex ^ ifindex; + } + @name(".dmac") table dmac { + support_timeout = true; + actions = { + nop; + dmac_hit; + dmac_multicast_hit; + dmac_miss; + dmac_redirect_nexthop; + dmac_redirect_ecmp; + dmac_drop; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_da: exact; + } + size = 1024; + } + @name(".smac") table smac { + actions = { + nop; + smac_miss; + smac_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_mac_sa: exact; + } + size = 1024; + } + apply { + if (meta.ingress_metadata.port_type == 2w0) { + smac.apply(); + } + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + dmac.apply(); + } + } +} + +control process_mac_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_acl.nop") action nop() { + } + @name(".process_mac_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.i2e_mirror_info); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_mac_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_mac_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".mac_acl") table mac_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.l2_metadata.lkp_mac_sa : ternary; + meta.l2_metadata.lkp_mac_da : ternary; + meta.l2_metadata.lkp_mac_type: ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + mac_acl.apply(); + } + } +} + +control process_ip_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ip_acl.nop") action nop() { + } + @name(".process_ip_acl.acl_deny") action acl_deny(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_permit") action acl_permit(bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_mirror") action acl_mirror(bit<32> session_id, bit<14> acl_stats_index, bit<16> acl_meter_index) { + meta.i2e_metadata.mirror_session_id = (bit<16>)session_id; + meta.i2e_metadata.ingress_tstamp = (bit<32>)standard_metadata.ingress_global_timestamp; + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.i2e_mirror_info); + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + } + @name(".process_ip_acl.acl_redirect_nexthop") action acl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = nexthop_index; + meta.acl_metadata.acl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ip_acl.acl_redirect_ecmp") action acl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<16> acl_meter_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_redirect = 1w1; + meta.acl_metadata.acl_nexthop = ecmp_index; + meta.acl_metadata.acl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.meter_metadata.meter_index = acl_meter_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ip_acl") table ip_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + hdr.tcp.flags : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + } + size = 512; + } + @name(".ipv6_acl") table ipv6_acl { + actions = { + nop; + acl_deny; + acl_permit; + acl_mirror; + acl_redirect_nexthop; + acl_redirect_ecmp; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.ipv6_metadata.lkp_ipv6_sa: ternary; + meta.ipv6_metadata.lkp_ipv6_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + hdr.tcp.flags : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x4 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + ip_acl.apply(); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2) { + ipv6_acl.apply(); + } + } + } + } +} + +control process_qos(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_qos.nop") action nop() { + } + @name(".process_qos.apply_cos_marking") action apply_cos_marking(bit<3> cos) { + meta.qos_metadata.marked_cos = cos; + } + @name(".process_qos.apply_dscp_marking") action apply_dscp_marking(bit<8> dscp) { + meta.qos_metadata.marked_dscp = dscp; + } + @name(".process_qos.apply_tc_marking") action apply_tc_marking(bit<3> tc) { + meta.qos_metadata.marked_exp = tc; + } + @name(".qos") table qos { + actions = { + nop; + apply_cos_marking; + apply_dscp_marking; + apply_tc_marking; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_ip_tc : ternary; + meta.tunnel_metadata.mpls_exp : ternary; + meta.qos_metadata.outer_dscp : ternary; + } + size = 512; + } + apply { + qos.apply(); + } +} + +control process_ipv4_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv4_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_s_g_stats; + @name(".ipv4_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv4_multicast_route_star_g_stats; + @name(".process_ipv4_multicast.on_miss") action on_miss() { + } + @name(".process_ipv4_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.nop") action nop() { + } + @name(".process_ipv4_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_bridge") table ipv4_multicast_bridge { + actions = { + on_miss; + multicast_bridge_s_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".ipv4_multicast_bridge_star_g") table ipv4_multicast_bridge_star_g { + actions = { + nop; + multicast_bridge_star_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".process_ipv4_multicast.on_miss_0") action on_miss_0() { + ipv4_multicast_route_s_g_stats.count(); + } + @name(".process_ipv4_multicast.multicast_route_s_g_hit_0") action multicast_route_s_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route") table ipv4_multicast_route { + actions = { + on_miss_0; + multicast_route_s_g_hit_0; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + counters = ipv4_multicast_route_s_g_stats; + } + @name(".process_ipv4_multicast.multicast_route_star_g_miss_0") action multicast_route_star_g_miss_0() { + ipv4_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv4_multicast.multicast_route_sm_star_g_hit_0") action multicast_route_sm_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv4_multicast.multicast_route_bidir_star_g_hit_0") action multicast_route_bidir_star_g_hit_0(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv4_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv4_multicast_route_star_g") table ipv4_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_0; + multicast_route_sm_star_g_hit_0; + multicast_route_bidir_star_g_hit_0; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + counters = ipv4_multicast_route_star_g_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv4_multicast_bridge.apply().action_run) { + on_miss: { + ipv4_multicast_bridge_star_g.apply(); + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv4_multicast_enabled == 1w1) { + switch (ipv4_multicast_route.apply().action_run) { + on_miss_0: { + ipv4_multicast_route_star_g.apply(); + } + } + } + } +} + +control process_ipv6_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ipv6_multicast_route_s_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_s_g_stats; + @name(".ipv6_multicast_route_star_g_stats") direct_counter(CounterType.packets) ipv6_multicast_route_star_g_stats; + @name(".process_ipv6_multicast.on_miss") action on_miss() { + } + @name(".process_ipv6_multicast.multicast_bridge_s_g_hit") action multicast_bridge_s_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.nop") action nop() { + } + @name(".process_ipv6_multicast.multicast_bridge_star_g_hit") action multicast_bridge_star_g_hit(bit<16> mc_index) { + meta.multicast_metadata.multicast_bridge_mc_index = mc_index; + meta.multicast_metadata.mcast_bridge_hit = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcast_rpf_group) { + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_bridge") table ipv6_multicast_bridge { + actions = { + on_miss; + multicast_bridge_s_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".ipv6_multicast_bridge_star_g") table ipv6_multicast_bridge_star_g { + actions = { + nop; + multicast_bridge_star_g_hit; + } + key = { + meta.ingress_metadata.bd : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".process_ipv6_multicast.on_miss_1") action on_miss_1() { + ipv6_multicast_route_s_g_stats.count(); + } + @name(".process_ipv6_multicast.multicast_route_s_g_hit_1") action multicast_route_s_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_s_g_stats.count(); + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route") table ipv6_multicast_route { + actions = { + on_miss_1; + multicast_route_s_g_hit_1; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + counters = ipv6_multicast_route_s_g_stats; + } + @name(".process_ipv6_multicast.multicast_route_star_g_miss_1") action multicast_route_star_g_miss_1() { + ipv6_multicast_route_star_g_stats.count(); + meta.l3_metadata.l3_copy = 1w1; + } + @name(".process_ipv6_multicast.multicast_route_sm_star_g_hit_1") action multicast_route_sm_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w1; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group ^ (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".process_ipv6_multicast.multicast_route_bidir_star_g_hit_1") action multicast_route_bidir_star_g_hit_1(bit<16> mc_index, bit<16> mcast_rpf_group) { + ipv6_multicast_route_star_g_stats.count(); + meta.multicast_metadata.mcast_mode = 2w2; + meta.multicast_metadata.multicast_route_mc_index = mc_index; + meta.multicast_metadata.mcast_route_hit = 1w1; + meta.multicast_metadata.mcast_rpf_group = mcast_rpf_group | (bit<16>)meta.multicast_metadata.bd_mrpf_group; + } + @name(".ipv6_multicast_route_star_g") table ipv6_multicast_route_star_g { + actions = { + multicast_route_star_g_miss_1; + multicast_route_sm_star_g_hit_1; + multicast_route_bidir_star_g_hit_1; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + counters = ipv6_multicast_route_star_g_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x1 == 16w0) { + switch (ipv6_multicast_bridge.apply().action_run) { + on_miss: { + ipv6_multicast_bridge_star_g.apply(); + } + } + } + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0 && meta.multicast_metadata.ipv6_multicast_enabled == 1w1) { + switch (ipv6_multicast_route.apply().action_run) { + on_miss_1: { + ipv6_multicast_route_star_g.apply(); + } + } + } + } +} + +control process_multicast_rpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + apply { + } +} + +control process_multicast(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_multicast") process_ipv4_multicast() process_ipv4_multicast_0; + @name(".process_ipv6_multicast") process_ipv6_multicast() process_ipv6_multicast_0; + @name(".process_multicast_rpf") process_multicast_rpf() process_multicast_rpf_0; + apply { + if (meta.l3_metadata.lkp_ip_type == 2w1) { + process_ipv4_multicast_0.apply(hdr, meta, standard_metadata); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2) { + process_ipv6_multicast_0.apply(hdr, meta, standard_metadata); + } + } + process_multicast_rpf_0.apply(hdr, meta, standard_metadata); + } +} + +control process_ipv4_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_racl.nop") action nop() { + } + @name(".process_ipv4_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv4_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv4_racl") table ipv4_racl { + actions = { + nop; + racl_deny; + racl_permit; + racl_redirect_nexthop; + racl_redirect_ecmp; + } + key = { + meta.acl_metadata.bd_label : ternary; + meta.ipv4_metadata.lkp_ipv4_sa: ternary; + meta.ipv4_metadata.lkp_ipv4_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + } + size = 512; + } + apply { + ipv4_racl.apply(); + } +} + +control process_ipv4_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_urpf.on_miss") action on_miss() { + } + @name(".process_ipv4_urpf.ipv4_urpf_hit") action ipv4_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = (bit<2>)meta.ipv4_metadata.ipv4_urpf_mode; + } + @name(".process_ipv4_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv4_urpf") table ipv4_urpf { + actions = { + on_miss; + ipv4_urpf_hit; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: exact; + } + size = 1024; + } + @name(".ipv4_urpf_lpm") table ipv4_urpf_lpm { + actions = { + ipv4_urpf_hit; + urpf_miss; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_sa: lpm; + } + size = 512; + } + apply { + if (meta.ipv4_metadata.ipv4_urpf_mode != 2w0) { + switch (ipv4_urpf.apply().action_run) { + on_miss: { + ipv4_urpf_lpm.apply(); + } + } + } + } +} + +control process_ipv4_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv4_fib.on_miss") action on_miss() { + } + @name(".process_ipv4_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv4_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv4_fib") table ipv4_fib { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: exact; + } + size = 1024; + } + @name(".ipv4_fib_lpm") table ipv4_fib_lpm { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv4_metadata.lkp_ipv4_da: lpm; + } + size = 512; + } + apply { + switch (ipv4_fib.apply().action_run) { + on_miss: { + ipv4_fib_lpm.apply(); + } + } + } +} + +control process_ipv6_racl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_racl.nop") action nop() { + } + @name(".process_ipv6_racl.racl_deny") action racl_deny(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_deny = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_permit") action racl_permit(bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_nexthop") action racl_redirect_nexthop(bit<16> nexthop_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = nexthop_index; + meta.acl_metadata.racl_nexthop_type = 1w0; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".process_ipv6_racl.racl_redirect_ecmp") action racl_redirect_ecmp(bit<16> ecmp_index, bit<14> acl_stats_index, bit<1> acl_copy, bit<16> acl_copy_reason) { + meta.acl_metadata.racl_redirect = 1w1; + meta.acl_metadata.racl_nexthop = ecmp_index; + meta.acl_metadata.racl_nexthop_type = 1w1; + meta.acl_metadata.acl_stats_index = acl_stats_index; + meta.acl_metadata.acl_copy = acl_copy; + meta.fabric_metadata.reason_code = acl_copy_reason; + } + @name(".ipv6_racl") table ipv6_racl { + actions = { + nop; + racl_deny; + racl_permit; + racl_redirect_nexthop; + racl_redirect_ecmp; + } + key = { + meta.acl_metadata.bd_label : ternary; + meta.ipv6_metadata.lkp_ipv6_sa: ternary; + meta.ipv6_metadata.lkp_ipv6_da: ternary; + meta.l3_metadata.lkp_ip_proto : ternary; + meta.l3_metadata.lkp_l4_sport : ternary; + meta.l3_metadata.lkp_l4_dport : ternary; + } + size = 512; + } + apply { + ipv6_racl.apply(); + } +} + +control process_ipv6_urpf(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_urpf.on_miss") action on_miss() { + } + @name(".process_ipv6_urpf.ipv6_urpf_hit") action ipv6_urpf_hit(bit<16> urpf_bd_group) { + meta.l3_metadata.urpf_hit = 1w1; + meta.l3_metadata.urpf_bd_group = urpf_bd_group; + meta.l3_metadata.urpf_mode = (bit<2>)meta.ipv6_metadata.ipv6_urpf_mode; + } + @name(".process_ipv6_urpf.urpf_miss") action urpf_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".ipv6_urpf") table ipv6_urpf { + actions = { + on_miss; + ipv6_urpf_hit; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: exact; + } + size = 1024; + } + @name(".ipv6_urpf_lpm") table ipv6_urpf_lpm { + actions = { + ipv6_urpf_hit; + urpf_miss; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_sa: lpm; + } + size = 512; + } + apply { + if (meta.ipv6_metadata.ipv6_urpf_mode != 2w0) { + switch (ipv6_urpf.apply().action_run) { + on_miss: { + ipv6_urpf_lpm.apply(); + } + } + } + } +} + +control process_ipv6_fib(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ipv6_fib.on_miss") action on_miss() { + } + @name(".process_ipv6_fib.fib_hit_nexthop") action fib_hit_nexthop(bit<16> nexthop_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = nexthop_index; + meta.l3_metadata.fib_nexthop_type = 1w0; + } + @name(".process_ipv6_fib.fib_hit_ecmp") action fib_hit_ecmp(bit<16> ecmp_index) { + meta.l3_metadata.fib_hit = 1w1; + meta.l3_metadata.fib_nexthop = ecmp_index; + meta.l3_metadata.fib_nexthop_type = 1w1; + } + @name(".ipv6_fib") table ipv6_fib { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: exact; + } + size = 1024; + } + @name(".ipv6_fib_lpm") table ipv6_fib_lpm { + actions = { + on_miss; + fib_hit_nexthop; + fib_hit_ecmp; + } + key = { + meta.l3_metadata.vrf : exact; + meta.ipv6_metadata.lkp_ipv6_da: lpm; + } + size = 512; + } + apply { + switch (ipv6_fib.apply().action_run) { + on_miss: { + ipv6_fib_lpm.apply(); + } + } + } +} + +control process_urpf_bd(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_urpf_bd.nop") action nop() { + } + @name(".process_urpf_bd.urpf_bd_miss") action urpf_bd_miss() { + meta.l3_metadata.urpf_check_fail = 1w1; + } + @name(".urpf_bd") table urpf_bd { + actions = { + nop; + urpf_bd_miss; + } + key = { + meta.l3_metadata.urpf_bd_group: exact; + meta.ingress_metadata.bd : exact; + } + size = 1024; + } + apply { + if (meta.l3_metadata.urpf_mode == 2w2 && meta.l3_metadata.urpf_hit == 1w1) { + urpf_bd.apply(); + } + } +} + +control process_meter_index(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_index") direct_meter>(MeterType.bytes) meter_index; + @name(".process_meter_index.nop") action nop() { + } + @name(".process_meter_index.nop_2") action nop_2() { + meter_index.read(meta.meter_metadata.meter_color); + } + @name(".meter_index") table meter_index_0 { + actions = { + nop_2; + } + key = { + meta.meter_metadata.meter_index: exact; + } + size = 1024; + meters = meter_index; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_index_0.apply(); + } + } +} + +control process_hashes(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_hashes.compute_lkp_ipv4_hash") action compute_lkp_ipv4_hash() { + hash(meta.hash_metadata.hash1, HashAlgorithm.crc16, (bit<16>)0, { meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv4_metadata.lkp_ipv4_sa, meta.ipv4_metadata.lkp_ipv4_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + } + @name(".process_hashes.compute_lkp_ipv6_hash") action compute_lkp_ipv6_hash() { + hash(meta.hash_metadata.hash1, HashAlgorithm.crc16, (bit<16>)0, { meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.ipv6_metadata.lkp_ipv6_sa, meta.ipv6_metadata.lkp_ipv6_da, meta.l3_metadata.lkp_ip_proto, meta.l3_metadata.lkp_l4_sport, meta.l3_metadata.lkp_l4_dport }, (bit<32>)65536); + } + @name(".process_hashes.compute_lkp_non_ip_hash") action compute_lkp_non_ip_hash() { + hash(meta.hash_metadata.hash2, HashAlgorithm.crc16, (bit<16>)0, { meta.ingress_metadata.ifindex, meta.l2_metadata.lkp_mac_sa, meta.l2_metadata.lkp_mac_da, meta.l2_metadata.lkp_mac_type }, (bit<32>)65536); + } + @name(".process_hashes.computed_two_hashes") action computed_two_hashes() { + meta.hash_metadata.entropy_hash = (bit<16>)meta.hash_metadata.hash2; + } + @name(".process_hashes.computed_one_hash") action computed_one_hash() { + meta.hash_metadata.hash1 = (bit<16>)meta.hash_metadata.hash2; + meta.hash_metadata.entropy_hash = (bit<16>)meta.hash_metadata.hash2; + } + @name(".compute_ipv4_hashes") table compute_ipv4_hashes { + actions = { + compute_lkp_ipv4_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_ipv6_hashes") table compute_ipv6_hashes { + actions = { + compute_lkp_ipv6_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_non_ip_hashes") table compute_non_ip_hashes { + actions = { + compute_lkp_non_ip_hash; + } + key = { + meta.ingress_metadata.drop_flag: exact; + } + } + @name(".compute_other_hashes") table compute_other_hashes { + actions = { + computed_two_hashes; + computed_one_hash; + } + key = { + meta.hash_metadata.hash1: exact; + } + } + apply { + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv4.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv4.isValid()) { + compute_ipv4_hashes.apply(); + } else { + if (meta.tunnel_metadata.tunnel_terminate == 1w0 && hdr.ipv6.isValid() || meta.tunnel_metadata.tunnel_terminate == 1w1 && hdr.inner_ipv6.isValid()) { + compute_ipv6_hashes.apply(); + } else { + compute_non_ip_hashes.apply(); + } + } + compute_other_hashes.apply(); + } +} + +control process_meter_action(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".meter_stats") direct_counter(CounterType.packets) meter_stats; + @name(".process_meter_action.meter_permit") action meter_permit() { + } + @name(".process_meter_action.meter_deny") action meter_deny() { + mark_to_drop(standard_metadata); + } + @name(".process_meter_action.meter_permit_0") action meter_permit_0() { + meter_stats.count(); + } + @name(".process_meter_action.meter_deny_0") action meter_deny_0() { + meter_stats.count(); + mark_to_drop(standard_metadata); + } + @name(".meter_action") table meter_action { + actions = { + meter_permit_0; + meter_deny_0; + } + key = { + meta.meter_metadata.meter_color: exact; + meta.meter_metadata.meter_index: exact; + } + size = 1024; + counters = meter_stats; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x10 == 16w0) { + meter_action.apply(); + } + } +} + +@name(".ingress_bd_stats_count") @min_width(32) counter>(32w1024, CounterType.packets_and_bytes) ingress_bd_stats_count; +control process_ingress_bd_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_bd_stats.update_ingress_bd_stats") action update_ingress_bd_stats() { + ingress_bd_stats_count.count((bit<10>)(bit<10>)meta.l2_metadata.bd_stats_idx); + } + @name(".ingress_bd_stats") table ingress_bd_stats { + actions = { + update_ingress_bd_stats; + } + size = 1024; + } + apply { + ingress_bd_stats.apply(); + } +} + +@name(".acl_stats_count") @min_width(16) counter>(32w1024, CounterType.packets_and_bytes) acl_stats_count; +control process_ingress_acl_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_ingress_acl_stats.acl_stats_update") action acl_stats_update() { + acl_stats_count.count((bit<10>)(bit<10>)meta.acl_metadata.acl_stats_index); + } + @name(".acl_stats") table acl_stats { + actions = { + acl_stats_update; + } + size = 1024; + } + apply { + acl_stats.apply(); + } +} + +control process_storm_control_stats(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".storm_control_stats") direct_counter(CounterType.packets) storm_control_stats; + @name(".process_storm_control_stats.nop") action nop() { + } + @name(".process_storm_control_stats.nop_3") action nop_3() { + storm_control_stats.count(); + } + @name(".storm_control_stats") table storm_control_stats_0 { + actions = { + nop_3; + } + key = { + meta.meter_metadata.meter_color: exact; + standard_metadata.ingress_port : exact; + } + size = 1024; + counters = storm_control_stats; + } + apply { + storm_control_stats_0.apply(); + } +} + +control process_fwd_results(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fwd_results.nop") action nop() { + } + @name(".process_fwd_results.set_l2_redirect_action") action set_l2_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.l2_metadata.l2_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.l2_metadata.l2_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_fib_redirect_action") action set_fib_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.l3_metadata.fib_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.l3_metadata.fib_nexthop_type; + meta.l3_metadata.routed = 1w1; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.reason_code = 16w0x217; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_cpu_redirect_action") action set_cpu_redirect_action() { + meta.l3_metadata.routed = 1w0; + standard_metadata.mcast_grp = 16w0; + standard_metadata.egress_spec = 9w64; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_acl_redirect_action") action set_acl_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.acl_metadata.acl_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.acl_metadata.acl_nexthop_type; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_racl_redirect_action") action set_racl_redirect_action() { + meta.l3_metadata.nexthop_index = (bit<16>)meta.acl_metadata.racl_nexthop; + meta.nexthop_metadata.nexthop_type = (bit<1>)meta.acl_metadata.racl_nexthop_type; + meta.l3_metadata.routed = 1w1; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = 16w0; + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_fwd_results.set_multicast_route_action") action set_multicast_route_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = (bit<16>)meta.multicast_metadata.multicast_route_mc_index; + meta.l3_metadata.routed = 1w1; + meta.l3_metadata.same_bd_check = 16w0xffff; + } + @name(".process_fwd_results.set_multicast_bridge_action") action set_multicast_bridge_action() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w0; + standard_metadata.mcast_grp = (bit<16>)meta.multicast_metadata.multicast_bridge_mc_index; + } + @name(".process_fwd_results.set_multicast_flood") action set_multicast_flood() { + meta.fabric_metadata.dst_device = 8w127; + meta.ingress_metadata.egress_ifindex = 16w65535; + } + @name(".process_fwd_results.set_multicast_drop") action set_multicast_drop() { + meta.ingress_metadata.drop_flag = 1w1; + meta.ingress_metadata.drop_reason = 8w44; + } + @name(".fwd_result") table fwd_result { + actions = { + nop; + set_l2_redirect_action; + set_fib_redirect_action; + set_cpu_redirect_action; + set_acl_redirect_action; + set_racl_redirect_action; + set_multicast_route_action; + set_multicast_bridge_action; + set_multicast_flood; + set_multicast_drop; + } + key = { + meta.l2_metadata.l2_redirect : ternary; + meta.acl_metadata.acl_redirect : ternary; + meta.acl_metadata.racl_redirect : ternary; + meta.l3_metadata.rmac_hit : ternary; + meta.l3_metadata.fib_hit : ternary; + meta.l2_metadata.lkp_pkt_type : ternary; + meta.l3_metadata.lkp_ip_type : ternary; + meta.multicast_metadata.igmp_snooping_enabled: ternary; + meta.multicast_metadata.mld_snooping_enabled : ternary; + meta.multicast_metadata.mcast_route_hit : ternary; + meta.multicast_metadata.mcast_bridge_hit : ternary; + meta.multicast_metadata.mcast_rpf_group : ternary; + meta.multicast_metadata.mcast_mode : ternary; + } + size = 512; + } + apply { + if (!(meta.ingress_metadata.bypass_lookups == 16w0xffff)) { + fwd_result.apply(); + } + } +} + +control process_nexthop(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_nexthop.nop") action nop() { + } + @name(".process_nexthop.set_ecmp_nexthop_details") action set_ecmp_nexthop_details(bit<16> ifindex, bit<16> bd, bit<16> nhop_index, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.nexthop_index = nhop_index; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + meta.tunnel_metadata.tunnel_if_check = (bit<1>)meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood") action set_ecmp_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index, bit<16> nhop_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.l3_metadata.nexthop_index = nhop_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".process_nexthop.set_nexthop_details") action set_nexthop_details(bit<16> ifindex, bit<16> bd, bit<1> tunnel) { + meta.ingress_metadata.egress_ifindex = ifindex; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.l2_metadata.same_if_check = meta.l2_metadata.same_if_check ^ (bit<16>)ifindex; + meta.tunnel_metadata.tunnel_if_check = (bit<1>)meta.tunnel_metadata.tunnel_terminate ^ tunnel; + } + @name(".process_nexthop.set_nexthop_details_for_post_routed_flood") action set_nexthop_details_for_post_routed_flood(bit<16> bd, bit<16> uuc_mc_index) { + standard_metadata.mcast_grp = uuc_mc_index; + meta.ingress_metadata.egress_ifindex = 16w0; + meta.l3_metadata.same_bd_check = (bit<16>)meta.ingress_metadata.bd ^ bd; + meta.fabric_metadata.dst_device = 8w127; + } + @name(".ecmp_group") table ecmp_group { + actions = { + nop; + set_ecmp_nexthop_details; + set_ecmp_nexthop_details_for_post_routed_flood; + } + key = { + meta.l3_metadata.nexthop_index: exact; + meta.hash_metadata.hash1 : selector; + } + size = 1024; + implementation = ecmp_action_profile; + } + @name(".nexthop") table nexthop { + actions = { + nop; + set_nexthop_details; + set_nexthop_details_for_post_routed_flood; + } + key = { + meta.l3_metadata.nexthop_index: exact; + } + size = 1024; + } + apply { + if (meta.nexthop_metadata.nexthop_type == 1w1) { + ecmp_group.apply(); + } else { + nexthop.apply(); + } + } +} + +control process_multicast_flooding(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_multicast_flooding.nop") action nop() { + } + @name(".process_multicast_flooding.set_bd_flood_mc_index") action set_bd_flood_mc_index(bit<16> mc_index) { + standard_metadata.mcast_grp = mc_index; + } + @name(".bd_flood") table bd_flood { + actions = { + nop; + set_bd_flood_mc_index; + } + key = { + meta.ingress_metadata.bd : exact; + meta.l2_metadata.lkp_pkt_type: exact; + } + size = 1024; + } + apply { + bd_flood.apply(); + } +} + +control process_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_lag.set_lag_miss") action set_lag_miss() { + } + @name(".process_lag.set_lag_port") action set_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_lag.set_lag_remote_port") action set_lag_remote_port(bit<8> device, bit<16> port) { + meta.fabric_metadata.dst_device = device; + meta.fabric_metadata.dst_port = port; + } + @name(".lag_group") table lag_group { + actions = { + set_lag_miss; + set_lag_port; + set_lag_remote_port; + } + key = { + meta.ingress_metadata.egress_ifindex: exact; + meta.hash_metadata.hash2 : selector; + } + size = 1024; + implementation = lag_action_profile; + } + apply { + lag_group.apply(); + } +} + +@name("mac_learn_digest") struct mac_learn_digest { + bit<16> bd; + bit<48> lkp_mac_sa; + bit<16> ifindex; +} + +control process_mac_learning(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_mac_learning.nop") action nop() { + } + @name(".process_mac_learning.generate_learn_notify") action generate_learn_notify() { + digest((bit<32>)1024, { meta.ingress_metadata.bd, meta.l2_metadata.lkp_mac_sa, meta.ingress_metadata.ifindex }); + } + @name(".learn_notify") table learn_notify { + actions = { + nop; + generate_learn_notify; + } + key = { + meta.l2_metadata.l2_src_miss: ternary; + meta.l2_metadata.l2_src_move: ternary; + meta.l2_metadata.stp_state : ternary; + } + size = 512; + } + apply { + if (meta.l2_metadata.learning_enabled == 1w1) { + learn_notify.apply(); + } + } +} + +control process_fabric_lag(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_fabric_lag.nop") action nop() { + } + @name(".process_fabric_lag.set_fabric_lag_port") action set_fabric_lag_port(bit<9> port) { + standard_metadata.egress_spec = port; + } + @name(".process_fabric_lag.set_fabric_multicast") action set_fabric_multicast(bit<8> fabric_mgid) { + meta.multicast_metadata.mcast_grp = (bit<16>)standard_metadata.mcast_grp; + } + @name(".fabric_lag") table fabric_lag { + actions = { + nop; + set_fabric_lag_port; + set_fabric_multicast; + } + key = { + meta.fabric_metadata.dst_device: exact; + meta.hash_metadata.hash2 : selector; + } + implementation = fabric_lag_action_profile; + } + apply { + fabric_lag.apply(); + } +} + +@name(".drop_stats") counter>(32w1024, CounterType.packets) drop_stats; +@name(".drop_stats_2") counter>(32w1024, CounterType.packets) drop_stats_2; +control process_system_acl(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".process_system_acl.drop_stats_update") action drop_stats_update() { + drop_stats_2.count((bit<10>)(bit<10>)meta.ingress_metadata.drop_reason); + } + @name(".process_system_acl.nop") action nop() { + } + @name(".process_system_acl.copy_to_cpu_with_reason") action copy_to_cpu_with_reason(bit<16> reason_code) { + meta.fabric_metadata.reason_code = reason_code; + clone_preserving_field_list(CloneType.I2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_system_acl.redirect_to_cpu") action redirect_to_cpu(bit<16> reason_code) { + copy_to_cpu_with_reason(reason_code); + mark_to_drop(standard_metadata); + meta.fabric_metadata.dst_device = 8w0; + } + @name(".process_system_acl.copy_to_cpu") action copy_to_cpu() { + clone_preserving_field_list(CloneType.I2E, (bit<32>)32w250, (bit<8>)FieldLists.cpu_info); + } + @name(".process_system_acl.drop_packet") action drop_packet() { + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.drop_packet_with_reason") action drop_packet_with_reason(bit<10> drop_reason) { + drop_stats.count((bit<10>)drop_reason); + mark_to_drop(standard_metadata); + } + @name(".process_system_acl.negative_mirror") action negative_mirror(bit<32> session_id) { + clone_preserving_field_list(CloneType.I2E, (bit<32>)session_id, (bit<8>)FieldLists.mirror_info); + mark_to_drop(standard_metadata); + } + @name(".drop_stats") table drop_stats_0 { + actions = { + drop_stats_update; + } + size = 1024; + } + @name(".system_acl") table system_acl { + actions = { + nop; + redirect_to_cpu; + copy_to_cpu_with_reason; + copy_to_cpu; + drop_packet; + drop_packet_with_reason; + negative_mirror; + } + key = { + meta.acl_metadata.if_label : ternary; + meta.acl_metadata.bd_label : ternary; + meta.l2_metadata.lkp_mac_sa : ternary; + meta.l2_metadata.lkp_mac_da : ternary; + meta.l2_metadata.lkp_mac_type : ternary; + meta.ingress_metadata.ifindex : ternary; + meta.l2_metadata.port_vlan_mapping_miss : ternary; + meta.security_metadata.ipsg_check_fail : ternary; + meta.security_metadata.storm_control_color: ternary; + meta.acl_metadata.acl_deny : ternary; + meta.acl_metadata.racl_deny : ternary; + meta.l3_metadata.urpf_check_fail : ternary; + meta.ingress_metadata.drop_flag : ternary; + meta.acl_metadata.acl_copy : ternary; + meta.l3_metadata.l3_copy : ternary; + meta.l3_metadata.rmac_hit : ternary; + meta.l3_metadata.routed : ternary; + meta.ipv6_metadata.ipv6_src_is_link_local : ternary; + meta.l2_metadata.same_if_check : ternary; + meta.tunnel_metadata.tunnel_if_check : ternary; + meta.l3_metadata.same_bd_check : ternary; + meta.l3_metadata.lkp_ip_ttl : ternary; + meta.l2_metadata.stp_state : ternary; + meta.ingress_metadata.control_frame : ternary; + meta.ipv4_metadata.ipv4_unicast_enabled : ternary; + meta.ipv6_metadata.ipv6_unicast_enabled : ternary; + meta.ingress_metadata.egress_ifindex : ternary; + } + size = 512; + } + apply { + if (meta.ingress_metadata.bypass_lookups & 16w0x20 == 16w0) { + system_acl.apply(); + if (meta.ingress_metadata.drop_flag == 1w1) { + drop_stats_0.apply(); + } + } + } +} + +control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { + @name(".ingress.rmac_hit") action rmac_hit() { + meta.l3_metadata.rmac_hit = 1w1; + } + @name(".ingress.rmac_miss") action rmac_miss() { + meta.l3_metadata.rmac_hit = 1w0; + } + @name(".rmac") table rmac { + actions = { + rmac_hit; + rmac_miss; + } + key = { + meta.l3_metadata.rmac_group: exact; + meta.l2_metadata.lkp_mac_da: exact; + } + size = 1024; + } + @name(".process_ingress_port_mapping") process_ingress_port_mapping() process_ingress_port_mapping_0; + @name(".process_validate_outer_header") process_validate_outer_header() process_validate_outer_header_0; + @name(".process_global_params") process_global_params() process_global_params_0; + @name(".process_port_vlan_mapping") process_port_vlan_mapping() process_port_vlan_mapping_0; + @name(".process_spanning_tree") process_spanning_tree() process_spanning_tree_0; + @name(".process_ip_sourceguard") process_ip_sourceguard() process_ip_sourceguard_0; + @name(".process_int_endpoint") process_int_endpoint() process_int_endpoint_0; + @name(".process_tunnel") process_tunnel() process_tunnel_0; + @name(".process_ingress_sflow") process_ingress_sflow() process_ingress_sflow_0; + @name(".process_storm_control") process_storm_control() process_storm_control_0; + @name(".process_validate_packet") process_validate_packet() process_validate_packet_0; + @name(".process_mac") process_mac() process_mac_0; + @name(".process_mac_acl") process_mac_acl() process_mac_acl_0; + @name(".process_ip_acl") process_ip_acl() process_ip_acl_0; + @name(".process_qos") process_qos() process_qos_0; + @name(".process_multicast") process_multicast() process_multicast_0; + @name(".process_ipv4_racl") process_ipv4_racl() process_ipv4_racl_0; + @name(".process_ipv4_urpf") process_ipv4_urpf() process_ipv4_urpf_0; + @name(".process_ipv4_fib") process_ipv4_fib() process_ipv4_fib_0; + @name(".process_ipv6_racl") process_ipv6_racl() process_ipv6_racl_0; + @name(".process_ipv6_urpf") process_ipv6_urpf() process_ipv6_urpf_0; + @name(".process_ipv6_fib") process_ipv6_fib() process_ipv6_fib_0; + @name(".process_urpf_bd") process_urpf_bd() process_urpf_bd_0; + @name(".process_meter_index") process_meter_index() process_meter_index_0; + @name(".process_hashes") process_hashes() process_hashes_0; + @name(".process_meter_action") process_meter_action() process_meter_action_0; + @name(".process_ingress_bd_stats") process_ingress_bd_stats() process_ingress_bd_stats_0; + @name(".process_ingress_acl_stats") process_ingress_acl_stats() process_ingress_acl_stats_0; + @name(".process_storm_control_stats") process_storm_control_stats() process_storm_control_stats_0; + @name(".process_fwd_results") process_fwd_results() process_fwd_results_0; + @name(".process_nexthop") process_nexthop() process_nexthop_0; + @name(".process_multicast_flooding") process_multicast_flooding() process_multicast_flooding_0; + @name(".process_lag") process_lag() process_lag_0; + @name(".process_mac_learning") process_mac_learning() process_mac_learning_0; + @name(".process_fabric_lag") process_fabric_lag() process_fabric_lag_0; + @name(".process_system_acl") process_system_acl() process_system_acl_0; + apply { + process_ingress_port_mapping_0.apply(hdr, meta, standard_metadata); + process_validate_outer_header_0.apply(hdr, meta, standard_metadata); + process_global_params_0.apply(hdr, meta, standard_metadata); + process_port_vlan_mapping_0.apply(hdr, meta, standard_metadata); + process_spanning_tree_0.apply(hdr, meta, standard_metadata); + process_ip_sourceguard_0.apply(hdr, meta, standard_metadata); + process_int_endpoint_0.apply(hdr, meta, standard_metadata); + process_tunnel_0.apply(hdr, meta, standard_metadata); + process_ingress_sflow_0.apply(hdr, meta, standard_metadata); + process_storm_control_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + if (!(hdr.mpls[0].isValid() && meta.l3_metadata.fib_hit == 1w1)) { + process_validate_packet_0.apply(hdr, meta, standard_metadata); + process_mac_0.apply(hdr, meta, standard_metadata); + if (meta.l3_metadata.lkp_ip_type == 2w0) { + process_mac_acl_0.apply(hdr, meta, standard_metadata); + } else { + process_ip_acl_0.apply(hdr, meta, standard_metadata); + } + process_qos_0.apply(hdr, meta, standard_metadata); + switch (rmac.apply().action_run) { + rmac_miss: { + process_multicast_0.apply(hdr, meta, standard_metadata); + } + default: { + if (meta.ingress_metadata.bypass_lookups & 16w0x2 == 16w0) { + if (meta.l3_metadata.lkp_ip_type == 2w1 && meta.ipv4_metadata.ipv4_unicast_enabled == 1w1) { + process_ipv4_racl_0.apply(hdr, meta, standard_metadata); + process_ipv4_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv4_fib_0.apply(hdr, meta, standard_metadata); + } else { + if (meta.l3_metadata.lkp_ip_type == 2w2 && meta.ipv6_metadata.ipv6_unicast_enabled == 1w1) { + process_ipv6_racl_0.apply(hdr, meta, standard_metadata); + process_ipv6_urpf_0.apply(hdr, meta, standard_metadata); + process_ipv6_fib_0.apply(hdr, meta, standard_metadata); + } + } + process_urpf_bd_0.apply(hdr, meta, standard_metadata); + } + } + } + } + } + process_meter_index_0.apply(hdr, meta, standard_metadata); + process_hashes_0.apply(hdr, meta, standard_metadata); + process_meter_action_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_ingress_bd_stats_0.apply(hdr, meta, standard_metadata); + process_ingress_acl_stats_0.apply(hdr, meta, standard_metadata); + process_storm_control_stats_0.apply(hdr, meta, standard_metadata); + process_fwd_results_0.apply(hdr, meta, standard_metadata); + process_nexthop_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.egress_ifindex == 16w65535) { + process_multicast_flooding_0.apply(hdr, meta, standard_metadata); + } else { + process_lag_0.apply(hdr, meta, standard_metadata); + } + process_mac_learning_0.apply(hdr, meta, standard_metadata); + } + process_fabric_lag_0.apply(hdr, meta, standard_metadata); + if (meta.ingress_metadata.port_type != 2w1) { + process_system_acl_0.apply(hdr, meta, standard_metadata); + } + } +} + +control DeparserImpl(packet_out packet, in headers hdr) { + apply { + packet.emit(hdr.ethernet); + packet.emit(hdr.fabric_header); + packet.emit(hdr.fabric_header_cpu); + packet.emit(hdr.fabric_header_sflow); + packet.emit(hdr.fabric_header_mirror); + packet.emit(hdr.fabric_header_multicast); + packet.emit(hdr.fabric_header_unicast); + packet.emit(hdr.fabric_payload_header); + packet.emit(hdr.llc_header); + packet.emit(hdr.snap_header); + packet.emit(hdr.vlan_tag_[0]); + packet.emit(hdr.vlan_tag_[1]); + packet.emit(hdr.arp_rarp); + packet.emit(hdr.arp_rarp_ipv4); + packet.emit(hdr.ipv6); + packet.emit(hdr.ipv4); + packet.emit(hdr.gre); + packet.emit(hdr.erspan_t3_header); + packet.emit(hdr.nvgre); + packet.emit(hdr.udp); + packet.emit(hdr.sflow); + packet.emit(hdr.vxlan_gpe); + packet.emit(hdr.vxlan_gpe_int_header); + packet.emit(hdr.int_header); + packet.emit(hdr.int_switch_id_header); + packet.emit(hdr.int_ingress_port_id_header); + packet.emit(hdr.int_hop_latency_header); + packet.emit(hdr.int_q_occupancy_header); + packet.emit(hdr.int_ingress_tstamp_header); + packet.emit(hdr.int_egress_port_id_header); + packet.emit(hdr.int_q_congestion_header); + packet.emit(hdr.int_egress_port_tx_utilization_header); + packet.emit(hdr.int_val); + packet.emit(hdr.genv); + packet.emit(hdr.vxlan); + packet.emit(hdr.tcp); + packet.emit(hdr.icmp); + packet.emit(hdr.mpls); + packet.emit(hdr.inner_ethernet); + packet.emit(hdr.inner_ipv6); + packet.emit(hdr.inner_ipv4); + packet.emit(hdr.inner_udp); + packet.emit(hdr.inner_tcp); + packet.emit(hdr.inner_icmp); + } +} + +control verifyChecksum(inout headers hdr, inout metadata meta) { + apply { + verify_checksum(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + verify_checksum(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +control computeChecksum(inout headers hdr, inout metadata meta) { + apply { + update_checksum(hdr.inner_ipv4.ihl == 4w5, { hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr }, hdr.inner_ipv4.hdrChecksum, HashAlgorithm.csum16); + update_checksum(hdr.ipv4.ihl == 4w5, { hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr }, hdr.ipv4.hdrChecksum, HashAlgorithm.csum16); + } +} + +V1Switch(ParserImpl(), verifyChecksum(), ingress(), egress(), computeChecksum(), DeparserImpl()) main; diff --git a/testdata/p4_16_samples_outputs/switch_p4_16.p4-stderr b/testdata/p4_16_samples_outputs/switch_p4_16.p4-stderr new file mode 100644 index 00000000000..466e2014579 --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16.p4-stderr @@ -0,0 +1,51 @@ +switch_p4_16.p4(2254): [--Wwarn=unused] warning: '.process_egress_bd_stats.nop' is unused + @name(".process_egress_bd_stats.nop") action nop() { + ^^^ +switch_p4_16.p4(3281): [--Wwarn=unused] warning: 'enable_dod' is unused + @name(".process_global_params.deflect_on_drop") action deflect_on_drop(bit<8> enable_dod) { + ^^^^^^^^^^ +switch_p4_16.p4(4174): [--Wwarn=unused] warning: '.process_ingress_sflow.sflow_ing_pkt_to_cpu' is unused +..._sflow.sflow_ing_pkt_to_cpu") action sflow_ing_pkt_to_cpu(bit<32> sflow_i2e_mirror_id, bit<16>... + ^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4590): [--Wwarn=unused] warning: '.process_ipv4_multicast.multicast_route_s_g_hit' is unused +...st.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rp... + ^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4596): [--Wwarn=unused] warning: '.process_ipv4_multicast.multicast_route_star_g_miss' is unused +...ame(".process_ipv4_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4599): [--Wwarn=unused] warning: '.process_ipv4_multicast.multicast_route_sm_star_g_hit' is unused +...ast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast... + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4605): [--Wwarn=unused] warning: '.process_ipv4_multicast.multicast_route_bidir_star_g_hit' is unused +...oute_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcas... + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4721): [--Wwarn=unused] warning: '.process_ipv6_multicast.multicast_route_s_g_hit' is unused +...st.multicast_route_s_g_hit") action multicast_route_s_g_hit(bit<16> mc_index, bit<16> mcast_rp... + ^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4727): [--Wwarn=unused] warning: '.process_ipv6_multicast.multicast_route_star_g_miss' is unused +...ame(".process_ipv6_multicast.multicast_route_star_g_miss") action multicast_route_star_g_miss() { + ^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4730): [--Wwarn=unused] warning: '.process_ipv6_multicast.multicast_route_sm_star_g_hit' is unused +...ast_route_sm_star_g_hit") action multicast_route_sm_star_g_hit(bit<16> mc_index, bit<16> mcast... + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(4736): [--Wwarn=unused] warning: '.process_ipv6_multicast.multicast_route_bidir_star_g_hit' is unused +...oute_bidir_star_g_hit") action multicast_route_bidir_star_g_hit(bit<16> mc_index, bit<16> mcas... + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +switch_p4_16.p4(5170): [--Wwarn=unused] warning: '.process_meter_index.nop' is unused + @name(".process_meter_index.nop") action nop() { + ^^^ +switch_p4_16.p4(5260): [--Wwarn=unused] warning: '.process_meter_action.meter_permit' is unused + @name(".process_meter_action.meter_permit") action meter_permit() { + ^^^^^^^^^^^^ +switch_p4_16.p4(5262): [--Wwarn=unused] warning: '.process_meter_action.meter_deny' is unused + @name(".process_meter_action.meter_deny") action meter_deny() { + ^^^^^^^^^^ +switch_p4_16.p4(5325): [--Wwarn=unused] warning: '.process_storm_control_stats.nop' is unused + @name(".process_storm_control_stats.nop") action nop() { + ^^^ +switch_p4_16.p4(5592): [--Wwarn=unused] warning: 'fabric_mgid' is unused +...ame(".process_fabric_lag.set_fabric_multicast") action set_fabric_multicast(bit<8> fabric_mgid) { + ^^^^^^^^^^^ +switch_p4_16.p4(1045): [--Wwarn=parser-transition] warning: SelectCase: unreachable + default: parse_all_int_meta_value_heders; + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/testdata/p4_16_samples_outputs/switch_p4_16.p4.entries.txtpb b/testdata/p4_16_samples_outputs/switch_p4_16.p4.entries.txtpb new file mode 100644 index 00000000000..5cb9652623a --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16.p4.entries.txtpb @@ -0,0 +1,3 @@ +# proto-file: p4/v1/p4runtime.proto +# proto-message: p4.v1.WriteRequest + diff --git a/testdata/p4_16_samples_outputs/switch_p4_16.p4.p4info.txtpb b/testdata/p4_16_samples_outputs/switch_p4_16.p4.p4info.txtpb new file mode 100644 index 00000000000..680335b6d4c --- /dev/null +++ b/testdata/p4_16_samples_outputs/switch_p4_16.p4.p4info.txtpb @@ -0,0 +1,9538 @@ +# proto-file: p4/config/v1/p4info.proto +# proto-message: p4.config.v1.P4Info + +pkg_info { + arch: "v1model" +} +tables { + preamble { + id: 35269139 + name: "rmac" + alias: "rmac" + } + match_fields { + id: 1 + name: "l3_metadata.rmac_group" + bitwidth: 10 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_mac_da" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 22750453 + } + action_refs { + id: 30964672 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 45137609 + name: "ingress_port_mapping" + alias: "ingress_port_mapping" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 21651262 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 288 +} +tables { + preamble { + id: 37820997 + name: "ingress_port_properties" + alias: "ingress_port_properties" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 25837353 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 288 +} +tables { + preamble { + id: 46448234 + name: "validate_outer_ethernet" + alias: "validate_outer_ethernet" + } + match_fields { + id: 1 + name: "ethernet.srcAddr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ethernet.dstAddr" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 3 + name: "vlan_tag_[0].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "vlan_tag_[1].$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24158186 + } + action_refs { + id: 18058436 + } + action_refs { + id: 23838154 + } + action_refs { + id: 20681161 + } + action_refs { + id: 25194127 + } + action_refs { + id: 22589859 + } + action_refs { + id: 18866304 + } + action_refs { + id: 21094556 + } + action_refs { + id: 16999942 + } + action_refs { + id: 32459618 + } + action_refs { + id: 23668099 + } + action_refs { + id: 19271622 + } + action_refs { + id: 26877136 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 35821098 + name: "validate_outer_ipv4_packet" + alias: "validate_outer_ipv4_packet" + } + match_fields { + id: 1 + name: "ipv4.version" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4.ttl" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4.srcAddr" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 31659489 + } + action_refs { + id: 32053722 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 38984075 + name: "validate_outer_ipv6_packet" + alias: "validate_outer_ipv6_packet" + } + match_fields { + id: 1 + name: "ipv6.version" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv6.hopLimit" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv6.srcAddr" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 19738979 + } + action_refs { + id: 21122802 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 35405440 + name: "validate_mpls_packet" + alias: "validate_mpls_packet" + } + match_fields { + id: 1 + name: "mpls[0].label" + bitwidth: 20 + match_type: TERNARY + } + match_fields { + id: 2 + name: "mpls[0].bos" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 3 + name: "mpls[0].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "mpls[1].label" + bitwidth: 20 + match_type: TERNARY + } + match_fields { + id: 5 + name: "mpls[1].bos" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 6 + name: "mpls[1].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 7 + name: "mpls[2].label" + bitwidth: 20 + match_type: TERNARY + } + match_fields { + id: 8 + name: "mpls[2].bos" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 9 + name: "mpls[2].$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 19677850 + } + action_refs { + id: 24735540 + } + action_refs { + id: 28212127 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 49019729 + name: "switch_config_params" + alias: "switch_config_params" + } + action_refs { + id: 33143159 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1 +} +tables { + preamble { + id: 41259296 + name: "port_vlan_mapping" + alias: "port_vlan_mapping" + } + match_fields { + id: 1 + name: "ingress_metadata.ifindex" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "vlan_tag_[0].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "vlan_tag_[0].vid" + bitwidth: 12 + match_type: EXACT + } + match_fields { + id: 4 + name: "vlan_tag_[1].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 5 + name: "vlan_tag_[1].vid" + bitwidth: 12 + match_type: EXACT + } + action_refs { + id: 22017120 + } + action_refs { + id: 29041226 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + implementation_id: 294046256 + size: 4096 +} +tables { + preamble { + id: 48902463 + name: "spanning_tree" + alias: "spanning_tree" + } + match_fields { + id: 1 + name: "ingress_metadata.ifindex" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.stp_group" + bitwidth: 10 + match_type: EXACT + } + action_refs { + id: 28929159 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 34631296 + name: "ipsg" + alias: "ipsg" + } + match_fields { + id: 1 + name: "ingress_metadata.ifindex" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 3 + name: "l2_metadata.lkp_mac_sa" + bitwidth: 48 + match_type: EXACT + } + match_fields { + id: 4 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 19864622 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 42372896 + name: "ipsg_permit_special" + alias: "ipsg_permit_special" + } + match_fields { + id: 1 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 2 + name: "l3_metadata.lkp_l4_dport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 32375263 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 43718534 + name: "int_sink_update_outer" + alias: "int_sink_update_outer" + } + match_fields { + id: 1 + name: "vxlan_gpe_int_header.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "int_metadata_i2e.sink" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 17279442 + } + action_refs { + id: 31931594 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 2 +} +tables { + preamble { + id: 37252615 + name: "int_source" + alias: "int_source" + } + match_fields { + id: 1 + name: "int_header.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 4 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 5 + name: "inner_ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 6 + name: "inner_ipv4.dstAddr" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 7 + name: "inner_ipv4.srcAddr" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 19619341 + } + action_refs { + id: 21001751 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 256 +} +tables { + preamble { + id: 36125942 + name: "int_terminate" + alias: "int_terminate" + } + match_fields { + id: 1 + name: "int_header.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "vxlan_gpe_int_header.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 5 + name: "inner_ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 6 + name: "inner_ipv4.dstAddr" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 21803764 + } + action_refs { + id: 24342599 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 256 +} +tables { + preamble { + id: 42303617 + name: "outer_rmac" + alias: "outer_rmac" + } + match_fields { + id: 1 + name: "l3_metadata.rmac_group" + bitwidth: 10 + match_type: EXACT + } + match_fields { + id: 2 + name: "ethernet.dstAddr" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 29711992 + } + action_refs { + id: 28991583 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 48504506 + name: "tunnel" + alias: "tunnel" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_vni" + bitwidth: 24 + match_type: EXACT + } + match_fields { + id: 2 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + match_fields { + id: 3 + name: "inner_ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "inner_ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 18898796 + } + action_refs { + id: 24672475 + } + action_refs { + id: 23211395 + } + action_refs { + id: 23526149 + } + action_refs { + id: 18522936 + } + action_refs { + id: 32715294 + } + action_refs { + id: 20111209 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 49172403 + name: "tunnel_lookup_miss" + alias: "tunnel_lookup_miss" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24422464 + } + action_refs { + id: 28387461 + } + action_refs { + id: 31440109 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 40604096 + name: "tunnel_miss" + alias: "tunnel_miss" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24422464 + } + action_refs { + id: 28387461 + } + action_refs { + id: 31440109 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 37871573 + name: "fabric_ingress_dst_lkp" + alias: "fabric_ingress_dst_lkp" + } + match_fields { + id: 1 + name: "fabric_header.dstDevice" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 27084838 + } + action_refs { + id: 22005008 + } + action_refs { + id: 22839968 + } + action_refs { + id: 18506852 + } + action_refs { + id: 31902455 + } + action_refs { + id: 18460561 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 48925495 + name: "fabric_ingress_src_lkp" + alias: "fabric_ingress_src_lkp" + } + match_fields { + id: 1 + name: "fabric_header_multicast.ingressIfindex" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 27084838 + } + action_refs { + id: 23765326 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 33574130 + name: "native_packet_over_fabric" + alias: "native_packet_over_fabric" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24318970 + } + action_refs { + id: 23432228 + } + action_refs { + id: 23871111 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39378248 + name: "outer_ipv4_multicast" + alias: "outer_ipv4_multicast" + } + match_fields { + id: 1 + name: "multicast_metadata.ipv4_mcast_key_type" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "multicast_metadata.ipv4_mcast_key" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4.srcAddr" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 4 + name: "ipv4.dstAddr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 32259460 + } + action_refs { + id: 23546635 + } + action_refs { + id: 31609603 + } + action_refs { + id: 30591697 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 45349970 + name: "outer_ipv4_multicast_star_g" + alias: "outer_ipv4_multicast_star_g" + } + match_fields { + id: 1 + name: "multicast_metadata.ipv4_mcast_key_type" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "multicast_metadata.ipv4_mcast_key" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4.dstAddr" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 32259460 + } + action_refs { + id: 24876054 + } + action_refs { + id: 27911208 + } + action_refs { + id: 27512720 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 40866239 + name: "outer_ipv6_multicast" + alias: "outer_ipv6_multicast" + } + match_fields { + id: 1 + name: "multicast_metadata.ipv6_mcast_key_type" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "multicast_metadata.ipv6_mcast_key" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv6.srcAddr" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 4 + name: "ipv6.dstAddr" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 21349752 + } + action_refs { + id: 32292236 + } + action_refs { + id: 27301347 + } + action_refs { + id: 17490289 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 49726981 + name: "outer_ipv6_multicast_star_g" + alias: "outer_ipv6_multicast_star_g" + } + match_fields { + id: 1 + name: "multicast_metadata.ipv6_mcast_key_type" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "multicast_metadata.ipv6_mcast_key" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv6.dstAddr" + bitwidth: 128 + match_type: TERNARY + } + action_refs { + id: 21349752 + } + action_refs { + id: 30581794 + } + action_refs { + id: 25007526 + } + action_refs { + id: 31047255 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 49682272 + name: "ipv4_dest_vtep" + alias: "ipv4_dest_vtep" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4.dstAddr" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 3 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + action_refs { + id: 19016590 + } + action_refs { + id: 31006027 + } + action_refs { + id: 23366223 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41016400 + name: "ipv4_src_vtep" + alias: "ipv4_src_vtep" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4.srcAddr" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 3 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + action_refs { + id: 28405894 + } + action_refs { + id: 32475207 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 35379918 + name: "ipv6_dest_vtep" + alias: "ipv6_dest_vtep" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.dstAddr" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 3 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + action_refs { + id: 21014138 + } + action_refs { + id: 22005284 + } + action_refs { + id: 20650129 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 40406325 + name: "ipv6_src_vtep" + alias: "ipv6_src_vtep" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.srcAddr" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 3 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + action_refs { + id: 27984459 + } + action_refs { + id: 32425009 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 34776118 + name: "mpls" + alias: "mpls" + } + match_fields { + id: 1 + name: "tunnel_metadata.mpls_label" + bitwidth: 20 + match_type: EXACT + } + match_fields { + id: 2 + name: "inner_ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "inner_ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 30543761 + } + action_refs { + id: 31950977 + } + action_refs { + id: 33002058 + } + action_refs { + id: 27925902 + } + action_refs { + id: 17012616 + } + action_refs { + id: 30146383 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39690474 + name: "sflow_ing_take_sample" + alias: "sflow_ing_take_sample" + } + match_fields { + id: 1 + name: "ingress_metadata.sflow_take_sample" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "sflow_metadata.sflow_session_id" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 24076177 + } + action_refs { + id: 17728634 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 329536454 + size: 1024 +} +tables { + preamble { + id: 41586812 + name: "sflow_ingress" + alias: "sflow_ingress" + } + match_fields { + id: 1 + name: "ingress_metadata.ifindex" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 4 + name: "sflow.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 18023811 + } + action_refs { + id: 32308659 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 42506855 + name: "storm_control" + alias: "storm_control" + } + match_fields { + id: 1 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_pkt_type" + bitwidth: 3 + match_type: TERNARY + } + action_refs { + id: 20064305 + } + action_refs { + id: 28092460 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 39492092 + name: "validate_packet" + alias: "validate_packet" + } + match_fields { + id: 1 + name: "l2_metadata.lkp_mac_sa" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 2 + name: "l2_metadata.lkp_mac_da" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 3 + name: "l3_metadata.lkp_ip_type" + bitwidth: 2 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l3_metadata.lkp_ip_ttl" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_ip_version" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 6 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 7 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 22596660 + } + action_refs { + id: 33090078 + } + action_refs { + id: 31579497 + } + action_refs { + id: 20389093 + } + action_refs { + id: 24790754 + } + action_refs { + id: 23632964 + } + action_refs { + id: 31827807 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 37018274 + name: "dmac" + alias: "dmac" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_mac_da" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 20843312 + } + action_refs { + id: 28636382 + } + action_refs { + id: 26825571 + } + action_refs { + id: 17035899 + } + action_refs { + id: 17676061 + } + action_refs { + id: 25708383 + } + action_refs { + id: 21196761 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 + idle_timeout_behavior: NOTIFY_CONTROL +} +tables { + preamble { + id: 34426950 + name: "smac" + alias: "smac" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_mac_sa" + bitwidth: 48 + match_type: EXACT + } + action_refs { + id: 20843312 + } + action_refs { + id: 32116865 + } + action_refs { + id: 29714262 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 37614439 + name: "mac_acl" + alias: "mac_acl" + } + match_fields { + id: 1 + name: "acl_metadata.if_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "l2_metadata.lkp_mac_sa" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l2_metadata.lkp_mac_da" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l2_metadata.lkp_mac_type" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 19661619 + } + action_refs { + id: 29832062 + } + action_refs { + id: 31672487 + } + action_refs { + id: 31291018 + } + action_refs { + id: 23354860 + } + action_refs { + id: 19482584 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 46358072 + name: "ip_acl" + alias: "ip_acl" + } + match_fields { + id: 1 + name: "acl_metadata.if_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 4 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 6 + name: "l3_metadata.lkp_l4_sport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 7 + name: "l3_metadata.lkp_l4_dport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 8 + name: "tcp.flags" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 9 + name: "l3_metadata.lkp_ip_ttl" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 21469574 + } + action_refs { + id: 16882986 + } + action_refs { + id: 18679243 + } + action_refs { + id: 31503642 + } + action_refs { + id: 33214426 + } + action_refs { + id: 23655829 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 39741088 + name: "ipv6_acl" + alias: "ipv6_acl" + } + match_fields { + id: 1 + name: "acl_metadata.if_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: TERNARY + } + match_fields { + id: 4 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 6 + name: "l3_metadata.lkp_l4_sport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 7 + name: "l3_metadata.lkp_l4_dport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 8 + name: "tcp.flags" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 9 + name: "l3_metadata.lkp_ip_ttl" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 21469574 + } + action_refs { + id: 16882986 + } + action_refs { + id: 18679243 + } + action_refs { + id: 31503642 + } + action_refs { + id: 33214426 + } + action_refs { + id: 23655829 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 33610309 + name: "qos" + alias: "qos" + } + match_fields { + id: 1 + name: "acl_metadata.if_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_ip_tc" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 6 + name: "tunnel_metadata.mpls_exp" + bitwidth: 3 + match_type: TERNARY + } + match_fields { + id: 7 + name: "qos_metadata.outer_dscp" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 24132248 + } + action_refs { + id: 20289283 + } + action_refs { + id: 17815210 + } + action_refs { + id: 25333645 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 37734657 + name: "ipv4_multicast_bridge" + alias: "ipv4_multicast_bridge" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 32951744 + } + action_refs { + id: 22392983 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 43156007 + name: "ipv4_multicast_bridge_star_g" + alias: "ipv4_multicast_bridge_star_g" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 26636518 + } + action_refs { + id: 32567036 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 33753925 + name: "ipv4_multicast_route" + alias: "ipv4_multicast_route" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 27901704 + } + action_refs { + id: 18672239 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 325625044 + size: 1024 +} +tables { + preamble { + id: 45227473 + name: "ipv4_multicast_route_star_g" + alias: "ipv4_multicast_route_star_g" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 18382607 + } + action_refs { + id: 22881515 + } + action_refs { + id: 26925750 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 334762335 + size: 1024 +} +tables { + preamble { + id: 42718885 + name: "ipv6_multicast_bridge" + alias: "ipv6_multicast_bridge" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 21831302 + } + action_refs { + id: 16968482 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 42837982 + name: "ipv6_multicast_bridge_star_g" + alias: "ipv6_multicast_bridge_star_g" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 22617804 + } + action_refs { + id: 31460681 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41794846 + name: "ipv6_multicast_route" + alias: "ipv6_multicast_route" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 27868772 + } + action_refs { + id: 19495550 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 327278089 + size: 1024 +} +tables { + preamble { + id: 43802673 + name: "ipv6_multicast_route_star_g" + alias: "ipv6_multicast_route_star_g" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 17623212 + } + action_refs { + id: 29242413 + } + action_refs { + id: 21636917 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 330716124 + size: 1024 +} +tables { + preamble { + id: 38177981 + name: "ipv4_racl" + alias: "ipv4_racl" + } + match_fields { + id: 1 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_l4_sport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 6 + name: "l3_metadata.lkp_l4_dport" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 23020886 + } + action_refs { + id: 17324596 + } + action_refs { + id: 23904743 + } + action_refs { + id: 19870712 + } + action_refs { + id: 30301194 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 46881968 + name: "ipv4_urpf" + alias: "ipv4_urpf" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 29021353 + } + action_refs { + id: 24117923 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 47318777 + name: "ipv4_urpf_lpm" + alias: "ipv4_urpf_lpm" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_sa" + bitwidth: 32 + match_type: LPM + } + action_refs { + id: 24117923 + } + action_refs { + id: 19173129 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 45153808 + name: "ipv4_fib" + alias: "ipv4_fib" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 19369381 + } + action_refs { + id: 22250449 + } + action_refs { + id: 20714683 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 45846823 + name: "ipv4_fib_lpm" + alias: "ipv4_fib_lpm" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4_metadata.lkp_ipv4_da" + bitwidth: 32 + match_type: LPM + } + action_refs { + id: 19369381 + } + action_refs { + id: 22250449 + } + action_refs { + id: 20714683 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 46746743 + name: "ipv6_racl" + alias: "ipv6_racl" + } + match_fields { + id: 1 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: TERNARY + } + match_fields { + id: 3 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l3_metadata.lkp_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.lkp_l4_sport" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 6 + name: "l3_metadata.lkp_l4_dport" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 19202626 + } + action_refs { + id: 22653749 + } + action_refs { + id: 22108072 + } + action_refs { + id: 22033917 + } + action_refs { + id: 26202673 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 48568816 + name: "ipv6_urpf" + alias: "ipv6_urpf" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 33532084 + } + action_refs { + id: 30875552 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 34899392 + name: "ipv6_urpf_lpm" + alias: "ipv6_urpf_lpm" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_sa" + bitwidth: 128 + match_type: LPM + } + action_refs { + id: 30875552 + } + action_refs { + id: 24330304 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 34003242 + name: "ipv6_fib" + alias: "ipv6_fib" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: EXACT + } + action_refs { + id: 23085876 + } + action_refs { + id: 24244023 + } + action_refs { + id: 26074845 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39945691 + name: "ipv6_fib_lpm" + alias: "ipv6_fib_lpm" + } + match_fields { + id: 1 + name: "l3_metadata.vrf" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6_metadata.lkp_ipv6_da" + bitwidth: 128 + match_type: LPM + } + action_refs { + id: 23085876 + } + action_refs { + id: 24244023 + } + action_refs { + id: 26074845 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 42076696 + name: "urpf_bd" + alias: "urpf_bd" + } + match_fields { + id: 1 + name: "l3_metadata.urpf_bd_group" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 32064785 + } + action_refs { + id: 30904346 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 43755749 + name: "meter_index" + alias: "meter_index" + } + match_fields { + id: 1 + name: "meter_metadata.meter_index" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 22558474 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 362522853 + size: 1024 +} +tables { + preamble { + id: 44394787 + name: "compute_ipv4_hashes" + alias: "compute_ipv4_hashes" + } + match_fields { + id: 1 + name: "ingress_metadata.drop_flag" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 32621822 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 49291859 + name: "compute_ipv6_hashes" + alias: "compute_ipv6_hashes" + } + match_fields { + id: 1 + name: "ingress_metadata.drop_flag" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 22832502 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41387945 + name: "compute_non_ip_hashes" + alias: "compute_non_ip_hashes" + } + match_fields { + id: 1 + name: "ingress_metadata.drop_flag" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24849986 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 43675111 + name: "compute_other_hashes" + alias: "compute_other_hashes" + } + match_fields { + id: 1 + name: "hash_metadata.hash1" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 17777123 + } + action_refs { + id: 29059294 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 37395571 + name: "meter_action" + alias: "meter_action" + } + match_fields { + id: 1 + name: "meter_metadata.meter_color" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 2 + name: "meter_metadata.meter_index" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 23449258 + } + action_refs { + id: 18319227 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 328880782 + size: 1024 +} +tables { + preamble { + id: 45847248 + name: "ingress_bd_stats" + alias: "ingress_bd_stats" + } + action_refs { + id: 22439752 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 33991319 + name: "acl_stats" + alias: "acl_stats" + } + action_refs { + id: 22920417 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39000192 + name: "storm_control_stats" + alias: "storm_control_stats" + } + match_fields { + id: 1 + name: "meter_metadata.meter_color" + bitwidth: 2 + match_type: EXACT + } + match_fields { + id: 2 + name: "standard_metadata.ingress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 22604419 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 324212864 + size: 1024 +} +tables { + preamble { + id: 35081746 + name: "fwd_result" + alias: "fwd_result" + } + match_fields { + id: 1 + name: "l2_metadata.l2_redirect" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 2 + name: "acl_metadata.acl_redirect" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 3 + name: "acl_metadata.racl_redirect" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l3_metadata.rmac_hit" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l3_metadata.fib_hit" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 6 + name: "l2_metadata.lkp_pkt_type" + bitwidth: 3 + match_type: TERNARY + } + match_fields { + id: 7 + name: "l3_metadata.lkp_ip_type" + bitwidth: 2 + match_type: TERNARY + } + match_fields { + id: 8 + name: "multicast_metadata.igmp_snooping_enabled" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 9 + name: "multicast_metadata.mld_snooping_enabled" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 10 + name: "multicast_metadata.mcast_route_hit" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 11 + name: "multicast_metadata.mcast_bridge_hit" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 12 + name: "multicast_metadata.mcast_rpf_group" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 13 + name: "multicast_metadata.mcast_mode" + bitwidth: 2 + match_type: TERNARY + } + action_refs { + id: 16804848 + } + action_refs { + id: 17002596 + } + action_refs { + id: 32139265 + } + action_refs { + id: 21445098 + } + action_refs { + id: 18475473 + } + action_refs { + id: 17492614 + } + action_refs { + id: 22605342 + } + action_refs { + id: 20020886 + } + action_refs { + id: 17448174 + } + action_refs { + id: 30784012 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 37801575 + name: "ecmp_group" + alias: "ecmp_group" + } + match_fields { + id: 1 + name: "l3_metadata.nexthop_index" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 21821898 + } + action_refs { + id: 23407940 + } + action_refs { + id: 21031053 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + implementation_id: 297500867 + size: 1024 +} +tables { + preamble { + id: 46720761 + name: "nexthop" + alias: "nexthop" + } + match_fields { + id: 1 + name: "l3_metadata.nexthop_index" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 21821898 + } + action_refs { + id: 21867633 + } + action_refs { + id: 31926291 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41026090 + name: "bd_flood" + alias: "bd_flood" + } + match_fields { + id: 1 + name: "ingress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_pkt_type" + bitwidth: 3 + match_type: EXACT + } + action_refs { + id: 21091506 + } + action_refs { + id: 28003351 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39929658 + name: "lag_group" + alias: "lag_group" + } + match_fields { + id: 1 + name: "ingress_metadata.egress_ifindex" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 17136543 + } + action_refs { + id: 26583734 + } + action_refs { + id: 17749532 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + implementation_id: 301351402 + size: 1024 +} +tables { + preamble { + id: 42035756 + name: "learn_notify" + alias: "learn_notify" + } + match_fields { + id: 1 + name: "l2_metadata.l2_src_miss" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 2 + name: "l2_metadata.l2_src_move" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "l2_metadata.stp_state" + bitwidth: 3 + match_type: TERNARY + } + action_refs { + id: 25859160 + } + action_refs { + id: 23905849 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 49655016 + name: "fabric_lag" + alias: "fabric_lag" + } + match_fields { + id: 1 + name: "fabric_metadata.dst_device" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 31087776 + } + action_refs { + id: 20535052 + } + action_refs { + id: 26581760 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + implementation_id: 298941036 + size: 1024 +} +tables { + preamble { + id: 34622126 + name: "drop_stats" + alias: "drop_stats" + } + action_refs { + id: 25605858 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41037284 + name: "system_acl" + alias: "system_acl" + } + match_fields { + id: 1 + name: "acl_metadata.if_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 2 + name: "acl_metadata.bd_label" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 3 + name: "l2_metadata.lkp_mac_sa" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 4 + name: "l2_metadata.lkp_mac_da" + bitwidth: 48 + match_type: TERNARY + } + match_fields { + id: 5 + name: "l2_metadata.lkp_mac_type" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 6 + name: "ingress_metadata.ifindex" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 7 + name: "l2_metadata.port_vlan_mapping_miss" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 8 + name: "security_metadata.ipsg_check_fail" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 9 + name: "security_metadata.storm_control_color" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 10 + name: "acl_metadata.acl_deny" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 11 + name: "acl_metadata.racl_deny" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 12 + name: "l3_metadata.urpf_check_fail" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 13 + name: "ingress_metadata.drop_flag" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 14 + name: "acl_metadata.acl_copy" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 15 + name: "l3_metadata.l3_copy" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 16 + name: "l3_metadata.rmac_hit" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 17 + name: "l3_metadata.routed" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 18 + name: "ipv6_metadata.ipv6_src_is_link_local" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 19 + name: "l2_metadata.same_if_check" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 20 + name: "tunnel_metadata.tunnel_if_check" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 21 + name: "l3_metadata.same_bd_check" + bitwidth: 16 + match_type: TERNARY + } + match_fields { + id: 22 + name: "l3_metadata.lkp_ip_ttl" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 23 + name: "l2_metadata.stp_state" + bitwidth: 3 + match_type: TERNARY + } + match_fields { + id: 24 + name: "ingress_metadata.control_frame" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 25 + name: "ipv4_metadata.ipv4_unicast_enabled" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 26 + name: "ipv6_metadata.ipv6_unicast_enabled" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 27 + name: "ingress_metadata.egress_ifindex" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 30951662 + } + action_refs { + id: 29730527 + } + action_refs { + id: 18002712 + } + action_refs { + id: 26836234 + } + action_refs { + id: 19384363 + } + action_refs { + id: 21945631 + } + action_refs { + id: 17559966 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 39446660 + name: "egress_port_mapping" + alias: "egress_port_mapping" + } + match_fields { + id: 1 + name: "standard_metadata.egress_port" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 26603359 + } + action_refs { + id: 28945045 + } + action_refs { + id: 30096172 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 288 +} +tables { + preamble { + id: 39859235 + name: "mirror" + alias: "mirror" + } + match_fields { + id: 1 + name: "i2e_metadata.mirror_session_id" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 25692703 + } + action_refs { + id: 27128095 + } + action_refs { + id: 28364382 + } + action_refs { + id: 24517251 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 48573872 + name: "replica_type" + alias: "replica_type" + } + match_fields { + id: 1 + name: "multicast_metadata.replica" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "egress_metadata.same_bd_check" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 33114731 + } + action_refs { + id: 32648356 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 42274517 + name: "rid" + alias: "rid" + } + match_fields { + id: 1 + name: "standard_metadata.egress_rid" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 33114731 + } + action_refs { + id: 17928584 + } + action_refs { + id: 27400339 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 44905886 + name: "vlan_decap" + alias: "vlan_decap" + } + match_fields { + id: 1 + name: "vlan_tag_[0].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "vlan_tag_[1].$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 24051746 + } + action_refs { + id: 18645134 + } + action_refs { + id: 24210138 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 35270252 + name: "tunnel_decap_process_inner" + alias: "tunnel_decap_process_inner" + } + match_fields { + id: 1 + name: "inner_tcp.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "inner_udp.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "inner_icmp.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 18743292 + } + action_refs { + id: 26630855 + } + action_refs { + id: 29295160 + } + action_refs { + id: 28715521 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 49983332 + name: "tunnel_decap_process_outer" + alias: "tunnel_decap_process_outer" + } + match_fields { + id: 1 + name: "tunnel_metadata.ingress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + match_fields { + id: 2 + name: "inner_ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "inner_ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 17768838 + } + action_refs { + id: 28048063 + } + action_refs { + id: 24553741 + } + action_refs { + id: 24262097 + } + action_refs { + id: 32575184 + } + action_refs { + id: 20772090 + } + action_refs { + id: 30471945 + } + action_refs { + id: 28525261 + } + action_refs { + id: 20211497 + } + action_refs { + id: 20138720 + } + action_refs { + id: 23326534 + } + action_refs { + id: 28031461 + } + action_refs { + id: 22180437 + } + action_refs { + id: 28785442 + } + action_refs { + id: 24377716 + } + action_refs { + id: 19988268 + } + action_refs { + id: 31512019 + } + action_refs { + id: 23147554 + } + action_refs { + id: 32879799 + } + action_refs { + id: 24177007 + } + action_refs { + id: 21926248 + } + action_refs { + id: 24083695 + } + action_refs { + id: 26267777 + } + action_refs { + id: 24959429 + } + action_refs { + id: 21148947 + } + action_refs { + id: 28587059 + } + action_refs { + id: 33232904 + } + action_refs { + id: 29258460 + } + action_refs { + id: 21921128 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 34821388 + name: "rewrite" + alias: "rewrite" + } + match_fields { + id: 1 + name: "l3_metadata.nexthop_index" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 29889416 + } + action_refs { + id: 20836470 + } + action_refs { + id: 20985643 + } + action_refs { + id: 32028714 + } + action_refs { + id: 20456020 + } + action_refs { + id: 18070213 + } + action_refs { + id: 29931909 + } + action_refs { + id: 23741811 + } + action_refs { + id: 16881143 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 42423456 + name: "rewrite_multicast" + alias: "rewrite_multicast" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv4.dstAddr" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 4 + name: "ipv6.dstAddr" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 29889416 + } + action_refs { + id: 29525111 + } + action_refs { + id: 22371099 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 45947985 + name: "egress_bd_map" + alias: "egress_bd_map" + } + match_fields { + id: 1 + name: "egress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 17174709 + } + action_refs { + id: 27472973 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 35585248 + name: "l3_rewrite" + alias: "l3_rewrite" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "mpls[0].$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "ipv4.dstAddr" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 5 + name: "ipv6.dstAddr" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 31144289 + } + action_refs { + id: 17709619 + } + action_refs { + id: 24899669 + } + action_refs { + id: 32319601 + } + action_refs { + id: 22422486 + } + action_refs { + id: 25682421 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 42713323 + name: "smac_rewrite" + alias: "smac_rewrite" + } + match_fields { + id: 1 + name: "egress_metadata.smac_idx" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 19760197 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +tables { + preamble { + id: 40484047 + name: "mtu" + alias: "mtu" + } + match_fields { + id: 1 + name: "l3_metadata.mtu_index" + bitwidth: 8 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 17753646 + } + action_refs { + id: 18299046 + } + action_refs { + id: 17842211 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41904683 + name: "int_bos" + alias: "int_bos" + } + match_fields { + id: 1 + name: "int_header.total_hop_cnt" + bitwidth: 8 + match_type: TERNARY + } + match_fields { + id: 2 + name: "int_header.instruction_mask_0003" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 3 + name: "int_header.instruction_mask_0407" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 4 + name: "int_header.instruction_mask_0811" + bitwidth: 4 + match_type: TERNARY + } + match_fields { + id: 5 + name: "int_header.instruction_mask_1215" + bitwidth: 4 + match_type: TERNARY + } + action_refs { + id: 23094047 + } + action_refs { + id: 33173909 + } + action_refs { + id: 22301520 + } + action_refs { + id: 19288675 + } + action_refs { + id: 17432508 + } + action_refs { + id: 31106134 + } + action_refs { + id: 30747137 + } + action_refs { + id: 22733351 + } + action_refs { + id: 22920701 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 17 +} +tables { + preamble { + id: 49400589 + name: "int_insert" + alias: "int_insert" + } + match_fields { + id: 1 + name: "int_metadata_i2e.source" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 2 + name: "int_metadata_i2e.sink" + bitwidth: 1 + match_type: TERNARY + } + match_fields { + id: 3 + name: "int_header.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 32129728 + } + action_refs { + id: 30253665 + } + action_refs { + id: 31721162 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 3 +} +tables { + preamble { + id: 41278214 + name: "int_inst_0003" + alias: "int_inst_0003" + } + match_fields { + id: 1 + name: "int_header.instruction_mask_0003" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 32954241 + } + action_refs { + id: 23275607 + } + action_refs { + id: 27102412 + } + action_refs { + id: 19654120 + } + action_refs { + id: 33241480 + } + action_refs { + id: 21600805 + } + action_refs { + id: 17232287 + } + action_refs { + id: 25861291 + } + action_refs { + id: 18608589 + } + action_refs { + id: 33380240 + } + action_refs { + id: 26461414 + } + action_refs { + id: 22833659 + } + action_refs { + id: 24557103 + } + action_refs { + id: 27791506 + } + action_refs { + id: 33127732 + } + action_refs { + id: 22273001 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 17 +} +tables { + preamble { + id: 38121347 + name: "int_inst_0407" + alias: "int_inst_0407" + } + match_fields { + id: 1 + name: "int_header.instruction_mask_0407" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 32620806 + } + action_refs { + id: 22767065 + } + action_refs { + id: 25397293 + } + action_refs { + id: 17416507 + } + action_refs { + id: 21456310 + } + action_refs { + id: 31754480 + } + action_refs { + id: 19256178 + } + action_refs { + id: 17553212 + } + action_refs { + id: 28210305 + } + action_refs { + id: 25663543 + } + action_refs { + id: 24312477 + } + action_refs { + id: 18804214 + } + action_refs { + id: 31441272 + } + action_refs { + id: 20594206 + } + action_refs { + id: 18158548 + } + action_refs { + id: 32114559 + } + action_refs { + id: 22920701 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 17 +} +tables { + preamble { + id: 39263322 + name: "int_inst_0811" + alias: "int_inst_0811" + } + match_fields { + id: 1 + name: "int_header.instruction_mask_0811" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 22920701 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 16 +} +tables { + preamble { + id: 43158992 + name: "int_inst_1215" + alias: "int_inst_1215" + } + match_fields { + id: 1 + name: "int_header.instruction_mask_1215" + bitwidth: 4 + match_type: EXACT + } + action_refs { + id: 22920701 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 17 +} +tables { + preamble { + id: 45150684 + name: "int_meta_header_update" + alias: "int_meta_header_update" + } + match_fields { + id: 1 + name: "int_metadata.insert_cnt" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 19665188 + } + action_refs { + id: 26727289 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 2 +} +tables { + preamble { + id: 44032150 + name: "egress_bd_stats" + alias: "egress_bd_stats" + } + match_fields { + id: 1 + name: "egress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "l2_metadata.lkp_pkt_type" + bitwidth: 3 + match_type: EXACT + } + action_refs { + id: 26379098 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + direct_resource_ids: 329244822 + size: 1024 +} +tables { + preamble { + id: 37327412 + name: "egress_vni" + alias: "egress_vni" + } + match_fields { + id: 1 + name: "egress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "tunnel_metadata.egress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 17672696 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 36990184 + name: "tunnel_dmac_rewrite" + alias: "tunnel_dmac_rewrite" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_dmac_index" + bitwidth: 14 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 31137876 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 47714865 + name: "tunnel_dst_rewrite" + alias: "tunnel_dst_rewrite" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_dst_index" + bitwidth: 14 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 31188157 + } + action_refs { + id: 26316217 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 35868587 + name: "tunnel_encap_process_inner" + alias: "tunnel_encap_process_inner" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "ipv6.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "tcp.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "udp.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 5 + name: "icmp.$valid$" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 22012831 + } + action_refs { + id: 32489680 + } + action_refs { + id: 18677479 + } + action_refs { + id: 27242308 + } + action_refs { + id: 18850099 + } + action_refs { + id: 25639607 + } + action_refs { + id: 19613422 + } + action_refs { + id: 30542777 + } + action_refs { + id: 24131522 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 49020003 + name: "tunnel_encap_process_outer" + alias: "tunnel_encap_process_outer" + } + match_fields { + id: 1 + name: "tunnel_metadata.egress_tunnel_type" + bitwidth: 5 + match_type: EXACT + } + match_fields { + id: 2 + name: "tunnel_metadata.egress_header_count" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 3 + name: "multicast_metadata.replica" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 20103093 + } + action_refs { + id: 19046026 + } + action_refs { + id: 25961605 + } + action_refs { + id: 23176024 + } + action_refs { + id: 32138848 + } + action_refs { + id: 32256671 + } + action_refs { + id: 20523098 + } + action_refs { + id: 18288010 + } + action_refs { + id: 26867995 + } + action_refs { + id: 32157079 + } + action_refs { + id: 31421314 + } + action_refs { + id: 21179245 + } + action_refs { + id: 25235855 + } + action_refs { + id: 23444864 + } + action_refs { + id: 20797182 + } + action_refs { + id: 24407457 + } + action_refs { + id: 20185303 + } + action_refs { + id: 32853703 + } + action_refs { + id: 25002800 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 42237704 + name: "tunnel_mtu" + alias: "tunnel_mtu" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_index" + bitwidth: 14 + match_type: EXACT + } + action_refs { + id: 21075337 + } + action_refs { + id: 32323556 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 39011605 + name: "tunnel_rewrite" + alias: "tunnel_rewrite" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_index" + bitwidth: 14 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 19600568 + } + action_refs { + id: 25019307 + } + action_refs { + id: 32131701 + } + action_refs { + id: 18296528 + } + action_refs { + id: 19608310 + } + action_refs { + id: 23356140 + } + action_refs { + id: 28769719 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 36355689 + name: "tunnel_smac_rewrite" + alias: "tunnel_smac_rewrite" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_smac_index" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 21832280 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 45323855 + name: "tunnel_src_rewrite" + alias: "tunnel_src_rewrite" + } + match_fields { + id: 1 + name: "tunnel_metadata.tunnel_src_index" + bitwidth: 9 + match_type: EXACT + } + action_refs { + id: 26010426 + } + action_refs { + id: 26252648 + } + action_refs { + id: 17291318 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 43497430 + name: "int_outer_encap" + alias: "int_outer_encap" + } + match_fields { + id: 1 + name: "ipv4.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 2 + name: "vxlan_gpe.$valid$" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 3 + name: "int_metadata_i2e.source" + bitwidth: 1 + match_type: EXACT + } + match_fields { + id: 4 + name: "tunnel_metadata.egress_tunnel_type" + bitwidth: 5 + match_type: TERNARY + } + action_refs { + id: 17270234 + } + action_refs { + id: 28075883 + } + action_refs { + id: 22421955 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 8 +} +tables { + preamble { + id: 38010437 + name: "egress_vlan_xlate" + alias: "egress_vlan_xlate" + } + match_fields { + id: 1 + name: "egress_metadata.ifindex" + bitwidth: 16 + match_type: EXACT + } + match_fields { + id: 2 + name: "egress_metadata.bd" + bitwidth: 16 + match_type: EXACT + } + action_refs { + id: 25117848 + } + action_refs { + id: 17087433 + } + action_refs { + id: 25310390 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 41497774 + name: "egress_filter" + alias: "egress_filter" + } + action_refs { + id: 28243510 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 44507649 + name: "egress_filter_drop" + alias: "egress_filter_drop" + } + action_refs { + id: 20968920 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 1024 +} +tables { + preamble { + id: 40332640 + name: "egress_acl" + alias: "egress_acl" + } + match_fields { + id: 1 + name: "standard_metadata.egress_port" + bitwidth: 9 + match_type: TERNARY + } + match_fields { + id: 2 + name: "l3_metadata.l3_mtu_check" + bitwidth: 16 + match_type: TERNARY + } + action_refs { + id: 23035377 + } + action_refs { + id: 17820530 + } + action_refs { + id: 30057387 + } + action_refs { + id: 29764557 + } + action_refs { + id: 21257015 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + initial_default_action { + action_id: 21257015 + } + size: 512 +} +actions { + preamble { + id: 21257015 + name: "NoAction" + alias: "NoAction" + annotations: "@noWarn(\"unused\")" + } +} +actions { + preamble { + id: 22750453 + name: "ingress.rmac_hit" + alias: "rmac_hit" + } +} +actions { + preamble { + id: 30964672 + name: "ingress.rmac_miss" + alias: "rmac_miss" + } +} +actions { + preamble { + id: 21651262 + name: "process_ingress_port_mapping.set_ifindex" + alias: "set_ifindex" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } + params { + id: 2 + name: "port_type" + bitwidth: 2 + } +} +actions { + preamble { + id: 25837353 + name: "process_ingress_port_mapping.set_ingress_port_properties" + alias: "set_ingress_port_properties" + } + params { + id: 1 + name: "if_label" + bitwidth: 16 + } +} +actions { + preamble { + id: 24158186 + name: "process_validate_outer_header.malformed_outer_ethernet_packet" + alias: "malformed_outer_ethernet_packet" + } + params { + id: 1 + name: "drop_reason" + bitwidth: 8 + } +} +actions { + preamble { + id: 18058436 + name: "process_validate_outer_header.set_valid_outer_unicast_packet_untagged" + alias: "set_valid_outer_unicast_packet_untagged" + } +} +actions { + preamble { + id: 23838154 + name: "process_validate_outer_header.set_valid_outer_unicast_packet_single_tagged" + alias: "set_valid_outer_unicast_packet_single_tagged" + } +} +actions { + preamble { + id: 20681161 + name: "process_validate_outer_header.set_valid_outer_unicast_packet_double_tagged" + alias: "set_valid_outer_unicast_packet_double_tagged" + } +} +actions { + preamble { + id: 25194127 + name: "process_validate_outer_header.set_valid_outer_unicast_packet_qinq_tagged" + alias: "set_valid_outer_unicast_packet_qinq_tagged" + } +} +actions { + preamble { + id: 22589859 + name: "process_validate_outer_header.set_valid_outer_multicast_packet_untagged" + alias: "set_valid_outer_multicast_packet_untagged" + } +} +actions { + preamble { + id: 18866304 + name: "process_validate_outer_header.set_valid_outer_multicast_packet_single_tagged" + alias: "set_valid_outer_multicast_packet_single_tagged" + } +} +actions { + preamble { + id: 21094556 + name: "process_validate_outer_header.set_valid_outer_multicast_packet_double_tagged" + alias: "set_valid_outer_multicast_packet_double_tagged" + } +} +actions { + preamble { + id: 16999942 + name: "process_validate_outer_header.set_valid_outer_multicast_packet_qinq_tagged" + alias: "set_valid_outer_multicast_packet_qinq_tagged" + } +} +actions { + preamble { + id: 32459618 + name: "process_validate_outer_header.set_valid_outer_broadcast_packet_untagged" + alias: "set_valid_outer_broadcast_packet_untagged" + } +} +actions { + preamble { + id: 23668099 + name: "process_validate_outer_header.set_valid_outer_broadcast_packet_single_tagged" + alias: "set_valid_outer_broadcast_packet_single_tagged" + } +} +actions { + preamble { + id: 19271622 + name: "process_validate_outer_header.set_valid_outer_broadcast_packet_double_tagged" + alias: "set_valid_outer_broadcast_packet_double_tagged" + } +} +actions { + preamble { + id: 26877136 + name: "process_validate_outer_header.set_valid_outer_broadcast_packet_qinq_tagged" + alias: "set_valid_outer_broadcast_packet_qinq_tagged" + } +} +actions { + preamble { + id: 31659489 + name: "validate_outer_ipv4_header.set_valid_outer_ipv4_packet" + alias: "set_valid_outer_ipv4_packet" + } +} +actions { + preamble { + id: 32053722 + name: "validate_outer_ipv4_header.set_malformed_outer_ipv4_packet" + alias: "set_malformed_outer_ipv4_packet" + } + params { + id: 1 + name: "drop_reason" + bitwidth: 8 + } +} +actions { + preamble { + id: 19738979 + name: "validate_outer_ipv6_header.set_valid_outer_ipv6_packet" + alias: "set_valid_outer_ipv6_packet" + } +} +actions { + preamble { + id: 21122802 + name: "validate_outer_ipv6_header.set_malformed_outer_ipv6_packet" + alias: "set_malformed_outer_ipv6_packet" + } + params { + id: 1 + name: "drop_reason" + bitwidth: 8 + } +} +actions { + preamble { + id: 19677850 + name: "validate_mpls_header.set_valid_mpls_label1" + alias: "set_valid_mpls_label1" + } +} +actions { + preamble { + id: 24735540 + name: "validate_mpls_header.set_valid_mpls_label2" + alias: "set_valid_mpls_label2" + } +} +actions { + preamble { + id: 28212127 + name: "validate_mpls_header.set_valid_mpls_label3" + alias: "set_valid_mpls_label3" + } +} +actions { + preamble { + id: 33143159 + name: "process_global_params.set_config_parameters" + alias: "set_config_parameters" + } + params { + id: 1 + name: "enable_dod" + bitwidth: 8 + } +} +actions { + preamble { + id: 22017120 + name: "process_port_vlan_mapping.set_bd_properties" + alias: "set_bd_properties" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "vrf" + bitwidth: 16 + } + params { + id: 3 + name: "stp_group" + bitwidth: 10 + } + params { + id: 4 + name: "learning_enabled" + bitwidth: 1 + } + params { + id: 5 + name: "bd_label" + bitwidth: 16 + } + params { + id: 6 + name: "stats_idx" + bitwidth: 16 + } + params { + id: 7 + name: "rmac_group" + bitwidth: 10 + } + params { + id: 8 + name: "ipv4_unicast_enabled" + bitwidth: 1 + } + params { + id: 9 + name: "ipv6_unicast_enabled" + bitwidth: 1 + } + params { + id: 10 + name: "ipv4_urpf_mode" + bitwidth: 2 + } + params { + id: 11 + name: "ipv6_urpf_mode" + bitwidth: 2 + } + params { + id: 12 + name: "igmp_snooping_enabled" + bitwidth: 1 + } + params { + id: 13 + name: "mld_snooping_enabled" + bitwidth: 1 + } + params { + id: 14 + name: "ipv4_multicast_enabled" + bitwidth: 1 + } + params { + id: 15 + name: "ipv6_multicast_enabled" + bitwidth: 1 + } + params { + id: 16 + name: "mrpf_group" + bitwidth: 16 + } + params { + id: 17 + name: "ipv4_mcast_key" + bitwidth: 16 + } + params { + id: 18 + name: "ipv4_mcast_key_type" + bitwidth: 1 + } + params { + id: 19 + name: "ipv6_mcast_key" + bitwidth: 16 + } + params { + id: 20 + name: "ipv6_mcast_key_type" + bitwidth: 1 + } +} +actions { + preamble { + id: 29041226 + name: "process_port_vlan_mapping.port_vlan_mapping_miss" + alias: "port_vlan_mapping_miss" + } +} +actions { + preamble { + id: 28929159 + name: "process_spanning_tree.set_stp_state" + alias: "set_stp_state" + } + params { + id: 1 + name: "stp_state" + bitwidth: 3 + } +} +actions { + preamble { + id: 19864622 + name: "process_ip_sourceguard.on_miss" + alias: "process_ip_sourceguard.on_miss" + } +} +actions { + preamble { + id: 32375263 + name: "process_ip_sourceguard.ipsg_miss" + alias: "ipsg_miss" + } +} +actions { + preamble { + id: 17279442 + name: "process_int_endpoint.int_sink_update_vxlan_gpe_v4" + alias: "int_sink_update_vxlan_gpe_v4" + } +} +actions { + preamble { + id: 31931594 + name: "process_int_endpoint.nop" + alias: "process_int_endpoint.nop" + } +} +actions { + preamble { + id: 19619341 + name: "process_int_endpoint.int_set_src" + alias: "int_set_src" + } +} +actions { + preamble { + id: 21001751 + name: "process_int_endpoint.int_set_no_src" + alias: "int_set_no_src" + } +} +actions { + preamble { + id: 21803764 + name: "process_int_endpoint.int_sink_gpe" + alias: "int_sink_gpe" + } + params { + id: 1 + name: "mirror_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 24342599 + name: "process_int_endpoint.int_no_sink" + alias: "int_no_sink" + } +} +actions { + preamble { + id: 29711992 + name: "process_tunnel.on_miss" + alias: "process_tunnel.on_miss" + } +} +actions { + preamble { + id: 28991583 + name: "process_tunnel.outer_rmac_hit" + alias: "outer_rmac_hit" + } +} +actions { + preamble { + id: 18898796 + name: "process_tunnel.nop" + alias: "process_tunnel.nop" + } +} +actions { + preamble { + id: 24672475 + name: "process_tunnel.tunnel_lookup_miss" + alias: "process_tunnel.tunnel_lookup_miss" + } +} +actions { + preamble { + id: 23211395 + name: "process_tunnel.terminate_tunnel_inner_non_ip" + alias: "terminate_tunnel_inner_non_ip" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "bd_label" + bitwidth: 16 + } + params { + id: 3 + name: "stats_idx" + bitwidth: 16 + } +} +actions { + preamble { + id: 23526149 + name: "process_tunnel.terminate_tunnel_inner_ethernet_ipv4" + alias: "terminate_tunnel_inner_ethernet_ipv4" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "vrf" + bitwidth: 16 + } + params { + id: 3 + name: "rmac_group" + bitwidth: 10 + } + params { + id: 4 + name: "bd_label" + bitwidth: 16 + } + params { + id: 5 + name: "ipv4_unicast_enabled" + bitwidth: 1 + } + params { + id: 6 + name: "ipv4_urpf_mode" + bitwidth: 2 + } + params { + id: 7 + name: "igmp_snooping_enabled" + bitwidth: 1 + } + params { + id: 8 + name: "stats_idx" + bitwidth: 16 + } + params { + id: 9 + name: "ipv4_multicast_enabled" + bitwidth: 1 + } + params { + id: 10 + name: "mrpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 18522936 + name: "process_tunnel.terminate_tunnel_inner_ipv4" + alias: "terminate_tunnel_inner_ipv4" + } + params { + id: 1 + name: "vrf" + bitwidth: 16 + } + params { + id: 2 + name: "rmac_group" + bitwidth: 10 + } + params { + id: 3 + name: "ipv4_urpf_mode" + bitwidth: 2 + } + params { + id: 4 + name: "ipv4_unicast_enabled" + bitwidth: 1 + } + params { + id: 5 + name: "ipv4_multicast_enabled" + bitwidth: 1 + } + params { + id: 6 + name: "mrpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 32715294 + name: "process_tunnel.terminate_tunnel_inner_ethernet_ipv6" + alias: "terminate_tunnel_inner_ethernet_ipv6" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "vrf" + bitwidth: 16 + } + params { + id: 3 + name: "rmac_group" + bitwidth: 10 + } + params { + id: 4 + name: "bd_label" + bitwidth: 16 + } + params { + id: 5 + name: "ipv6_unicast_enabled" + bitwidth: 1 + } + params { + id: 6 + name: "ipv6_urpf_mode" + bitwidth: 2 + } + params { + id: 7 + name: "mld_snooping_enabled" + bitwidth: 1 + } + params { + id: 8 + name: "stats_idx" + bitwidth: 16 + } + params { + id: 9 + name: "ipv6_multicast_enabled" + bitwidth: 1 + } + params { + id: 10 + name: "mrpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 20111209 + name: "process_tunnel.terminate_tunnel_inner_ipv6" + alias: "terminate_tunnel_inner_ipv6" + } + params { + id: 1 + name: "vrf" + bitwidth: 16 + } + params { + id: 2 + name: "rmac_group" + bitwidth: 10 + } + params { + id: 3 + name: "ipv6_unicast_enabled" + bitwidth: 1 + } + params { + id: 4 + name: "ipv6_urpf_mode" + bitwidth: 2 + } + params { + id: 5 + name: "ipv6_multicast_enabled" + bitwidth: 1 + } + params { + id: 6 + name: "mrpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 24422464 + name: "process_tunnel.non_ip_tunnel_lookup_miss" + alias: "non_ip_tunnel_lookup_miss" + } +} +actions { + preamble { + id: 28387461 + name: "process_tunnel.ipv4_tunnel_lookup_miss" + alias: "ipv4_tunnel_lookup_miss" + } +} +actions { + preamble { + id: 31440109 + name: "process_tunnel.ipv6_tunnel_lookup_miss" + alias: "ipv6_tunnel_lookup_miss" + } +} +actions { + preamble { + id: 27084838 + name: "process_ingress_fabric.nop" + alias: "process_ingress_fabric.nop" + } +} +actions { + preamble { + id: 22005008 + name: "process_ingress_fabric.terminate_cpu_packet" + alias: "terminate_cpu_packet" + } +} +actions { + preamble { + id: 22839968 + name: "process_ingress_fabric.switch_fabric_unicast_packet" + alias: "switch_fabric_unicast_packet" + } +} +actions { + preamble { + id: 18506852 + name: "process_ingress_fabric.terminate_fabric_unicast_packet" + alias: "terminate_fabric_unicast_packet" + } +} +actions { + preamble { + id: 31902455 + name: "process_ingress_fabric.switch_fabric_multicast_packet" + alias: "switch_fabric_multicast_packet" + } +} +actions { + preamble { + id: 18460561 + name: "process_ingress_fabric.terminate_fabric_multicast_packet" + alias: "terminate_fabric_multicast_packet" + } +} +actions { + preamble { + id: 23765326 + name: "process_ingress_fabric.set_ingress_ifindex_properties" + alias: "set_ingress_ifindex_properties" + } +} +actions { + preamble { + id: 24318970 + name: "process_ingress_fabric.non_ip_over_fabric" + alias: "non_ip_over_fabric" + } +} +actions { + preamble { + id: 23432228 + name: "process_ingress_fabric.ipv4_over_fabric" + alias: "ipv4_over_fabric" + } +} +actions { + preamble { + id: 23871111 + name: "process_ingress_fabric.ipv6_over_fabric" + alias: "ipv6_over_fabric" + } +} +actions { + preamble { + id: 32259460 + name: "process_outer_ipv4_multicast.nop" + alias: "process_outer_ipv4_multicast.nop" + } +} +actions { + preamble { + id: 23546635 + name: "process_outer_ipv4_multicast.on_miss" + alias: "process_outer_ipv4_multicast.on_miss" + } +} +actions { + preamble { + id: 31609603 + name: "process_outer_ipv4_multicast.outer_multicast_route_s_g_hit" + alias: "process_outer_ipv4_multicast.outer_multicast_route_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 30591697 + name: "process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit" + alias: "process_outer_ipv4_multicast.outer_multicast_bridge_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 24876054 + name: "process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit" + alias: "process_outer_ipv4_multicast.outer_multicast_route_sm_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 27911208 + name: "process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit" + alias: "process_outer_ipv4_multicast.outer_multicast_route_bidir_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 27512720 + name: "process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit" + alias: "process_outer_ipv4_multicast.outer_multicast_bridge_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 21349752 + name: "process_outer_ipv6_multicast.nop" + alias: "process_outer_ipv6_multicast.nop" + } +} +actions { + preamble { + id: 32292236 + name: "process_outer_ipv6_multicast.on_miss" + alias: "process_outer_ipv6_multicast.on_miss" + } +} +actions { + preamble { + id: 27301347 + name: "process_outer_ipv6_multicast.outer_multicast_route_s_g_hit" + alias: "process_outer_ipv6_multicast.outer_multicast_route_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 17490289 + name: "process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit" + alias: "process_outer_ipv6_multicast.outer_multicast_bridge_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 30581794 + name: "process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit" + alias: "process_outer_ipv6_multicast.outer_multicast_route_sm_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 25007526 + name: "process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit" + alias: "process_outer_ipv6_multicast.outer_multicast_route_bidir_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 31047255 + name: "process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit" + alias: "process_outer_ipv6_multicast.outer_multicast_bridge_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 19016590 + name: "process_ipv4_vtep.nop" + alias: "process_ipv4_vtep.nop" + } +} +actions { + preamble { + id: 31006027 + name: "process_ipv4_vtep.set_tunnel_termination_flag" + alias: "process_ipv4_vtep.set_tunnel_termination_flag" + } +} +actions { + preamble { + id: 23366223 + name: "process_ipv4_vtep.set_tunnel_vni_and_termination_flag" + alias: "process_ipv4_vtep.set_tunnel_vni_and_termination_flag" + } + params { + id: 1 + name: "tunnel_vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 28405894 + name: "process_ipv4_vtep.on_miss" + alias: "process_ipv4_vtep.on_miss" + } +} +actions { + preamble { + id: 32475207 + name: "process_ipv4_vtep.src_vtep_hit" + alias: "process_ipv4_vtep.src_vtep_hit" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 21014138 + name: "process_ipv6_vtep.nop" + alias: "process_ipv6_vtep.nop" + } +} +actions { + preamble { + id: 22005284 + name: "process_ipv6_vtep.set_tunnel_termination_flag" + alias: "process_ipv6_vtep.set_tunnel_termination_flag" + } +} +actions { + preamble { + id: 20650129 + name: "process_ipv6_vtep.set_tunnel_vni_and_termination_flag" + alias: "process_ipv6_vtep.set_tunnel_vni_and_termination_flag" + } + params { + id: 1 + name: "tunnel_vni" + bitwidth: 24 + } +} +actions { + preamble { + id: 27984459 + name: "process_ipv6_vtep.on_miss" + alias: "process_ipv6_vtep.on_miss" + } +} +actions { + preamble { + id: 32425009 + name: "process_ipv6_vtep.src_vtep_hit" + alias: "process_ipv6_vtep.src_vtep_hit" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 30543761 + name: "process_mpls.terminate_eompls" + alias: "terminate_eompls" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 31950977 + name: "process_mpls.terminate_vpls" + alias: "terminate_vpls" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 33002058 + name: "process_mpls.terminate_ipv4_over_mpls" + alias: "terminate_ipv4_over_mpls" + } + params { + id: 1 + name: "vrf" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 27925902 + name: "process_mpls.terminate_ipv6_over_mpls" + alias: "terminate_ipv6_over_mpls" + } + params { + id: 1 + name: "vrf" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 17012616 + name: "process_mpls.terminate_pw" + alias: "terminate_pw" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 30146383 + name: "process_mpls.forward_mpls" + alias: "forward_mpls" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 18023811 + name: "process_ingress_sflow.nop" + alias: "process_ingress_sflow.nop" + } +} +actions { + preamble { + id: 32308659 + name: "process_ingress_sflow.sflow_ing_session_enable" + alias: "sflow_ing_session_enable" + } + params { + id: 1 + name: "rate_thr" + bitwidth: 32 + } + params { + id: 2 + name: "session_id" + bitwidth: 16 + } +} +actions { + preamble { + id: 24076177 + name: "process_ingress_sflow.nop_1" + alias: "nop_1" + } +} +actions { + preamble { + id: 17728634 + name: "process_ingress_sflow.sflow_ing_pkt_to_cpu_0" + alias: "sflow_ing_pkt_to_cpu_0" + } + params { + id: 1 + name: "sflow_i2e_mirror_id" + bitwidth: 32 + } + params { + id: 2 + name: "reason_code" + bitwidth: 16 + } +} +actions { + preamble { + id: 20064305 + name: "process_storm_control.nop" + alias: "process_storm_control.nop" + } +} +actions { + preamble { + id: 28092460 + name: "process_storm_control.set_storm_control_meter" + alias: "set_storm_control_meter" + } + params { + id: 1 + name: "meter_idx" + bitwidth: 16 + } +} +actions { + preamble { + id: 22596660 + name: "process_validate_packet.nop" + alias: "process_validate_packet.nop" + } +} +actions { + preamble { + id: 33090078 + name: "process_validate_packet.set_unicast" + alias: "set_unicast" + } +} +actions { + preamble { + id: 31579497 + name: "process_validate_packet.set_unicast_and_ipv6_src_is_link_local" + alias: "set_unicast_and_ipv6_src_is_link_local" + } +} +actions { + preamble { + id: 20389093 + name: "process_validate_packet.set_multicast" + alias: "set_multicast" + } +} +actions { + preamble { + id: 24790754 + name: "process_validate_packet.set_multicast_and_ipv6_src_is_link_local" + alias: "set_multicast_and_ipv6_src_is_link_local" + } +} +actions { + preamble { + id: 23632964 + name: "process_validate_packet.set_broadcast" + alias: "set_broadcast" + } +} +actions { + preamble { + id: 31827807 + name: "process_validate_packet.set_malformed_packet" + alias: "set_malformed_packet" + } + params { + id: 1 + name: "drop_reason" + bitwidth: 8 + } +} +actions { + preamble { + id: 20843312 + name: "process_mac.nop" + alias: "process_mac.nop" + } +} +actions { + preamble { + id: 28636382 + name: "process_mac.dmac_hit" + alias: "dmac_hit" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 26825571 + name: "process_mac.dmac_multicast_hit" + alias: "dmac_multicast_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 17035899 + name: "process_mac.dmac_miss" + alias: "dmac_miss" + } +} +actions { + preamble { + id: 17676061 + name: "process_mac.dmac_redirect_nexthop" + alias: "dmac_redirect_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 25708383 + name: "process_mac.dmac_redirect_ecmp" + alias: "dmac_redirect_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 21196761 + name: "process_mac.dmac_drop" + alias: "dmac_drop" + } +} +actions { + preamble { + id: 32116865 + name: "process_mac.smac_miss" + alias: "smac_miss" + } +} +actions { + preamble { + id: 29714262 + name: "process_mac.smac_hit" + alias: "smac_hit" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 19661619 + name: "process_mac_acl.nop" + alias: "process_mac_acl.nop" + } +} +actions { + preamble { + id: 29832062 + name: "process_mac_acl.acl_deny" + alias: "process_mac_acl.acl_deny" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 31672487 + name: "process_mac_acl.acl_permit" + alias: "process_mac_acl.acl_permit" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 31291018 + name: "process_mac_acl.acl_mirror" + alias: "process_mac_acl.acl_mirror" + } + params { + id: 1 + name: "session_id" + bitwidth: 32 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 23354860 + name: "process_mac_acl.acl_redirect_nexthop" + alias: "process_mac_acl.acl_redirect_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 4 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 5 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 19482584 + name: "process_mac_acl.acl_redirect_ecmp" + alias: "process_mac_acl.acl_redirect_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 4 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 5 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 21469574 + name: "process_ip_acl.nop" + alias: "process_ip_acl.nop" + } +} +actions { + preamble { + id: 16882986 + name: "process_ip_acl.acl_deny" + alias: "process_ip_acl.acl_deny" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 18679243 + name: "process_ip_acl.acl_permit" + alias: "process_ip_acl.acl_permit" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 31503642 + name: "process_ip_acl.acl_mirror" + alias: "process_ip_acl.acl_mirror" + } + params { + id: 1 + name: "session_id" + bitwidth: 32 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 33214426 + name: "process_ip_acl.acl_redirect_nexthop" + alias: "process_ip_acl.acl_redirect_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 4 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 5 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 23655829 + name: "process_ip_acl.acl_redirect_ecmp" + alias: "process_ip_acl.acl_redirect_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_meter_index" + bitwidth: 16 + } + params { + id: 4 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 5 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 24132248 + name: "process_qos.nop" + alias: "process_qos.nop" + } +} +actions { + preamble { + id: 20289283 + name: "process_qos.apply_cos_marking" + alias: "apply_cos_marking" + } + params { + id: 1 + name: "cos" + bitwidth: 3 + } +} +actions { + preamble { + id: 17815210 + name: "process_qos.apply_dscp_marking" + alias: "apply_dscp_marking" + } + params { + id: 1 + name: "dscp" + bitwidth: 8 + } +} +actions { + preamble { + id: 25333645 + name: "process_qos.apply_tc_marking" + alias: "apply_tc_marking" + } + params { + id: 1 + name: "tc" + bitwidth: 3 + } +} +actions { + preamble { + id: 32951744 + name: "process_ipv4_multicast.on_miss" + alias: "process_ipv4_multicast.on_miss" + } +} +actions { + preamble { + id: 22392983 + name: "process_ipv4_multicast.multicast_bridge_s_g_hit" + alias: "process_ipv4_multicast.multicast_bridge_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 26636518 + name: "process_ipv4_multicast.nop" + alias: "process_ipv4_multicast.nop" + } +} +actions { + preamble { + id: 32567036 + name: "process_ipv4_multicast.multicast_bridge_star_g_hit" + alias: "process_ipv4_multicast.multicast_bridge_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 27901704 + name: "process_ipv4_multicast.on_miss_0" + alias: "on_miss_0" + } +} +actions { + preamble { + id: 18672239 + name: "process_ipv4_multicast.multicast_route_s_g_hit_0" + alias: "multicast_route_s_g_hit_0" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 18382607 + name: "process_ipv4_multicast.multicast_route_star_g_miss_0" + alias: "multicast_route_star_g_miss_0" + } +} +actions { + preamble { + id: 22881515 + name: "process_ipv4_multicast.multicast_route_sm_star_g_hit_0" + alias: "multicast_route_sm_star_g_hit_0" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 26925750 + name: "process_ipv4_multicast.multicast_route_bidir_star_g_hit_0" + alias: "multicast_route_bidir_star_g_hit_0" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 21831302 + name: "process_ipv6_multicast.on_miss" + alias: "process_ipv6_multicast.on_miss" + } +} +actions { + preamble { + id: 16968482 + name: "process_ipv6_multicast.multicast_bridge_s_g_hit" + alias: "process_ipv6_multicast.multicast_bridge_s_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 22617804 + name: "process_ipv6_multicast.nop" + alias: "process_ipv6_multicast.nop" + } +} +actions { + preamble { + id: 31460681 + name: "process_ipv6_multicast.multicast_bridge_star_g_hit" + alias: "process_ipv6_multicast.multicast_bridge_star_g_hit" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 27868772 + name: "process_ipv6_multicast.on_miss_1" + alias: "on_miss_1" + } +} +actions { + preamble { + id: 19495550 + name: "process_ipv6_multicast.multicast_route_s_g_hit_1" + alias: "multicast_route_s_g_hit_1" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 17623212 + name: "process_ipv6_multicast.multicast_route_star_g_miss_1" + alias: "multicast_route_star_g_miss_1" + } +} +actions { + preamble { + id: 29242413 + name: "process_ipv6_multicast.multicast_route_sm_star_g_hit_1" + alias: "multicast_route_sm_star_g_hit_1" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 21636917 + name: "process_ipv6_multicast.multicast_route_bidir_star_g_hit_1" + alias: "multicast_route_bidir_star_g_hit_1" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } + params { + id: 2 + name: "mcast_rpf_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 23020886 + name: "process_ipv4_racl.nop" + alias: "process_ipv4_racl.nop" + } +} +actions { + preamble { + id: 17324596 + name: "process_ipv4_racl.racl_deny" + alias: "process_ipv4_racl.racl_deny" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 3 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 23904743 + name: "process_ipv4_racl.racl_permit" + alias: "process_ipv4_racl.racl_permit" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 3 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 19870712 + name: "process_ipv4_racl.racl_redirect_nexthop" + alias: "process_ipv4_racl.racl_redirect_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 30301194 + name: "process_ipv4_racl.racl_redirect_ecmp" + alias: "process_ipv4_racl.racl_redirect_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 29021353 + name: "process_ipv4_urpf.on_miss" + alias: "process_ipv4_urpf.on_miss" + } +} +actions { + preamble { + id: 24117923 + name: "process_ipv4_urpf.ipv4_urpf_hit" + alias: "ipv4_urpf_hit" + } + params { + id: 1 + name: "urpf_bd_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 19173129 + name: "process_ipv4_urpf.urpf_miss" + alias: "process_ipv4_urpf.urpf_miss" + } +} +actions { + preamble { + id: 19369381 + name: "process_ipv4_fib.on_miss" + alias: "process_ipv4_fib.on_miss" + } +} +actions { + preamble { + id: 22250449 + name: "process_ipv4_fib.fib_hit_nexthop" + alias: "process_ipv4_fib.fib_hit_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 20714683 + name: "process_ipv4_fib.fib_hit_ecmp" + alias: "process_ipv4_fib.fib_hit_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 19202626 + name: "process_ipv6_racl.nop" + alias: "process_ipv6_racl.nop" + } +} +actions { + preamble { + id: 22653749 + name: "process_ipv6_racl.racl_deny" + alias: "process_ipv6_racl.racl_deny" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 3 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 22108072 + name: "process_ipv6_racl.racl_permit" + alias: "process_ipv6_racl.racl_permit" + } + params { + id: 1 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 2 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 3 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 22033917 + name: "process_ipv6_racl.racl_redirect_nexthop" + alias: "process_ipv6_racl.racl_redirect_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 26202673 + name: "process_ipv6_racl.racl_redirect_ecmp" + alias: "process_ipv6_racl.racl_redirect_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } + params { + id: 2 + name: "acl_stats_index" + bitwidth: 14 + } + params { + id: 3 + name: "acl_copy" + bitwidth: 1 + } + params { + id: 4 + name: "acl_copy_reason" + bitwidth: 16 + } +} +actions { + preamble { + id: 33532084 + name: "process_ipv6_urpf.on_miss" + alias: "process_ipv6_urpf.on_miss" + } +} +actions { + preamble { + id: 30875552 + name: "process_ipv6_urpf.ipv6_urpf_hit" + alias: "ipv6_urpf_hit" + } + params { + id: 1 + name: "urpf_bd_group" + bitwidth: 16 + } +} +actions { + preamble { + id: 24330304 + name: "process_ipv6_urpf.urpf_miss" + alias: "process_ipv6_urpf.urpf_miss" + } +} +actions { + preamble { + id: 23085876 + name: "process_ipv6_fib.on_miss" + alias: "process_ipv6_fib.on_miss" + } +} +actions { + preamble { + id: 24244023 + name: "process_ipv6_fib.fib_hit_nexthop" + alias: "process_ipv6_fib.fib_hit_nexthop" + } + params { + id: 1 + name: "nexthop_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 26074845 + name: "process_ipv6_fib.fib_hit_ecmp" + alias: "process_ipv6_fib.fib_hit_ecmp" + } + params { + id: 1 + name: "ecmp_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 32064785 + name: "process_urpf_bd.nop" + alias: "process_urpf_bd.nop" + } +} +actions { + preamble { + id: 30904346 + name: "process_urpf_bd.urpf_bd_miss" + alias: "urpf_bd_miss" + } +} +actions { + preamble { + id: 22558474 + name: "process_meter_index.nop_2" + alias: "nop_2" + } +} +actions { + preamble { + id: 32621822 + name: "process_hashes.compute_lkp_ipv4_hash" + alias: "compute_lkp_ipv4_hash" + } +} +actions { + preamble { + id: 22832502 + name: "process_hashes.compute_lkp_ipv6_hash" + alias: "compute_lkp_ipv6_hash" + } +} +actions { + preamble { + id: 24849986 + name: "process_hashes.compute_lkp_non_ip_hash" + alias: "compute_lkp_non_ip_hash" + } +} +actions { + preamble { + id: 17777123 + name: "process_hashes.computed_two_hashes" + alias: "computed_two_hashes" + } +} +actions { + preamble { + id: 29059294 + name: "process_hashes.computed_one_hash" + alias: "computed_one_hash" + } +} +actions { + preamble { + id: 23449258 + name: "process_meter_action.meter_permit_0" + alias: "meter_permit_0" + } +} +actions { + preamble { + id: 18319227 + name: "process_meter_action.meter_deny_0" + alias: "meter_deny_0" + } +} +actions { + preamble { + id: 22439752 + name: "process_ingress_bd_stats.update_ingress_bd_stats" + alias: "update_ingress_bd_stats" + } +} +actions { + preamble { + id: 22920417 + name: "process_ingress_acl_stats.acl_stats_update" + alias: "acl_stats_update" + } +} +actions { + preamble { + id: 22604419 + name: "process_storm_control_stats.nop_3" + alias: "nop_3" + } +} +actions { + preamble { + id: 16804848 + name: "process_fwd_results.nop" + alias: "process_fwd_results.nop" + } +} +actions { + preamble { + id: 17002596 + name: "process_fwd_results.set_l2_redirect_action" + alias: "set_l2_redirect_action" + } +} +actions { + preamble { + id: 32139265 + name: "process_fwd_results.set_fib_redirect_action" + alias: "set_fib_redirect_action" + } +} +actions { + preamble { + id: 21445098 + name: "process_fwd_results.set_cpu_redirect_action" + alias: "set_cpu_redirect_action" + } +} +actions { + preamble { + id: 18475473 + name: "process_fwd_results.set_acl_redirect_action" + alias: "set_acl_redirect_action" + } +} +actions { + preamble { + id: 17492614 + name: "process_fwd_results.set_racl_redirect_action" + alias: "set_racl_redirect_action" + } +} +actions { + preamble { + id: 22605342 + name: "process_fwd_results.set_multicast_route_action" + alias: "set_multicast_route_action" + } +} +actions { + preamble { + id: 20020886 + name: "process_fwd_results.set_multicast_bridge_action" + alias: "set_multicast_bridge_action" + } +} +actions { + preamble { + id: 17448174 + name: "process_fwd_results.set_multicast_flood" + alias: "set_multicast_flood" + } +} +actions { + preamble { + id: 30784012 + name: "process_fwd_results.set_multicast_drop" + alias: "set_multicast_drop" + } +} +actions { + preamble { + id: 21821898 + name: "process_nexthop.nop" + alias: "process_nexthop.nop" + } +} +actions { + preamble { + id: 23407940 + name: "process_nexthop.set_ecmp_nexthop_details" + alias: "set_ecmp_nexthop_details" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } + params { + id: 2 + name: "bd" + bitwidth: 16 + } + params { + id: 3 + name: "nhop_index" + bitwidth: 16 + } + params { + id: 4 + name: "tunnel" + bitwidth: 1 + } +} +actions { + preamble { + id: 21031053 + name: "process_nexthop.set_ecmp_nexthop_details_for_post_routed_flood" + alias: "set_ecmp_nexthop_details_for_post_routed_flood" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "uuc_mc_index" + bitwidth: 16 + } + params { + id: 3 + name: "nhop_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 21867633 + name: "process_nexthop.set_nexthop_details" + alias: "set_nexthop_details" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } + params { + id: 2 + name: "bd" + bitwidth: 16 + } + params { + id: 3 + name: "tunnel" + bitwidth: 1 + } +} +actions { + preamble { + id: 31926291 + name: "process_nexthop.set_nexthop_details_for_post_routed_flood" + alias: "set_nexthop_details_for_post_routed_flood" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "uuc_mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 21091506 + name: "process_multicast_flooding.nop" + alias: "process_multicast_flooding.nop" + } +} +actions { + preamble { + id: 28003351 + name: "process_multicast_flooding.set_bd_flood_mc_index" + alias: "set_bd_flood_mc_index" + } + params { + id: 1 + name: "mc_index" + bitwidth: 16 + } +} +actions { + preamble { + id: 17136543 + name: "process_lag.set_lag_miss" + alias: "set_lag_miss" + } +} +actions { + preamble { + id: 26583734 + name: "process_lag.set_lag_port" + alias: "set_lag_port" + } + params { + id: 1 + name: "port" + bitwidth: 9 + } +} +actions { + preamble { + id: 17749532 + name: "process_lag.set_lag_remote_port" + alias: "set_lag_remote_port" + } + params { + id: 1 + name: "device" + bitwidth: 8 + } + params { + id: 2 + name: "port" + bitwidth: 16 + } +} +actions { + preamble { + id: 25859160 + name: "process_mac_learning.nop" + alias: "process_mac_learning.nop" + } +} +actions { + preamble { + id: 23905849 + name: "process_mac_learning.generate_learn_notify" + alias: "generate_learn_notify" + } +} +actions { + preamble { + id: 31087776 + name: "process_fabric_lag.nop" + alias: "process_fabric_lag.nop" + } +} +actions { + preamble { + id: 20535052 + name: "process_fabric_lag.set_fabric_lag_port" + alias: "set_fabric_lag_port" + } + params { + id: 1 + name: "port" + bitwidth: 9 + } +} +actions { + preamble { + id: 26581760 + name: "process_fabric_lag.set_fabric_multicast" + alias: "set_fabric_multicast" + } + params { + id: 1 + name: "fabric_mgid" + bitwidth: 8 + } +} +actions { + preamble { + id: 25605858 + name: "process_system_acl.drop_stats_update" + alias: "drop_stats_update" + } +} +actions { + preamble { + id: 30951662 + name: "process_system_acl.nop" + alias: "process_system_acl.nop" + } +} +actions { + preamble { + id: 18002712 + name: "process_system_acl.copy_to_cpu_with_reason" + alias: "copy_to_cpu_with_reason" + } + params { + id: 1 + name: "reason_code" + bitwidth: 16 + } +} +actions { + preamble { + id: 29730527 + name: "process_system_acl.redirect_to_cpu" + alias: "redirect_to_cpu" + } + params { + id: 1 + name: "reason_code" + bitwidth: 16 + } +} +actions { + preamble { + id: 26836234 + name: "process_system_acl.copy_to_cpu" + alias: "copy_to_cpu" + } +} +actions { + preamble { + id: 19384363 + name: "process_system_acl.drop_packet" + alias: "drop_packet" + } +} +actions { + preamble { + id: 21945631 + name: "process_system_acl.drop_packet_with_reason" + alias: "drop_packet_with_reason" + } + params { + id: 1 + name: "drop_reason" + bitwidth: 10 + } +} +actions { + preamble { + id: 17559966 + name: "process_system_acl.negative_mirror" + alias: "negative_mirror" + } + params { + id: 1 + name: "session_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 26603359 + name: "egress.egress_port_type_normal" + alias: "egress_port_type_normal" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 28945045 + name: "egress.egress_port_type_fabric" + alias: "egress_port_type_fabric" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 30096172 + name: "egress.egress_port_type_cpu" + alias: "egress_port_type_cpu" + } + params { + id: 1 + name: "ifindex" + bitwidth: 16 + } +} +actions { + preamble { + id: 25692703 + name: "egress.nop" + alias: "egress.nop" + } +} +actions { + preamble { + id: 27128095 + name: "egress.set_mirror_nhop" + alias: "set_mirror_nhop" + } + params { + id: 1 + name: "nhop_idx" + bitwidth: 16 + } +} +actions { + preamble { + id: 28364382 + name: "egress.set_mirror_bd" + alias: "set_mirror_bd" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } +} +actions { + preamble { + id: 24517251 + name: "egress.sflow_pkt_to_cpu" + alias: "sflow_pkt_to_cpu" + } +} +actions { + preamble { + id: 33114731 + name: "process_replication.nop" + alias: "process_replication.nop" + } +} +actions { + preamble { + id: 32648356 + name: "process_replication.set_replica_copy_bridged" + alias: "set_replica_copy_bridged" + } +} +actions { + preamble { + id: 17928584 + name: "process_replication.outer_replica_from_rid" + alias: "outer_replica_from_rid" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 3 + name: "tunnel_type" + bitwidth: 5 + } + params { + id: 4 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 27400339 + name: "process_replication.inner_replica_from_rid" + alias: "inner_replica_from_rid" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 3 + name: "tunnel_type" + bitwidth: 5 + } + params { + id: 4 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 24051746 + name: "process_vlan_decap.nop" + alias: "process_vlan_decap.nop" + } +} +actions { + preamble { + id: 18645134 + name: "process_vlan_decap.remove_vlan_single_tagged" + alias: "remove_vlan_single_tagged" + } +} +actions { + preamble { + id: 24210138 + name: "process_vlan_decap.remove_vlan_double_tagged" + alias: "remove_vlan_double_tagged" + } +} +actions { + preamble { + id: 18743292 + name: "process_tunnel_decap.decap_inner_udp" + alias: "decap_inner_udp" + } +} +actions { + preamble { + id: 26630855 + name: "process_tunnel_decap.decap_inner_tcp" + alias: "decap_inner_tcp" + } +} +actions { + preamble { + id: 29295160 + name: "process_tunnel_decap.decap_inner_icmp" + alias: "decap_inner_icmp" + } +} +actions { + preamble { + id: 28715521 + name: "process_tunnel_decap.decap_inner_unknown" + alias: "decap_inner_unknown" + } +} +actions { + preamble { + id: 17768838 + name: "process_tunnel_decap.decap_vxlan_inner_ipv4" + alias: "decap_vxlan_inner_ipv4" + } +} +actions { + preamble { + id: 28048063 + name: "process_tunnel_decap.decap_vxlan_inner_ipv6" + alias: "decap_vxlan_inner_ipv6" + } +} +actions { + preamble { + id: 24553741 + name: "process_tunnel_decap.decap_vxlan_inner_non_ip" + alias: "decap_vxlan_inner_non_ip" + } +} +actions { + preamble { + id: 24262097 + name: "process_tunnel_decap.decap_genv_inner_ipv4" + alias: "decap_genv_inner_ipv4" + } +} +actions { + preamble { + id: 32575184 + name: "process_tunnel_decap.decap_genv_inner_ipv6" + alias: "decap_genv_inner_ipv6" + } +} +actions { + preamble { + id: 20772090 + name: "process_tunnel_decap.decap_genv_inner_non_ip" + alias: "decap_genv_inner_non_ip" + } +} +actions { + preamble { + id: 30471945 + name: "process_tunnel_decap.decap_nvgre_inner_ipv4" + alias: "decap_nvgre_inner_ipv4" + } +} +actions { + preamble { + id: 28525261 + name: "process_tunnel_decap.decap_nvgre_inner_ipv6" + alias: "decap_nvgre_inner_ipv6" + } +} +actions { + preamble { + id: 20211497 + name: "process_tunnel_decap.decap_nvgre_inner_non_ip" + alias: "decap_nvgre_inner_non_ip" + } +} +actions { + preamble { + id: 20138720 + name: "process_tunnel_decap.decap_gre_inner_ipv4" + alias: "decap_gre_inner_ipv4" + } +} +actions { + preamble { + id: 23326534 + name: "process_tunnel_decap.decap_gre_inner_ipv6" + alias: "decap_gre_inner_ipv6" + } +} +actions { + preamble { + id: 28031461 + name: "process_tunnel_decap.decap_gre_inner_non_ip" + alias: "decap_gre_inner_non_ip" + } +} +actions { + preamble { + id: 22180437 + name: "process_tunnel_decap.decap_ip_inner_ipv4" + alias: "decap_ip_inner_ipv4" + } +} +actions { + preamble { + id: 28785442 + name: "process_tunnel_decap.decap_ip_inner_ipv6" + alias: "decap_ip_inner_ipv6" + } +} +actions { + preamble { + id: 24377716 + name: "process_tunnel_decap.decap_mpls_inner_ipv4_pop1" + alias: "decap_mpls_inner_ipv4_pop1" + } +} +actions { + preamble { + id: 19988268 + name: "process_tunnel_decap.decap_mpls_inner_ipv6_pop1" + alias: "decap_mpls_inner_ipv6_pop1" + } +} +actions { + preamble { + id: 31512019 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop1" + alias: "decap_mpls_inner_ethernet_ipv4_pop1" + } +} +actions { + preamble { + id: 23147554 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop1" + alias: "decap_mpls_inner_ethernet_ipv6_pop1" + } +} +actions { + preamble { + id: 32879799 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop1" + alias: "decap_mpls_inner_ethernet_non_ip_pop1" + } +} +actions { + preamble { + id: 24177007 + name: "process_tunnel_decap.decap_mpls_inner_ipv4_pop2" + alias: "decap_mpls_inner_ipv4_pop2" + } +} +actions { + preamble { + id: 21926248 + name: "process_tunnel_decap.decap_mpls_inner_ipv6_pop2" + alias: "decap_mpls_inner_ipv6_pop2" + } +} +actions { + preamble { + id: 24083695 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop2" + alias: "decap_mpls_inner_ethernet_ipv4_pop2" + } +} +actions { + preamble { + id: 26267777 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop2" + alias: "decap_mpls_inner_ethernet_ipv6_pop2" + } +} +actions { + preamble { + id: 24959429 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop2" + alias: "decap_mpls_inner_ethernet_non_ip_pop2" + } +} +actions { + preamble { + id: 21148947 + name: "process_tunnel_decap.decap_mpls_inner_ipv4_pop3" + alias: "decap_mpls_inner_ipv4_pop3" + } +} +actions { + preamble { + id: 28587059 + name: "process_tunnel_decap.decap_mpls_inner_ipv6_pop3" + alias: "decap_mpls_inner_ipv6_pop3" + } +} +actions { + preamble { + id: 33232904 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv4_pop3" + alias: "decap_mpls_inner_ethernet_ipv4_pop3" + } +} +actions { + preamble { + id: 29258460 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_ipv6_pop3" + alias: "decap_mpls_inner_ethernet_ipv6_pop3" + } +} +actions { + preamble { + id: 21921128 + name: "process_tunnel_decap.decap_mpls_inner_ethernet_non_ip_pop3" + alias: "decap_mpls_inner_ethernet_non_ip_pop3" + } +} +actions { + preamble { + id: 29889416 + name: "process_rewrite.nop" + alias: "process_rewrite.nop" + } +} +actions { + preamble { + id: 20836470 + name: "process_rewrite.set_l2_rewrite" + alias: "set_l2_rewrite" + } +} +actions { + preamble { + id: 20985643 + name: "process_rewrite.set_l2_rewrite_with_tunnel" + alias: "set_l2_rewrite_with_tunnel" + } + params { + id: 1 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 2 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 32028714 + name: "process_rewrite.set_l3_rewrite" + alias: "set_l3_rewrite" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "mtu_index" + bitwidth: 8 + } + params { + id: 3 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 20456020 + name: "process_rewrite.set_l3_rewrite_with_tunnel" + alias: "set_l3_rewrite_with_tunnel" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "dmac" + bitwidth: 48 + } + params { + id: 3 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 4 + name: "tunnel_type" + bitwidth: 5 + } +} +actions { + preamble { + id: 18070213 + name: "process_rewrite.set_mpls_swap_push_rewrite_l2" + alias: "set_mpls_swap_push_rewrite_l2" + } + params { + id: 1 + name: "label" + bitwidth: 20 + } + params { + id: 2 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 3 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 29931909 + name: "process_rewrite.set_mpls_push_rewrite_l2" + alias: "set_mpls_push_rewrite_l2" + } + params { + id: 1 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 2 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 23741811 + name: "process_rewrite.set_mpls_swap_push_rewrite_l3" + alias: "set_mpls_swap_push_rewrite_l3" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "dmac" + bitwidth: 48 + } + params { + id: 3 + name: "label" + bitwidth: 20 + } + params { + id: 4 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 5 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 16881143 + name: "process_rewrite.set_mpls_push_rewrite_l3" + alias: "set_mpls_push_rewrite_l3" + } + params { + id: 1 + name: "bd" + bitwidth: 16 + } + params { + id: 2 + name: "dmac" + bitwidth: 48 + } + params { + id: 3 + name: "tunnel_index" + bitwidth: 14 + } + params { + id: 4 + name: "header_count" + bitwidth: 4 + } +} +actions { + preamble { + id: 29525111 + name: "process_rewrite.rewrite_ipv4_multicast" + alias: "rewrite_ipv4_multicast" + } +} +actions { + preamble { + id: 22371099 + name: "process_rewrite.rewrite_ipv6_multicast" + alias: "rewrite_ipv6_multicast" + } +} +actions { + preamble { + id: 17174709 + name: "process_egress_bd.nop" + alias: "process_egress_bd.nop" + } +} +actions { + preamble { + id: 27472973 + name: "process_egress_bd.set_egress_bd_properties" + alias: "set_egress_bd_properties" + } + params { + id: 1 + name: "smac_idx" + bitwidth: 9 + } +} +actions { + preamble { + id: 31144289 + name: "process_mac_rewrite.nop" + alias: "process_mac_rewrite.nop" + } +} +actions { + preamble { + id: 17709619 + name: "process_mac_rewrite.ipv4_unicast_rewrite" + alias: "ipv4_unicast_rewrite" + } +} +actions { + preamble { + id: 24899669 + name: "process_mac_rewrite.ipv4_multicast_rewrite" + alias: "ipv4_multicast_rewrite" + } +} +actions { + preamble { + id: 32319601 + name: "process_mac_rewrite.ipv6_unicast_rewrite" + alias: "ipv6_unicast_rewrite" + } +} +actions { + preamble { + id: 22422486 + name: "process_mac_rewrite.ipv6_multicast_rewrite" + alias: "ipv6_multicast_rewrite" + } +} +actions { + preamble { + id: 25682421 + name: "process_mac_rewrite.mpls_rewrite" + alias: "mpls_rewrite" + } +} +actions { + preamble { + id: 19760197 + name: "process_mac_rewrite.rewrite_smac" + alias: "rewrite_smac" + } + params { + id: 1 + name: "smac" + bitwidth: 48 + } +} +actions { + preamble { + id: 17753646 + name: "process_mtu.mtu_miss" + alias: "mtu_miss" + } +} +actions { + preamble { + id: 18299046 + name: "process_mtu.ipv4_mtu_check" + alias: "ipv4_mtu_check" + } + params { + id: 1 + name: "l3_mtu" + bitwidth: 16 + } +} +actions { + preamble { + id: 17842211 + name: "process_mtu.ipv6_mtu_check" + alias: "ipv6_mtu_check" + } + params { + id: 1 + name: "l3_mtu" + bitwidth: 16 + } +} +actions { + preamble { + id: 23094047 + name: "process_int_insertion.int_set_header_0_bos" + alias: "int_set_header_0_bos" + } +} +actions { + preamble { + id: 33173909 + name: "process_int_insertion.int_set_header_1_bos" + alias: "int_set_header_1_bos" + } +} +actions { + preamble { + id: 22301520 + name: "process_int_insertion.int_set_header_2_bos" + alias: "int_set_header_2_bos" + } +} +actions { + preamble { + id: 19288675 + name: "process_int_insertion.int_set_header_3_bos" + alias: "int_set_header_3_bos" + } +} +actions { + preamble { + id: 17432508 + name: "process_int_insertion.int_set_header_4_bos" + alias: "int_set_header_4_bos" + } +} +actions { + preamble { + id: 31106134 + name: "process_int_insertion.int_set_header_5_bos" + alias: "int_set_header_5_bos" + } +} +actions { + preamble { + id: 30747137 + name: "process_int_insertion.int_set_header_6_bos" + alias: "int_set_header_6_bos" + } +} +actions { + preamble { + id: 22733351 + name: "process_int_insertion.int_set_header_7_bos" + alias: "int_set_header_7_bos" + } +} +actions { + preamble { + id: 22920701 + name: "process_int_insertion.nop" + alias: "process_int_insertion.nop" + } +} +actions { + preamble { + id: 32129728 + name: "process_int_insertion.int_transit" + alias: "int_transit" + } + params { + id: 1 + name: "switch_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 30253665 + name: "process_int_insertion.int_src" + alias: "int_src" + } + params { + id: 1 + name: "switch_id" + bitwidth: 32 + } + params { + id: 2 + name: "hop_cnt" + bitwidth: 8 + } + params { + id: 3 + name: "ins_cnt" + bitwidth: 5 + } + params { + id: 4 + name: "ins_mask0003" + bitwidth: 4 + } + params { + id: 5 + name: "ins_mask0407" + bitwidth: 4 + } + params { + id: 6 + name: "ins_byte_cnt" + bitwidth: 16 + } + params { + id: 7 + name: "total_words" + bitwidth: 8 + } +} +actions { + preamble { + id: 31721162 + name: "process_int_insertion.int_reset" + alias: "int_reset" + } +} +actions { + preamble { + id: 32954241 + name: "process_int_insertion.int_set_header_0003_i0" + alias: "int_set_header_0003_i0" + } +} +actions { + preamble { + id: 23275607 + name: "process_int_insertion.int_set_header_0003_i1" + alias: "int_set_header_0003_i1" + } +} +actions { + preamble { + id: 27102412 + name: "process_int_insertion.int_set_header_0003_i2" + alias: "int_set_header_0003_i2" + } +} +actions { + preamble { + id: 19654120 + name: "process_int_insertion.int_set_header_0003_i3" + alias: "int_set_header_0003_i3" + } +} +actions { + preamble { + id: 33241480 + name: "process_int_insertion.int_set_header_0003_i4" + alias: "int_set_header_0003_i4" + } +} +actions { + preamble { + id: 21600805 + name: "process_int_insertion.int_set_header_0003_i5" + alias: "int_set_header_0003_i5" + } +} +actions { + preamble { + id: 17232287 + name: "process_int_insertion.int_set_header_0003_i6" + alias: "int_set_header_0003_i6" + } +} +actions { + preamble { + id: 25861291 + name: "process_int_insertion.int_set_header_0003_i7" + alias: "int_set_header_0003_i7" + } +} +actions { + preamble { + id: 18608589 + name: "process_int_insertion.int_set_header_0003_i8" + alias: "int_set_header_0003_i8" + } +} +actions { + preamble { + id: 33380240 + name: "process_int_insertion.int_set_header_0003_i9" + alias: "int_set_header_0003_i9" + } +} +actions { + preamble { + id: 26461414 + name: "process_int_insertion.int_set_header_0003_i10" + alias: "int_set_header_0003_i10" + } +} +actions { + preamble { + id: 22833659 + name: "process_int_insertion.int_set_header_0003_i11" + alias: "int_set_header_0003_i11" + } +} +actions { + preamble { + id: 24557103 + name: "process_int_insertion.int_set_header_0003_i12" + alias: "int_set_header_0003_i12" + } +} +actions { + preamble { + id: 27791506 + name: "process_int_insertion.int_set_header_0003_i13" + alias: "int_set_header_0003_i13" + } +} +actions { + preamble { + id: 33127732 + name: "process_int_insertion.int_set_header_0003_i14" + alias: "int_set_header_0003_i14" + } +} +actions { + preamble { + id: 22273001 + name: "process_int_insertion.int_set_header_0003_i15" + alias: "int_set_header_0003_i15" + } +} +actions { + preamble { + id: 32620806 + name: "process_int_insertion.int_set_header_0407_i0" + alias: "int_set_header_0407_i0" + } +} +actions { + preamble { + id: 22767065 + name: "process_int_insertion.int_set_header_0407_i1" + alias: "int_set_header_0407_i1" + } +} +actions { + preamble { + id: 25397293 + name: "process_int_insertion.int_set_header_0407_i2" + alias: "int_set_header_0407_i2" + } +} +actions { + preamble { + id: 17416507 + name: "process_int_insertion.int_set_header_0407_i3" + alias: "int_set_header_0407_i3" + } +} +actions { + preamble { + id: 21456310 + name: "process_int_insertion.int_set_header_0407_i4" + alias: "int_set_header_0407_i4" + } +} +actions { + preamble { + id: 31754480 + name: "process_int_insertion.int_set_header_0407_i5" + alias: "int_set_header_0407_i5" + } +} +actions { + preamble { + id: 19256178 + name: "process_int_insertion.int_set_header_0407_i6" + alias: "int_set_header_0407_i6" + } +} +actions { + preamble { + id: 17553212 + name: "process_int_insertion.int_set_header_0407_i7" + alias: "int_set_header_0407_i7" + } +} +actions { + preamble { + id: 28210305 + name: "process_int_insertion.int_set_header_0407_i8" + alias: "int_set_header_0407_i8" + } +} +actions { + preamble { + id: 25663543 + name: "process_int_insertion.int_set_header_0407_i9" + alias: "int_set_header_0407_i9" + } +} +actions { + preamble { + id: 24312477 + name: "process_int_insertion.int_set_header_0407_i10" + alias: "int_set_header_0407_i10" + } +} +actions { + preamble { + id: 18804214 + name: "process_int_insertion.int_set_header_0407_i11" + alias: "int_set_header_0407_i11" + } +} +actions { + preamble { + id: 31441272 + name: "process_int_insertion.int_set_header_0407_i12" + alias: "int_set_header_0407_i12" + } +} +actions { + preamble { + id: 20594206 + name: "process_int_insertion.int_set_header_0407_i13" + alias: "int_set_header_0407_i13" + } +} +actions { + preamble { + id: 18158548 + name: "process_int_insertion.int_set_header_0407_i14" + alias: "int_set_header_0407_i14" + } +} +actions { + preamble { + id: 32114559 + name: "process_int_insertion.int_set_header_0407_i15" + alias: "int_set_header_0407_i15" + } +} +actions { + preamble { + id: 19665188 + name: "process_int_insertion.int_set_e_bit" + alias: "int_set_e_bit" + } +} +actions { + preamble { + id: 26727289 + name: "process_int_insertion.int_update_total_hop_cnt" + alias: "int_update_total_hop_cnt" + } +} +actions { + preamble { + id: 26379098 + name: "process_egress_bd_stats.nop_0" + alias: "nop_0" + } +} +actions { + preamble { + id: 26010426 + name: "process_tunnel_encap.nop" + alias: "process_tunnel_encap.nop" + } +} +actions { + preamble { + id: 17672696 + name: "process_tunnel_encap.set_egress_tunnel_vni" + alias: "set_egress_tunnel_vni" + } + params { + id: 1 + name: "vnid" + bitwidth: 24 + } +} +actions { + preamble { + id: 31137876 + name: "process_tunnel_encap.rewrite_tunnel_dmac" + alias: "rewrite_tunnel_dmac" + } + params { + id: 1 + name: "dmac" + bitwidth: 48 + } +} +actions { + preamble { + id: 31188157 + name: "process_tunnel_encap.rewrite_tunnel_ipv4_dst" + alias: "rewrite_tunnel_ipv4_dst" + } + params { + id: 1 + name: "ip" + bitwidth: 32 + } +} +actions { + preamble { + id: 26316217 + name: "process_tunnel_encap.rewrite_tunnel_ipv6_dst" + alias: "rewrite_tunnel_ipv6_dst" + } + params { + id: 1 + name: "ip" + bitwidth: 128 + } +} +actions { + preamble { + id: 22012831 + name: "process_tunnel_encap.inner_ipv4_udp_rewrite" + alias: "inner_ipv4_udp_rewrite" + } +} +actions { + preamble { + id: 32489680 + name: "process_tunnel_encap.inner_ipv4_tcp_rewrite" + alias: "inner_ipv4_tcp_rewrite" + } +} +actions { + preamble { + id: 18677479 + name: "process_tunnel_encap.inner_ipv4_icmp_rewrite" + alias: "inner_ipv4_icmp_rewrite" + } +} +actions { + preamble { + id: 27242308 + name: "process_tunnel_encap.inner_ipv4_unknown_rewrite" + alias: "inner_ipv4_unknown_rewrite" + } +} +actions { + preamble { + id: 18850099 + name: "process_tunnel_encap.inner_ipv6_udp_rewrite" + alias: "inner_ipv6_udp_rewrite" + } +} +actions { + preamble { + id: 25639607 + name: "process_tunnel_encap.inner_ipv6_tcp_rewrite" + alias: "inner_ipv6_tcp_rewrite" + } +} +actions { + preamble { + id: 19613422 + name: "process_tunnel_encap.inner_ipv6_icmp_rewrite" + alias: "inner_ipv6_icmp_rewrite" + } +} +actions { + preamble { + id: 30542777 + name: "process_tunnel_encap.inner_ipv6_unknown_rewrite" + alias: "inner_ipv6_unknown_rewrite" + } +} +actions { + preamble { + id: 24131522 + name: "process_tunnel_encap.inner_non_ip_rewrite" + alias: "inner_non_ip_rewrite" + } +} +actions { + preamble { + id: 20103093 + name: "process_tunnel_encap.ipv4_vxlan_rewrite" + alias: "ipv4_vxlan_rewrite" + } +} +actions { + preamble { + id: 19046026 + name: "process_tunnel_encap.ipv4_genv_rewrite" + alias: "ipv4_genv_rewrite" + } +} +actions { + preamble { + id: 25961605 + name: "process_tunnel_encap.ipv4_nvgre_rewrite" + alias: "ipv4_nvgre_rewrite" + } +} +actions { + preamble { + id: 23176024 + name: "process_tunnel_encap.ipv4_gre_rewrite" + alias: "ipv4_gre_rewrite" + } +} +actions { + preamble { + id: 32138848 + name: "process_tunnel_encap.ipv4_ip_rewrite" + alias: "ipv4_ip_rewrite" + } +} +actions { + preamble { + id: 32256671 + name: "process_tunnel_encap.ipv4_erspan_t3_rewrite" + alias: "ipv4_erspan_t3_rewrite" + } +} +actions { + preamble { + id: 20523098 + name: "process_tunnel_encap.ipv6_gre_rewrite" + alias: "ipv6_gre_rewrite" + } +} +actions { + preamble { + id: 18288010 + name: "process_tunnel_encap.ipv6_ip_rewrite" + alias: "ipv6_ip_rewrite" + } +} +actions { + preamble { + id: 26867995 + name: "process_tunnel_encap.ipv6_nvgre_rewrite" + alias: "ipv6_nvgre_rewrite" + } +} +actions { + preamble { + id: 32157079 + name: "process_tunnel_encap.ipv6_vxlan_rewrite" + alias: "ipv6_vxlan_rewrite" + } +} +actions { + preamble { + id: 31421314 + name: "process_tunnel_encap.ipv6_genv_rewrite" + alias: "ipv6_genv_rewrite" + } +} +actions { + preamble { + id: 21179245 + name: "process_tunnel_encap.ipv6_erspan_t3_rewrite" + alias: "ipv6_erspan_t3_rewrite" + } +} +actions { + preamble { + id: 25235855 + name: "process_tunnel_encap.mpls_ethernet_push1_rewrite" + alias: "mpls_ethernet_push1_rewrite" + } +} +actions { + preamble { + id: 23444864 + name: "process_tunnel_encap.mpls_ip_push1_rewrite" + alias: "mpls_ip_push1_rewrite" + } +} +actions { + preamble { + id: 20797182 + name: "process_tunnel_encap.mpls_ethernet_push2_rewrite" + alias: "mpls_ethernet_push2_rewrite" + } +} +actions { + preamble { + id: 24407457 + name: "process_tunnel_encap.mpls_ip_push2_rewrite" + alias: "mpls_ip_push2_rewrite" + } +} +actions { + preamble { + id: 20185303 + name: "process_tunnel_encap.mpls_ethernet_push3_rewrite" + alias: "mpls_ethernet_push3_rewrite" + } +} +actions { + preamble { + id: 32853703 + name: "process_tunnel_encap.mpls_ip_push3_rewrite" + alias: "mpls_ip_push3_rewrite" + } +} +actions { + preamble { + id: 25002800 + name: "process_tunnel_encap.fabric_rewrite" + alias: "fabric_rewrite" + } + params { + id: 1 + name: "tunnel_index" + bitwidth: 14 + } +} +actions { + preamble { + id: 21075337 + name: "process_tunnel_encap.tunnel_mtu_check" + alias: "tunnel_mtu_check" + } + params { + id: 1 + name: "l3_mtu" + bitwidth: 16 + } +} +actions { + preamble { + id: 32323556 + name: "process_tunnel_encap.tunnel_mtu_miss" + alias: "tunnel_mtu_miss" + } +} +actions { + preamble { + id: 19600568 + name: "process_tunnel_encap.set_tunnel_rewrite_details" + alias: "set_tunnel_rewrite_details" + } + params { + id: 1 + name: "outer_bd" + bitwidth: 16 + } + params { + id: 2 + name: "smac_idx" + bitwidth: 9 + } + params { + id: 3 + name: "dmac_idx" + bitwidth: 14 + } + params { + id: 4 + name: "sip_index" + bitwidth: 9 + } + params { + id: 5 + name: "dip_index" + bitwidth: 14 + } +} +actions { + preamble { + id: 25019307 + name: "process_tunnel_encap.set_mpls_rewrite_push1" + alias: "set_mpls_rewrite_push1" + } + params { + id: 1 + name: "label1" + bitwidth: 20 + } + params { + id: 2 + name: "exp1" + bitwidth: 3 + } + params { + id: 3 + name: "ttl1" + bitwidth: 8 + } + params { + id: 4 + name: "smac_idx" + bitwidth: 9 + } + params { + id: 5 + name: "dmac_idx" + bitwidth: 14 + } +} +actions { + preamble { + id: 32131701 + name: "process_tunnel_encap.set_mpls_rewrite_push2" + alias: "set_mpls_rewrite_push2" + } + params { + id: 1 + name: "label1" + bitwidth: 20 + } + params { + id: 2 + name: "exp1" + bitwidth: 3 + } + params { + id: 3 + name: "ttl1" + bitwidth: 8 + } + params { + id: 4 + name: "label2" + bitwidth: 20 + } + params { + id: 5 + name: "exp2" + bitwidth: 3 + } + params { + id: 6 + name: "ttl2" + bitwidth: 8 + } + params { + id: 7 + name: "smac_idx" + bitwidth: 9 + } + params { + id: 8 + name: "dmac_idx" + bitwidth: 14 + } +} +actions { + preamble { + id: 18296528 + name: "process_tunnel_encap.set_mpls_rewrite_push3" + alias: "set_mpls_rewrite_push3" + } + params { + id: 1 + name: "label1" + bitwidth: 20 + } + params { + id: 2 + name: "exp1" + bitwidth: 3 + } + params { + id: 3 + name: "ttl1" + bitwidth: 8 + } + params { + id: 4 + name: "label2" + bitwidth: 20 + } + params { + id: 5 + name: "exp2" + bitwidth: 3 + } + params { + id: 6 + name: "ttl2" + bitwidth: 8 + } + params { + id: 7 + name: "label3" + bitwidth: 20 + } + params { + id: 8 + name: "exp3" + bitwidth: 3 + } + params { + id: 9 + name: "ttl3" + bitwidth: 8 + } + params { + id: 10 + name: "smac_idx" + bitwidth: 9 + } + params { + id: 11 + name: "dmac_idx" + bitwidth: 14 + } +} +actions { + preamble { + id: 19608310 + name: "process_tunnel_encap.cpu_rx_rewrite" + alias: "cpu_rx_rewrite" + } +} +actions { + preamble { + id: 23356140 + name: "process_tunnel_encap.fabric_unicast_rewrite" + alias: "fabric_unicast_rewrite" + } +} +actions { + preamble { + id: 28769719 + name: "process_tunnel_encap.fabric_multicast_rewrite" + alias: "fabric_multicast_rewrite" + } + params { + id: 1 + name: "fabric_mgid" + bitwidth: 16 + } +} +actions { + preamble { + id: 21832280 + name: "process_tunnel_encap.rewrite_tunnel_smac" + alias: "rewrite_tunnel_smac" + } + params { + id: 1 + name: "smac" + bitwidth: 48 + } +} +actions { + preamble { + id: 26252648 + name: "process_tunnel_encap.rewrite_tunnel_ipv4_src" + alias: "rewrite_tunnel_ipv4_src" + } + params { + id: 1 + name: "ip" + bitwidth: 32 + } +} +actions { + preamble { + id: 17291318 + name: "process_tunnel_encap.rewrite_tunnel_ipv6_src" + alias: "rewrite_tunnel_ipv6_src" + } + params { + id: 1 + name: "ip" + bitwidth: 128 + } +} +actions { + preamble { + id: 17270234 + name: "process_int_outer_encap.int_update_vxlan_gpe_ipv4" + alias: "int_update_vxlan_gpe_ipv4" + } +} +actions { + preamble { + id: 28075883 + name: "process_int_outer_encap.int_add_update_vxlan_gpe_ipv4" + alias: "int_add_update_vxlan_gpe_ipv4" + } +} +actions { + preamble { + id: 22421955 + name: "process_int_outer_encap.nop" + alias: "process_int_outer_encap.nop" + } +} +actions { + preamble { + id: 25117848 + name: "process_vlan_xlate.set_egress_packet_vlan_untagged" + alias: "set_egress_packet_vlan_untagged" + } +} +actions { + preamble { + id: 17087433 + name: "process_vlan_xlate.set_egress_packet_vlan_tagged" + alias: "set_egress_packet_vlan_tagged" + } + params { + id: 1 + name: "vlan_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 25310390 + name: "process_vlan_xlate.set_egress_packet_vlan_double_tagged" + alias: "set_egress_packet_vlan_double_tagged" + } + params { + id: 1 + name: "s_tag" + bitwidth: 12 + } + params { + id: 2 + name: "c_tag" + bitwidth: 12 + } +} +actions { + preamble { + id: 28243510 + name: "process_egress_filter.egress_filter_check" + alias: "egress_filter_check" + } +} +actions { + preamble { + id: 20968920 + name: "process_egress_filter.set_egress_filter_drop" + alias: "set_egress_filter_drop" + } +} +actions { + preamble { + id: 23035377 + name: "process_egress_acl.nop" + alias: "process_egress_acl.nop" + } +} +actions { + preamble { + id: 17820530 + name: "process_egress_acl.egress_mirror" + alias: "egress_mirror" + } + params { + id: 1 + name: "session_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 30057387 + name: "process_egress_acl.egress_mirror_drop" + alias: "egress_mirror_drop" + } + params { + id: 1 + name: "session_id" + bitwidth: 32 + } +} +actions { + preamble { + id: 29764557 + name: "process_egress_acl.egress_redirect_to_cpu" + alias: "egress_redirect_to_cpu" + } + params { + id: 1 + name: "reason_code" + bitwidth: 16 + } +} +action_profiles { + preamble { + id: 294046256 + name: "bd_action_profile" + alias: "bd_action_profile" + } + table_ids: 41259296 + size: 1024 +} +action_profiles { + preamble { + id: 297500867 + name: "ecmp_action_profile" + alias: "ecmp_action_profile" + annotations: "@mode(\"fair\")" + } + table_ids: 37801575 + with_selector: true + size: 1024 +} +action_profiles { + preamble { + id: 298941036 + name: "fabric_lag_action_profile" + alias: "fabric_lag_action_profile" + annotations: "@mode(\"fair\")" + } + table_ids: 49655016 + with_selector: true + size: 1024 +} +action_profiles { + preamble { + id: 301351402 + name: "lag_action_profile" + alias: "lag_action_profile" + annotations: "@mode(\"fair\")" + } + table_ids: 39929658 + with_selector: true + size: 1024 +} +counters { + preamble { + id: 318219319 + name: "ingress_bd_stats_count" + alias: "ingress_bd_stats_count" + annotations: "@min_width(32)" + } + spec { + unit: BOTH + } + size: 1024 +} +counters { + preamble { + id: 305659160 + name: "acl_stats_count" + alias: "acl_stats_count" + annotations: "@min_width(16)" + } + spec { + unit: BOTH + } + size: 1024 +} +counters { + preamble { + id: 303057582 + name: "drop_stats" + alias: "drop_stats" + } + spec { + unit: PACKETS + } + size: 1024 +} +counters { + preamble { + id: 314084312 + name: "drop_stats_2" + alias: "drop_stats_2" + } + spec { + unit: PACKETS + } + size: 1024 +} +direct_counters { + preamble { + id: 329536454 + name: "sflow_ingress_session_pkt_counter" + alias: "sflow_ingress_session_pkt_counter" + } + spec { + unit: PACKETS + } + direct_table_id: 39690474 +} +direct_counters { + preamble { + id: 325625044 + name: "ipv4_multicast_route_s_g_stats" + alias: "ipv4_multicast_route_s_g_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 33753925 +} +direct_counters { + preamble { + id: 334762335 + name: "ipv4_multicast_route_star_g_stats" + alias: "ipv4_multicast_route_star_g_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 45227473 +} +direct_counters { + preamble { + id: 327278089 + name: "ipv6_multicast_route_s_g_stats" + alias: "ipv6_multicast_route_s_g_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 41794846 +} +direct_counters { + preamble { + id: 330716124 + name: "ipv6_multicast_route_star_g_stats" + alias: "ipv6_multicast_route_star_g_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 43802673 +} +direct_counters { + preamble { + id: 328880782 + name: "meter_stats" + alias: "meter_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 37395571 +} +direct_counters { + preamble { + id: 324212864 + name: "storm_control_stats" + alias: "storm_control_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 39000192 +} +direct_counters { + preamble { + id: 329244822 + name: "egress_bd_stats" + alias: "egress_bd_stats" + annotations: "@min_width(32)" + } + spec { + unit: BOTH + } + direct_table_id: 44032150 +} +meters { + preamble { + id: 346099050 + name: "storm_control_meter" + alias: "storm_control_meter" + } + spec { + unit: BYTES + } + size: 1024 +} +direct_meters { + preamble { + id: 362522853 + name: "meter_index" + alias: "meter_index" + } + spec { + unit: BYTES + } + direct_table_id: 43755749 +} +digests { + preamble { + id: 401035839 + name: "mac_learn_digest" + alias: "mac_learn_digest" + } + type_spec { + struct { + name: "mac_learn_digest" + } + } +} +type_info { + structs { + key: "mac_learn_digest" + value { + members { + name: "bd" + type_spec { + bitstring { + bit { + bitwidth: 16 + } + } + } + } + members { + name: "lkp_mac_sa" + type_spec { + bitstring { + bit { + bitwidth: 48 + } + } + } + } + members { + name: "ifindex" + type_spec { + bitstring { + bit { + bitwidth: 16 + } + } + } + } + } + } +} diff --git a/tools/ci-build.sh b/tools/ci-build.sh index 9a5493e3d15..5290225feb5 100755 --- a/tools/ci-build.sh +++ b/tools/ci-build.sh @@ -52,6 +52,8 @@ P4C_DIR=$(readlink -f ${THIS_DIR}/..) : "${ENABLE_EBPF:=ON}" # P4TC is enabled by default. : "${ENABLE_P4TC:=ON}" +# P4-14 is disabled by default. +: "${SUPPORT_P4_14:=OFF}" # P4TC STF is only enabled when running p4tc tagged PRs. : "${INSTALL_STF_P4TC_DEPENDENCIES:=OFF}" # This is the list of back ends that can be enabled. @@ -352,6 +354,8 @@ CMAKE_FLAGS+="-DENABLE_WERROR=${ENABLE_WERROR} " CMAKE_FLAGS+="-DENABLE_SANITIZERS=${ENABLE_SANITIZERS} " # Enable auto var initialization with pattern. CMAKE_FLAGS+="-DBUILD_AUTO_VAR_INIT_PATTERN=${BUILD_AUTO_VAR_INIT_PATTERN} " +# Enable P4-14 support. +CMAKE_FLAGS+="-DSUPPORT_P4_14=${SUPPORT_P4_14} " # Assemble the enabled back ends as a single CMake variable. build_cmake_enabled_backend_string CMAKE_FLAGS+="${CMAKE_ENABLE_BACKENDS} " diff --git a/tools/driver/p4c.in b/tools/driver/p4c.in index ae558846811..768490832b5 100644 --- a/tools/driver/p4c.in +++ b/tools/driver/p4c.in @@ -43,6 +43,7 @@ os.environ['P4C_BUILD_TYPE'] = build_type os.environ['P4C_BIN_DIR'] = install_dir os.environ['P4C_CFG_PATH'] = os.path.join(artifacts_dir, "p4c_src") os.environ['P4C_16_INCLUDE_PATH'] = os.path.realpath(os.path.join(artifacts_dir, "p4include")) +# TODO: Remove once SUPPORT_P4_14 is not available anymore. os.environ['P4C_14_INCLUDE_PATH'] = os.path.realpath(os.path.join(artifacts_dir, "p4_14include")) from p4c_src.main import main